Avatar billede jokerper Nybegynder
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;
}
Avatar billede majbom Novice
20. juli 2010 - 20:09 #1
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...
Avatar billede jokerper Nybegynder
20. juli 2010 - 20:25 #2
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.
Avatar billede jokerper Nybegynder
20. juli 2010 - 20:43 #3
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.
Avatar billede majbom Novice
20. juli 2010 - 21:23 #4
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>";
Avatar billede repox Seniormester
20. juli 2010 - 21:29 #5
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;
}
Avatar billede majbom Novice
20. juli 2010 - 21:32 #6
den var faktisk snedig den dér repox - så er man fri for at iterere gennem hele arayet...
Avatar billede jokerper Nybegynder
20. juli 2010 - 21:49 #7
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.
Avatar billede jokerper Nybegynder
20. juli 2010 - 21:51 #8
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.
Avatar billede jokerper Nybegynder
20. juli 2010 - 23:47 #9
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>&nbsp;<img src=\"./../bruger/".$_SESSION['basket'][$i]['brugernavn']."/".$_SESSION['basket'][$i]['product_id']."\" height=\"50px\"></td><td>&nbsp;".$_SESSION['basket'][$i]['product_id']."</td><td border=\"1\">&nbsp;".$_SESSION['basket'][$i]['stor']."</td><td border=\"1\">&nbsp;".$_SESSION['basket'][$i]['papir']."</td><td>&nbsp;".$_SESSION['basket'][$i]['sort_hvid']."</td><td>&nbsp;".$_SESSION['basket'][$i]['larred']."</td><td>&nbsp;".$_SESSION['basket'][$i]['amount']."</td><td>&nbsp;".$_SESSION['basket'][$i]['price']."</td><td>&nbsp;".$_SESSION['basket'][$i]['total_price']."</td></tr>";
$sum += $_SESSION['basket'][$i]['total_price'];
}
Avatar billede majbom Novice
21. juli 2010 - 06:57 #10
du skal rette:

for($i=0;$i<=$size;$i++){


til:

for($i=0;$i<$size;$i++){
Avatar billede jokerper Nybegynder
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.
Avatar billede jokerper Nybegynder
21. juli 2010 - 11:52 #12
Lægger du et svar samt evt. en kommentar til #11:

http://www.eksperten.dk/spm/914528#reply_7621439
Avatar billede majbom Novice
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...
Avatar billede jokerper Nybegynder
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) ;
Avatar billede majbom Novice
21. juli 2010 - 14:27 #15
kan du få det til at virke med at skrive det ud, som jeg viste i #4?
Avatar billede jokerper Nybegynder
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.
Avatar billede majbom Novice
21. juli 2010 - 21:23 #17
selv tak :)
det er samme princip når du skal sende mailen jo...
Avatar billede majbom Novice
21. juli 2010 - 23:10 #18
tfp
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