/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Problem med brug af session til varekurv i~
Fra : Christoffer Kjeldgaa~


Dato : 25-04-04 11:58

Hej NG,

Jeg er igang med at lave en webshop i PHP/mySQL, hvor alle
varerne er gemt i mySQL-databasen. Nu er jeg nået til
varekurvs-delen, hvor man skal kunne trykke 'Køb' ud for en vare
og så bliver den vist ude i en varekurv i menuen. Jeg har forsøgt
mig med sessions, og det virker som sådan også. Problemet er bare
lige nu, at man kun kan tilføje én vare til kurven, og hvis man
prøver at tilføje én til bliver den gamle overskrevet. Det skulle
den helst ikke. Er der nogen der kan hitte ud af hvordan jeg kan
løse det?

Her står min sessionkode fra den side hvor varerne er listet,
shop.php:

<?php
// Her vaelger man hvor mange varer man vil have og laegger i
kurv
if(isset($_POST['koeb'])){
   $_SESSION['koeb'] = $dat['navn']; // Navnet på varen - hentet
som array fra databasen
   $_SESSION['antal'] = $_POST['antal'];
   echo "Tak for dit køb af " . $_SESSION['koeb'];
} else {   
   echo "Antal:
   <form name=\"koeb\" method=\"post\" action=\"$PHP_SELF\">
   <select name=\"antal\" size=\"1\">
   <option>1</option>
   <option>2</option>
   <option>3</option>
   <option>4</option>
   <option>5</option>
   </select><br>
   <input type=\"submit\" name=\"koeb\" value=\"Læg i kurv\">
   </form>";
}
?>

Og dette er min varekurv:

<?php
if (isset($_SESSION['koeb'])){
   echo "Indhold af kurven:<br><br>";
   echo $_SESSION['antal'];
   echo "&nbsp;";
   echo $_SESSION['koeb'];
} else {
   echo "Kurven er tom";
}
?>

Med venlig hilsen,
Christoffer Kjeldgaard

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Tonni Aagesen (25-04-2004)
Kommentar
Fra : Tonni Aagesen


Dato : 25-04-04 13:10

Christoffer Kjeldgaard wrote:

> Er der nogen der kan hitte ud af hvordan jeg kan
> løse det?

Smide varerne i et array?

Mvh
Tonni

Kasper Garnæs (25-04-2004)
Kommentar
Fra : Kasper Garnæs


Dato : 25-04-04 13:09

Christoffer Kjeldgaard <christoffer@sappy.dk> wrote:
> Hej NG,
>
> Jeg er igang med at lave en webshop i PHP/mySQL, hvor alle
> varerne er gemt i mySQL-databasen. Nu er jeg nået til
> varekurvs-delen, hvor man skal kunne trykke 'Køb' ud for en vare
> og så bliver den vist ude i en varekurv i menuen. Jeg har forsøgt
> mig med sessions, og det virker som sådan også. Problemet er bare
> lige nu, at man kun kan tilføje én vare til kurven, og hvis man
> prøver at tilføje én til bliver den gamle overskrevet. Det skulle
> den helst ikke. Er der nogen der kan hitte ud af hvordan jeg kan
> løse det?

Du kunne jo umiddelbart lave en "vare"-indgang i $_SESSION[] og lade denne
indgang være et array. Nøglen til hver indgang i arrayet betegner varenavnet
og den tilsvarende værdi antallet af varen.

I kode tilføjes en vare nogenlunde således:

$_SESSION["varer"][$vareNavn] = $vareAntal;

Indholdet af kurven udskrives nogenlunde således:

if (!empty($_SESSION["varer"])) {
echo "Indholdet af kurven: <br/><br/>";
foreach ($_SESSION["varer"] as $vareNavn => $vareAntal) {
echo $vareNavn . ": " . $vareAntal <br/>;
}
} else {
echo "Kurven er tom";
}

--
Med venlig hilsen / Regards
Kasper Garnæs
http://kasper.garnaes.dk



Christoffer Kjeldgaa~ (25-04-2004)
Kommentar
Fra : Christoffer Kjeldgaa~


Dato : 25-04-04 14:15

Kasper Garnæs wrote in dk.edb.internet.webdesign.serverside.php:
> I kode tilføjes en vare nogenlunde således:
>
> $_SESSION["varer"][$vareNavn] = $vareAntal;
>
> Indholdet af kurven udskrives nogenlunde således:
>
> if (!empty($_SESSION["varer"])) {
> echo "Indholdet af kurven: <br/><br/>";
> foreach ($_SESSION["varer"] as $vareNavn => $vareAntal) {
> echo $vareNavn . ": " . $vareAntal <br/>;
> }
> } else {
> echo "Kurven er tom";
> }
>

Ej, hvor lækkert! Det virker jo fuldstændig som det skal. Mange tak!

Nu er der bare et lillebitte problem. Jeg glemte at nævne, at der også skal
en varepris med i arrayet. Hvordan klarer jeg den? Det er vel bare en ekstra
oplysning der skal med i arrayet, men hvordan skal det stå?

Med venlig hilsen,
Christoffer Kjeldgaard

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Kasper Garnæs (25-04-2004)
Kommentar
Fra : Kasper Garnæs


Dato : 25-04-04 14:29

Christoffer Kjeldgaard <christoffer@sappy.dk> wrote:
> Kasper Garnæs wrote in dk.edb.internet.webdesign.serverside.php:
>> I kode tilføjes en vare nogenlunde således:
>>
>> $_SESSION["varer"][$vareNavn] = $vareAntal;
>>
>> Indholdet af kurven udskrives nogenlunde således:
>>
>> if (!empty($_SESSION["varer"])) {
>> echo "Indholdet af kurven: <br/><br/>";
>> foreach ($_SESSION["varer"] as $vareNavn => $vareAntal) {
>> echo $vareNavn . ": " . $vareAntal <br/>;
>> }
>> } else {
>> echo "Kurven er tom";
>> }
>>
>
> Ej, hvor lækkert! Det virker jo fuldstændig som det skal. Mange tak!

Det var så lidt.

> Nu er der bare et lillebitte problem. Jeg glemte at nævne, at der
> også skal en varepris med i arrayet. Hvordan klarer jeg den? Det er
> vel bare en ekstra oplysning der skal med i arrayet, men hvordan skal
> det stå?


Der er ikke noget som kravspefikationer, der ændrer sig :).

Hvis der er tale om et databasebaseret system, ville jeg lade varenavn være
varens id i databasen. Når du skal bruge prisen på varen, kan du bare hente
den fra databasen baseret på id'et.

Hvis du insisterer på at gemme prisen i sessionen, kan du lade
vare-indgangen være et array af arrays, hvor de "inderste" arrays indeholder
varenavn, antal og pris.

--
Med venlig hilsen / Regards
Kasper Garnæs
http://kasper.garnaes.dk



Christoffer Kjeldgaa~ (25-04-2004)
Kommentar
Fra : Christoffer Kjeldgaa~


Dato : 25-04-04 14:44

Kasper Garnæs wrote in dk.edb.internet.webdesign.serverside.php:

> Der er ikke noget som kravspefikationer, der ændrer sig :).
>
> Hvis der er tale om et databasebaseret system, ville jeg lade varenavn være
> varens id i databasen. Når du skal bruge prisen på varen, kan du bare hente
> den fra databasen baseret på id'et.
>
> Hvis du insisterer på at gemme prisen i sessionen, kan du lade
> vare-indgangen være et array af arrays, hvor de "inderste" arrays indeholder
> varenavn, antal og pris.
>
> --
> Med venlig hilsen / Regards
> Kasper Garnæs
> http://kasper.garnaes.dk

Endnu engang må jeg sige mange tusind tak. Så kan jeg endelig komme videre med
projektet. Tak, tak, tak.

Af hensyn til andre der læser denne tråd viser jeg lige den nye kode til min
kurv :

<?php
$connect = mysql_connect("localhost", "user", "password");
mysql_select_db("database", $connect);
if (!empty($_SESSION["varer"])) {
   echo "Indholdet af kurven: <br /><br />";
   foreach ($_SESSION["varer"] as $vareId => $vareAntal) {
      $query= mysql_query("SELECT * FROM tabel WHERE id=$vareId");
      while($row = mysql_fetch_array($query)){
         echo $vareAntal . " stk " . $row['navn'] . "&nbsp;á&nbsp;" . $row['pris'] .
"<br />";
      }
   }
} else {
   echo "Kurven er tom";
}
?>

Med venlig hilsen,
Christoffer Kjeldgaard

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Poul Kubel (26-04-2004)
Kommentar
Fra : Poul Kubel


Dato : 26-04-04 09:56

Hej

Jeg har det samme problem med at bestilling af flere varer sletter de
forrige varer i sessionen, og har også forstået at det kan løses ved at
smide dem i et array. Efter at have læst denne tråds løsningsforslag igennem
flere gange, kan jeg dog stadig ikke få det til at virke, og tror jeg har
stirret mig blind på det.

Min kode ser således ud:

<?php
session_start();
session_register('bestilling');
$_SESSION['bestilling'] = $_POST['bestilling'];
?>

<html>...etc.

<?php
<form action=\"webshop.php?sektion=bestilling\" method=post>
<input type=hidden name=\"bestilling[]\" value=\"".$varenummer."\">
<input type=image src=\"../grafik/bestil.gif\">
?>

Jeg går ud fra at det der er galt er at jeg har etableret arrayet i
formularen, men ikke i selve registeringen af sessionen - er det korrekt? -
og hvis ja, hvordan løser jeg det?

Mvh.

Poul Kubel



Tonni Aagesen (26-04-2004)
Kommentar
Fra : Tonni Aagesen


Dato : 26-04-04 10:26

Poul Kubel wrote:

> $_SESSION['bestilling'] = $_POST['bestilling'];

$_SESSION['bestilling'][] = $_POST['bestilling'];

Hvis du vil se om det lykkes med flere bestillinger:

var_dump($_SESSION['bestilling']);


Mvh
Tonni

Poul Kubel (26-04-2004)
Kommentar
Fra : Poul Kubel


Dato : 26-04-04 20:48

Mange tak nu lykkes det

Jeg har dog lige et ekstra spørgsmål:

ved: var_dump($_SESSION['bestilling']); får jeg noget a la følgende:

array(6) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> string(4) "2401" [4]=>
NULL [5]=> string(4) "2404" }

Hvorfor kommer alle de nøgler med værdien NULL, og kan det undgåes?
Problemet opstår når jeg vil lave et script i stil med det følgende, på en
side hvor man kan se hvor meget man har bestilt:

<?php

if ($_SESSION['bestilling']) {
foreach ($_SESSION['bestilling'] as $v) {
if (is_string($v)) {
echo $v. '<br>';
}
else {
echo "Der er ikke foretaget nogle bestillinger";
}
}
}
?>

....hvor jeg får gentaget else-strengen et hav af gange, hvilket jeg kan
gennemskue hvorfor.

Mvh.

Poul Kubel



Poul Kubel (27-04-2004)
Kommentar
Fra : Poul Kubel


Dato : 27-04-04 22:11

Nevermind, nu fik jeg da set det smarte i isset()...
>
> Jeg har dog lige et ekstra spørgsmål:
>
> ved: var_dump($_SESSION['bestilling']); får jeg noget a la følgende:
>
> array(6) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> string(4) "2401" [4]=>
> NULL [5]=> string(4) "2404" }
>
> Hvorfor kommer alle de nøgler med værdien NULL, og kan det undgåes?
> Problemet opstår når jeg vil lave et script i stil med det følgende, på en
> side hvor man kan se hvor meget man har bestilt:
>
> <?php
>
> if ($_SESSION['bestilling']) {
> foreach ($_SESSION['bestilling'] as $v) {
> if (is_string($v)) {
> echo $v. '<br>';
> }
> else {
> echo "Der er ikke foretaget nogle bestillinger";
> }
> }
> }
> ?>
>
> ...hvor jeg får gentaget else-strengen et hav af gange, hvilket jeg kan
> gennemskue hvorfor.
>
> Mvh.
>
> Poul Kubel
>
>



Christoffer Kjeldgaa~ (27-04-2004)
Kommentar
Fra : Christoffer Kjeldgaa~


Dato : 27-04-04 08:27

