Avatar billede billyboy92 Nybegynder
02. maj 2011 - 21:08 Der er 3 kommentarer og
1 løsning

fjern produkter fra indkøbs kurv - array_diff() til at fjerne fra session array?

Hej, jeg er i gang med at programmere en webshop hvor jeg har lavet det sådan at man kan tilføje produkter i en kurv, nu vil jeg gerne have at man skal kunne fjerne produkterne igen både alle og det enkelte produkt der er valgt

det ligger på http://billy.wi12.ots.dk/simpleshop/ og er en skole opgave jeg er i gang med

problemet er at når jeg fjerner alt i kurven så gør den det sådan set, men den kommer med fejlbeskeden:

Warning: Wrong parameter count for array_diff() in /home/billy.wi12.ots.dk/public_html/simpleshop/tilfojtilkurv.php on line 12

når jeg klikker for at fjerne kun et produkt i kurven kommer der fejlbeskeden:

Warning: array_diff() [function.array-diff]: Argument #2 is not an array in /home/billy.wi12.ots.dk/public_html/simpleshop/tilfojtilkurv.php on line 7

Koder
min kurv som er i en funktion
<?php
    function kurv(){
        if($_SESSION['kurv'] != ""){
        $produktantal = count($_SESSION['kurv']);
       
        foreach ($_SESSION['kurv'] as $produkt => $produktantal){
            $query = '
            SELECT
                id, navn, beskrivelse_kort, beskrivelse, pris
            FROM
                simpleshop_produkter
            WHERE
                id = ' . $produkt;
       
       
        $result = mysql_query( $query ) or die( mysql_error() );
       
            $row = mysql_fetch_assoc($result);
            echo "<p><a href='produkt_detalje.php?produkt=".$produkt."'><strong>".$row['navn']."</strong></a>";
            echo " - antal: <strong>" . $produktantal . "</strong>";
            echo " - <a href='tilfojtilkurv.php?fjernprodukt=".$produkt."'>fjern</a><br />";
            echo "</p>";
        }
        }else{
            echo "<p>Din kurv er tom</p>";
        }
    }
?>


tilfojtilkurv.php
hvor produkter bliver tilføjet og fjernet igen, både enkelt og alle

<? require_once('include/header.php') ?>
<div id="krummer">Du er her:&nbsp;<a href="index.php">Forside</a>&nbsp;&middot;&nbsp;<em>Din kurv</em></div>

<?php

    if(isset($_GET['fjernprodukt'])){
        $_SESSION['kurv']=array_diff($_SESSION['kurv'],$_GET['fjernprodukt']);
        echo "<h3>Produkt fjernet</h3>";
    }
   
    if(isset($_GET['tomkurven'])){
        $_SESSION['kurv']=array_diff($_SESSION['kurv']);
        echo "<h3>Kurven er blevet tømt</h3>";
    }

  // produktet skal i en session array
  // $_SESSION['produkt']['pris']['varenr']
 
    if($_GET['produkt'] != ""){
        $produkt = $_GET['produkt'];
        $_SESSION['kurv'][$produkt]++;
        header('location:'.$_SERVER["PHP_SELF"]);
    }
     
   
    require_once('include/funktion/kurv.php');
    echo "<h4>Kurv</h4>";
    kurv();
?>
<? require_once('include/footer.php') ?>



nogen der kan hjælpe mig med at fjerne fejlbeskeden, og kunne fjerne et enkelt produkt der er puttet i kurven adgangen

vh. Billy
Avatar billede intenz Novice
02. maj 2011 - 22:24 #1
array_diff() sletter ikke et element i et array. Det bruges til at finde forskellen mellem to forskellige arrays.
http://php.net/manual/en/function.array-diff.php

Du skal i stedet bruge unset()
http://dk.php.net/manual/en/function.unset.php


<?php
  $x = array('slet_mig' => true);
  unset( $x['slet_mig'] );
  var_dump($x);
?>
Avatar billede billyboy92 Nybegynder
03. maj 2011 - 00:02 #2
hej, jeg har forsøgt hvad du skrev, men fik hele tiden fejlbeskeder, jeg prøvede derimod med seesion_unselt() og så virkede det sådan set med at fjerne alle produkter ganske fint, så skal jeg bare finde en måde og fjerne kun et produkt adgangen

min kode for tilfojkurv.php er nu

<? require_once('include/header.php') ?>
<div id="krummer">Du er her:&nbsp;<a href="index.php">Forside</a>&nbsp;&middot;&nbsp;<em>Din kurv</em></div>

<?php

    if(isset($_GET['fjernprodukt'])){
        /*$id = $_GET['fjernprodukt'];
        $_SESSION['kurv']=array_diff($_SESSION['kurv'],$id);*/
       
        $produkt = $_GET['fjernprodukt'];
        $x = $_SESSION['kurv'][$produkt];
        session_unset( $x['kurv'] );
        var_dump($x);

        echo "<h3>Produkt fjernet</h3>";
    }
   
    if(isset($_GET['tomkurven'])){
        session_unset($_SESSION['kurv']);
        echo "<h3>Kurven er blevet tømt</h3>";
    }

  // produktet skal i en session array
  // $_SESSION['produkt']['pris']['varenr']
 
    if($_GET['produkt'] != ""){
        $produkt = $_GET['produkt'];
        $_SESSION['kurv'][$produkt]++;
        header('location:'.$_SERVER["PHP_SELF"]);
    }
     
   
    require_once('include/funktion/kurv.php');
    echo "<h4>Kurv</h4>";
    kurv();
?>
<? require_once('include/footer.php') ?>
Avatar billede intenz Novice
04. maj 2011 - 20:51 #3
Det her er forkert:
$x = $_SESSION['kurv'][$produkt];
        session_unset( $x['kurv'] );


Lav:
unset($_SESSION['kurv'][$produkt]);
Avatar billede billyboy92 Nybegynder
05. maj 2011 - 15:10 #4
tusind tak :) nu virker det
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester