Avatar billede yHec Novice
08. oktober 2006 - 18:23 Der er 8 kommentarer og
1 løsning

opdaterer værdier i et array

Jeg er sikker på det her er pinligt enkelt...

Jeg har et array der består af disse:
$_SESSION['kurv']['antal']
$_SESSION['kurv']['varenummer']
$_SESSION['kurv']['vare']
$_SESSION['kurv']['pris']

Nu er det sådan, at en kunde skal have muligheden for at øge antallet af en given vare i kurven. Med andre ord, så skal jeg finde ud af at lægge en til eller trække en fra $_SESSION['kurv']['antal'], uden at lave geed i resten af arrayet. Jeg har mlavet følgende:

$i=$_GET['count'];
$antal=$_SESSION['kurv'][$i]['antal']+1;
$_SESSION['kurv'][$i]['antal']=$antal;
echo $antal."<br>";
echo $_SESSION['kurv'][$i]['antal'];

Men det skaber kun kaos. Det ser ud til de resterende værdier slettes, og der lægges IKKE en til $antal.

Hvad er problemet????

/y
Avatar billede fixxxer Nybegynder
08. oktober 2006 - 18:33 #1
Hvad skal din $i variabel gøre godt for?

Så vidt jeg kan se er det den der skaber kaos.


Prøv i stedet:

$_SESSION['kurv']['antal']++;

echo $_SESSION['kurv']['antal'];
Avatar billede yHec Novice
08. oktober 2006 - 18:43 #2
$i er indexet! På den måde rettes den rette værdi i arrayet. Det er IKKE den der skaber kaos. Der er jo flere varer i kurven (måske), og php skal vide, hvilken det er der skal opdateres. Det er det $i skal bruges til - skulle jeg mene.

/y
Avatar billede fixxxer Nybegynder
08. oktober 2006 - 19:01 #3
Følgende stemmer ikke overens med det du skriver efterfølgende:

$_SESSION['kurv']['antal']
$_SESSION['kurv']['varenummer']
$_SESSION['kurv']['vare']
$_SESSION['kurv']['pris']


Jeg kan godt se hvad du bruger dit index til, men hvis du et sted starter med at proppe en vare ind fx:

$_SESSION['kurv']['antal'] = 1;
$_SESSION['kurv']['varenummer'] = 4237847;
$_SESSION['kurv']['vare'] = 'brødmaskine';
$_SESSION['kurv']['pris'] = 236.50;

Og sender forsøger at forøge antalet:

$_SESSION['kurv'][$i]['antal']++;


Så er det klar at det går galt !-)


Derfor: Smid den del af scriptet hvor du tilføjer en vare til kurven, ellers er det ret svært at gennemskue dit design.
Avatar billede coderdk Praktikant
08. oktober 2006 - 19:09 #4
Jeg ville gribe det an på en anden måde:

$_SESSION['kurv'][$varenummer]['antal']
$_SESSION['kurv'][$varenummer]['vare']
$_SESSION['kurv'][$varenummer]['pris']

Så kan du også meget hurtigt se om kunden har en vare i kurven:

if ( array_key_exists( $_SESSION['kurv'], $varenummer ) )
{
  // kunden har varen
}
else
{
  // kunden har ikke varen
}

Og så for at tælle antallet op:

$_SESSION['kurv'][$varenummer]['antal']++;
Avatar billede yHec Novice
08. oktober 2006 - 20:00 #5
fixxxer>> Her den stump hvor jeg fylder i kurven. 
$varer = array(
    'varenummer' => $_GET['varenummer'],
    'vare' => $_GET['vare'],
    'pris' => $_GET['pris'],
    'antal' => 1
    ); //laver et array med vareoplysninger.
$_SESSION['kurv'][]=$varer; //sætter varen ind i slutningen af arrayet.

Når jeg udskriver kurven gør jeg det således:  while $i < count($_SESSION['kurv'] {
  echo $_SESSION['kurv'][$i]['antal']
  for alle 4 elementer
}

Og det virker fint!!!
Coderdk> Jeg kan sagtens se pointen i din struktur. Men jeg har prøvet Men jeg har prøvet $_SESSION['kurv'][$i]['antal']++, men så forsvinder indholdet af de andre elementer ('vare' etc).

/y
Avatar billede yHec Novice
08. oktober 2006 - 23:36 #6
Nå, jeg fik det skrevet lidt om, så nu virker det:
if(($_GET['add'])) {
    $i=$_GET['index'];
    $antal=$_SESSION['kurv'][$i]['antal']+1;
    $_SESSION['kurv'][$i]['antal']=$antal;
    }

if(($_GET['subt'])) {
    $i=$_GET['index'];
    $antal=$_SESSION['kurv'][$i]['antal']-1;
    $_SESSION['kurv'][$i]['antal']=$antal;
    }

... så jeg snupper pointene til mig selv, med mindre der er vilde protester?

/y
Avatar billede coderdk Praktikant
09. oktober 2006 - 00:37 #7
For min skyld ingen alarm, men dette *BURDE* altså virke:

if(($_GET['add'])) {
    $_SESSION['kurv'][$_GET['index']]['antal']++;
    }

if(($_GET['subt'])) {
    $_SESSION['kurv'][$_GET['index']]['antal']--;
    }
Avatar billede coderdk Praktikant
09. oktober 2006 - 00:38 #8
(Og jeg synes stadig at det er smartere at bruge varenummer som index, så behøver du ikke lede kurven igennem efter et varenummer - så kan du bare bruge array_key_exists ;))
Avatar billede fixxxer Nybegynder
09. oktober 2006 - 14:14 #9
Enig med coderdk. Hvis du allerede har et unikt id for hver vare, så bør du bruge det i stedet for et fortløbende nummer, til identifikation af indholdet af kurven.
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