Endnu engang er jeg stødt på problemer. Jeg er ikke særlig garvet i
arrays, så jeg har problemer med at få udregnet totalprisen ud fra
sessionarrayet. Indtil videre ligger jeg prisen for hver vare i en
variabel $delsum, som bliver gemt i en session på samme måde som
varerne. Men uanset hvad jeg prøver kan jeg ikke få udregnet
totalbeløbet ud fra alle delsummerne. Min kode ligner noget a-la
dette:

<?php
$connect = mysql_connect("localhost", "user", "password");
mysql_select_db("database", $connect);
if (!empty($_SESSION["varer"])) {
echo "Indholdet af kurven: <br /><br />";
foreach ($_SESSION["varer"] as $vareId => $vareAntal) {
$query= mysql_query("SELECT * FROM tabel WHERE id=$vareId");
while($row = mysql_fetch_array($query)){
$delsum = $vareAntal*$rows['pris'];
$_SESSION["total"][] = $delsum;
echo $vareAntal . " stk " . $row['navn'] . "&nbsp;á&nbsp;" .
$row['pris'] .
"<br />";
}
}
} else {
echo "Kurven er tom";
}

if (!empty($_SESSION["total"])) {
echo "Totalpris: <br/><br/>";          

// Udregning af totalprisen her
         
}

?>

Er jeg på rette spor eller hvad? Hvordan kan det løses?

Med venlig hilsen,
Christoffer Kjeldgaard

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Kasper Garnæs (27-04-2004)
Kommentar
Fra : Kasper Garnæs


Dato : 27-04-04 20:51

Christoffer Kjeldgaard <christoffer@sappy.dk> wrote:
> Endnu engang er jeg stødt på problemer. Jeg er ikke særlig garvet i
> arrays, så jeg har problemer med at få udregnet totalprisen ud fra
> sessionarrayet. Indtil videre ligger jeg prisen for hver vare i en
> variabel $delsum, som bliver gemt i en session på samme måde som
> varerne.

Hvis det hele foregår på samme side er det ikke nødvendigt at gemme summmen
i sessionen. Jeg ved heller ikke om der er nogen mening i at gemme de
enkelte delsummer i et array. Hvis du har problemer med arrays, så lad så
vidt muligt være med at bruge dem :).

Jeg vil dog kraftigt foreslå dig at læse op på brugen af arrays - efter min
mening kommer du ikke langt med PHP uden. Tjeck fx.
http://www.webcafe.dk/artikler/php/arrays/ om arrays og
http://www.webcafe.dk/artikler/php/loekker/ for hvordan de kan gennemløbes.

> Men uanset hvad jeg prøver kan jeg ikke få udregnet
> totalbeløbet ud fra alle delsummerne.

Du er nødt til at lægge hver enkelt delsum til totalen på et eller andet
tidspunkt. Prøv noget a la:

> <?php


$total = 0;

> $connect = mysql_connect("localhost", "user", "password");
> mysql_select_db("database", $connect);
> if (!empty($_SESSION["varer"])) {
> echo "Indholdet af kurven: <br /><br />";
> foreach ($_SESSION["varer"] as $vareId => $vareAntal) {
> $query= mysql_query("SELECT * FROM tabel WHERE id=$vareId");
> while($row = mysql_fetch_array($query)){
> $delsum = $vareAntal*$rows['pris'];

$total = $total + $delsum;

echo $vareAntal . " stk " . $row['navn'] . "&nbsp;á&nbsp;" .
$row['pris'] . ": " . $delsum ."<br />";

> }
> }

echo "Totalpris: " . $total;

> } else {
> echo "Kurven er tom";
> }


--
Med venlig hilsen / Regards
Kasper Garnæs
http://kasper.garnaes.dk



Christoffer Kjeldgaa~ (29-04-2004)
Kommentar
Fra : Christoffer Kjeldgaa~


Dato : 29-04-04 20:38

Endnu engang bliver du min redningsmand. Mange tusind tak for al hjælpen! Det
har virkelig været til stor nytte.
Ja, du kan nok have ret i at jeg jeg må tjekke lidt op på brugen af arrays.
Jeg må ærligt indrømme, at jeg ikke har arbejdet så frygtelig meget med det
før, så jeg er noget grøn på området.

Med venlig hilsen,
Christoffer Kjeldgaard

--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste