20. juli 2010 - 19:44
Der er
17 kommentarer og 1 løsning
Hjælp til webshop - cookie/session
Hejsa Jeg har brug for hjælp til at komme rigtigt i gang med en webshop. Jeg er gået lidt i gang men ønsker lidt hjælp for at komme videre. Et problem som jeg er stødt ind i, er at holde styr på flere varer vha. af session. Skal man bruge et array? $_SESSION['vareid'][] Og hvordan? Lidt kode som prøve... while($row = mysql_fetch_array($result)){ $sum = $row['Pris'] * $row['antal']; $_SESSION['varid'][] = $row['vareid']; $_SESSION['størrelse'][] = $row['størrelse']; $_SESSION['sum'] = $sum; }
Annonceindlæg fra Trustworks
Tillid i en Zero-Trust verden
Med voksende trusler, nye EU-krav og øget kompleksitet er cybersikkerhed nu en central ledelsesopgave på linje med strategi og økonomi.
jeg ville lave et array med hver vare i kurven i min session: $_SESSION['basket'][n]['product_id']; $_SESSION['basket'][n]['amount']; $_SESSION['basket'][n]['price']; evt: $_SESSION['basket'][n]['total_price']; så skal du huske at tjekke om varen er i kurven når den bliver lagt i, for så skal antallet blot opdateres i stedet for at tilføje den igen. når du sletter en vare skal du huske at bruge array_values...
Hvordan skal jeg så holde styr på dem? while($row = mysql_fetch_array($result)){ $_SESSION['kurv'][n]['produktid'] = $row[antal]; $_SESSION['kurv'][n]['beløb'] = $row[størrelse]; $_SESSION['kurv'][n]['pris'] = $row[Pris]; $_SESSION['kurv'][n]['total_pris'] = $row[antal] * $row[pris]; } Hvordan finder jeg så ud af hvilke ting som ligger i arrayet.
Det skal måske lige siges at det ikke er en fuld integreret webshop men nærmere en bestillingsside. Så jeg behøver ikke så mange detaljer men blot at holde styr på nogle udpegede vare og så til sidst samle dem på en bestillingsside.
når der bliver puttet en vare i kurven gør du sådan:
$new_item = array('product_id'=>$id,'amount'=>$amount,'price'=>$price,'total_price'=>$amount*$price); $_SESSION['basket'][]=$new_item; når du så skal skrive indholdet af kurven ud, kan du gøre det sådan:
echo "<table><tr><th>Produkt id</th><th>Antal</th><th>Pris</th><th>I alt</th></tr>\n"; $size = sizeof($_SESSION['basket']); for($i=0;$i<=$size;$i++){ echo "<tr><td>".$_SESSION['basket'][$i]['product_id']."</td><td>".$_SESSION['basket'][$i]['amount']."</td><td>".$_SESSION['basket'][$i]['price']."</td><td>".$_SESSION['basket'][$i]['total_price']."</td></tr>\n"; } echo "</table>";
En mulig løsning ville være at tage at lave en kontrol på dine varer og så give dem et unikt id.
$uniktId = md5($row["vareid"].$row["størrelse"]); $_SESSION["varer"][$uniktId]["vareid"] = $row["vareid"]; $_SESSION["varer"][$uniktId]["størrelse"] = $row["størrelse"]; $_SESSION["varer"][$uniktId]["pris"] = $row["pris"]; $_SESSION["varer"][$uniktId]["antal"] = $antal; På den måde kan du ud fra vareid'et og størrelsen kontrollere om varen allerede er i kurven og om du så bare skal lægge flere til eller om det faktisk er en ny vare:
$uniktId = md5($row["vareid"].$row["størrelse"]); if( !isset($_SESSION["varer"][$uniktId])) { $_SESSION["varer"][$uniktId]["vareid"] = $row["vareid"]; $_SESSION["varer"][$uniktId]["størrelse"] = $row["størrelse"]; $_SESSION["varer"][$uniktId]["pris"] = $row["pris"]; $_SESSION["varer"][$uniktId]["antal"] = $antal; } else { $_SESSION["varer"][$uniktId]["antal"] += $antal; }
den var faktisk snedig den dér repox - så er man fri for at iterere gennem hele arayet...
Okay kan dog, ikke få det helt simple det at spille. Har forsøgt sådan her: $result = mysql_query("SELECT * FROM ordrer WHERE sessionid = '".$_SESSION['sessionid']."'"); while($row = mysql_fetch_array($result)){ $id = $row['billedeid']; $amount = $row['antal']; $price = $row['Pris']; $new_item = array('product_id'=>$id,'amount'=>$amount,'price'=>$price,'total_price'=>$amount*$price); $_SESSION['basket'][]=$new_item; } echo "<table><tr><th>Produkt id</th><th>Antal</th><th>Pris</th><th>I alt</th></tr>\n"; $size = sizeof($_SESSION['basket']); for($i=0;$i<=$size;$i++){ echo "<tr><td>".$_SESSION['basket'][$i]['product_id']."</td><td>".$_SESSION['basket'][$i]['amount']."</td><td>".$_SESSION['basket'][$i]['price']."</td><td>".$_SESSION['basket'][$i]['total_price']."</td></tr>\n"; echo "</table>"; } ?> ----------------------------------- Der er som om den kører en STOR løkke, lang svar tid og helt blank/tom skærm.
Jeg prøver lige - repox mulighed. Gerne lidt mere hjælp da dette er en ny form for php-programmering for mig. Session og cookies har jeg dog arbejdet en del med, men ikke i arrays.
Hvorfor bliver den ved med at tage en linje for meget med? $size = sizeof($_SESSION['basket']); for($i=0;$i<=$size;$i++){ echo "<tr><td> <img src=\"./../bruger/".$_SESSION['basket'][$i]['brugernavn']."/".$_SESSION['basket'][$i]['product_id']."\" height=\"50px\"></td><td> ".$_SESSION['basket'][$i]['product_id']."</td><td border=\"1\"> ".$_SESSION['basket'][$i]['stor']."</td><td border=\"1\"> ".$_SESSION['basket'][$i]['papir']."</td><td> ".$_SESSION['basket'][$i]['sort_hvid']."</td><td> ".$_SESSION['basket'][$i]['larred']."</td><td> ".$_SESSION['basket'][$i]['amount']."</td><td> ".$_SESSION['basket'][$i]['price']."</td><td> ".$_SESSION['basket'][$i]['total_price']."</td></tr>"; $sum += $_SESSION['basket'][$i]['total_price']; }
21. juli 2010 - 06:57
#10
du skal rette:
for($i=0;$i<=$size;$i++){ til:
21. juli 2010 - 09:13
#11
Tak for hjælpen, nu har jeg lige et problem når jeg skal sende mailen med indholdet. Så er det ikke alle posterne som kommer med. Hvordan jeg gør det? $besked1[$i] = $_SESSION['basket'][$i]['type']."\r\n"; $besked1[$i] .= "".$_SESSION['basket'][$i]['product_id']."\r\n"; $besked1[$i] .= "".$_SESSION['basket'][$i]['stor']."\r\n"; $besked1[$i] .= "".$_SESSION['basket'][$i]['amount']."\r\n"; $besked1[$i] .= "".$_SESSION['basket'][$i]['brugernavn']."\r\n"; $besked1[$i] .= "".$_SESSION['basket'][$i]['price']."\r\n"; --------------------- Problemet er at enten skal alle sessions sendes videre til mail.php eller også som ovenstående. Opretter gerne et nyt spm, hvis jeg finde en sigende titel.
21. juli 2010 - 11:52
#13
der er det jo du skal løbe array'et kurv igennem med for-løkken, nøjagtig som når du udskriver dem på siden...
21. juli 2010 - 12:01
#14
Jeg har forsøgt med forskellige metoder, men ingen af dem virker rigtigt. Nu vil jeg gerne have dem lagt ind i denne her: $besked1 = array; For at kunne bruge den sådan her: $size = sizeof($besked1); for($i=0;$i<$size;$i++){ $besked = $besked[$i]['billedeid'].$besked[$i]'antal'].$besked[$i]['type']; } $to = "XXXXXX"; $subject = "Bestilling"; $headers = "Fra: $email"; $sent = mail($to, $subject, $besked, $headers) ;
21. juli 2010 - 14:27
#15
kan du få det til at virke med at skrive det ud, som jeg viste i #4?
21. juli 2010 - 17:57
#16
YEP, nu kører det næsten. Løb lige ind i et problem med one.com og mail afsendelse. Så læg bare et svar, tak.
21. juli 2010 - 21:23
#17
selv tak :) det er samme princip når du skal sende mailen jo...
21. juli 2010 - 23:10
#18
tfp
Vi tilbyder markedets bedste kurser inden for webudvikling