Avatar billede mc.lucifer Praktikant
14. september 2005 - 20:11 Der er 28 kommentarer og
1 løsning

Webshop og Sessioner

Jeg her nok taget et rimeligt stort skridt iom at jeg endnu ikke har fattet grundprincipperne i Sessioner, men jeg er igang med at designe min egen shop. og jeg skal nu til at kunne styre en inkøbskurv via sessioner, men jeg er lidt lost. Er der en venlig sjæl der kan komme med lidt gode indput, Jeg bruger php 5 og mysql. mine sessions filer gemmes på min windows 2003 sbs server under c:\php\session

Mine vare ligger i en tabel i mysql hvori der både er unik Id nr og en unik varenummer.

Det jeg kunne forstille mig er at når der trykkes på "Læg i kurv" så skal der oprettes et array "Eller hvad det heder" i Sessionen og heri skal den gemme alle varenummer. men men men jeg er ret lost.

Jeg ville blive glad for llidt feedback.

"Jeg har bogen Avanceret php" som jeg lige vil studere lidt mens jeg venter på jeres guldkorn.

MC
Avatar billede jakobdo Ekspert
14. september 2005 - 21:35 #1
Du kan søge lidt inspiration i denne tråd: http://www.eksperten.dk/spm/646649
Avatar billede mc.lucifer Praktikant
14. september 2005 - 21:50 #2
Nu har jeg fået sessions filen til at indeholde denne textstreng "Som jeg syntes virklig er uoverskulig"

varer|a:3:{s:2:"id";a:2:{s:4:"navn";N;s:4:"pris";N;}s:3:"id1";a:2:{s:4:"navn";s:29:"Panda BusinesSecure Antivirus";s:4:"pris";N;}s:3:"id2";a:2:{s:4:"navn";s:16:"Ip Telefonserver";s:4:"pris";N;}}

Dette frembrunget ved hjælp af følgende kode

$Id = $shoparray[Id];
$tilkurv = $shoparray[Headtext];
$pris = $Shoparray[Pris];
$_SESSION["varer"]["id".$Id]["navn"] = $tilkurv;
$_SESSION["varer"]["id".$Id]["pris"] = $pris;

Hvad så nu. Dette kan da ikke være nok til at holde styr på en shop, og hvordan for jeg skrevet varende ud ?

altså hvordan for jeg ex. php til at udskrive Headtext fra alle valgte vare ?

MC
Avatar billede jakobdo Ekspert
14. september 2005 - 21:56 #3
Altså selve $_SESSION['varer'] er jo "bare" et array.
Så du kan løbe det igennem med:
foreach($_SESSION['varer'] as $vare)
{
echo "Vare: " . $vare['navn'] . "<br>";
echo "Pris: " . $vare['pris'] . "<br>";
}

Og for at putte data i, kan du bruge koden på denne side: http://www.eksperten.dk/spm/647855
Der kan du se koden krk bruger til sin webshop!
Avatar billede mc.lucifer Praktikant
15. september 2005 - 15:09 #4
når jeg skriver følgende

$productname = $shoparray[Headtext];
$productid = $shoparray[Id];
$productpris = $shoparray[Pris];
$productantal = $antal;
$indhold = array("productnavn" =>"$productname","id" => "$productid","pris" => "$productpris", "antal" => "$productantal");

$_SESSION["varer"]["Productnavn"]=$indhold[productnavn];
$_SESSION["varer"]["Productpris"]=$indhold[pris];
$_SESSION["varer"]["Productid"]=$indhold[id];
$_SESSION["varer"]["Productantal"]=$indhold[antal];
foreach($_SESSION['varer'] as $vare){
echo "Varenavn: " . $varer['Productnavn'] . "<br>";
echo "Varepris: " . $varer['Productpris'] . "<br>";
echo "Vareid: " . $varer['Productid'] . "<br>";
echo "Vareantal: " . $varer['Productantal'] . "<br>";
}

viser den fint nok det produkt der er valgt, men:

1. Når jeg så genloader siden, "Gøres når man skifter kategori" så glemmer den hvad der er sat ind.

2. Den skriver det samme output 4 gange.

MC
Avatar billede mc.lucifer Praktikant
15. september 2005 - 15:11 #5
2 har jeg selv fundet ud af, men den glemmer stadig indholdet når siden reloades

MC
Avatar billede jakobdo Ekspert
15. september 2005 - 18:45 #6
Prøv at se koden her:

<?
  session_start();

  $id    = $_REQUEST['id'];
  $slet = $_REQUEST['slet'];


// Tildele pris og navn på baggrund af ID

if ($id =$id) {
      $tilkurv    = $hf_foder_navn;
      $pris        = $hf_foder_pris;
      $maengde    = $hf_foder_maengde;

}

if (isset($tilkurv)) {
  $_SESSION["varer"]["id".$tilkurv]["antal"]++;
  $_SESSION["varer"]["id".$tilkurv]["navn"] = $tilkurv;
  $_SESSION["varer"]["id".$tilkurv]["pris"] = $pris ;
  $_SESSION["varer"]["id".$tilkurv]["maengde"] = $maengde;
  $_SESSION['count'] += 1;
}


?>

Det som er forskellen på dit eksempel, og koden her, er at alle vare er hentet fra en DB, og dermed har de unikt ID alle sammen!
Det tror jeg du mangler!
Avatar billede mc.lucifer Praktikant
16. september 2005 - 13:32 #7
Nu har jeg fået det til at køre og endda fået lavet en counter der tæller hvor mange varer man har i shoppen, Nu sidder jeg så her og gerne vil have at den totale pris skrives til en variable som jeg så senere kan echo $var;

I min session har jeg

$_SESSION["varer"]["id".$productid]["Productpris"]=$productpris;

og har så forsøget dette men det virker ikke helt, har du nogle gode ideer ?

foreach($_SESSION['varer'] as $vare)
{
$total=array("pris" => "".$vare['Productpris']."");
}
$total2 = $total['pris'] + $vare['Productpris'];

MC
Avatar billede jakobdo Ekspert
16. september 2005 - 13:41 #8
Prøv:
foreach($_SESSION['varer'] as $vare)
{
echo "Total: " . $vare['Productpris'] * $vare['antal']) . "<br>";
}
Avatar billede mc.lucifer Praktikant
18. september 2005 - 19:56 #9
det giver fint nok resultat hvis jeg vælger 2 af samme varer, men når jeg så vælger en anden vare så pluses den nye vare ikke ind, men skrives sådanne


Total: 11000 Her er der købt 2 varer af 5500 kr stk
Total: 249 her er der købt 1 vare til 249

MC
Avatar billede jakobdo Ekspert
18. september 2005 - 21:31 #10
Sådan her, så vil $totalPris indeholde prisen for alle vare i kurven.
$totalpris = 0;
foreach($_SESSION['varer'] as $vare)
{
$totalTemp = $vare['Productpris'] * $vare['antal'];
$totalpris += $totalTemp;
echo "Total: " . $totalTemp . "<br>";
}
Avatar billede mc.lucifer Praktikant
18. september 2005 - 21:41 #11
den ligger det stadig dobbelt

lægger jeg en var i kurven for 5500 skriver den 11000, og når siden reloades gennem menuen, glemmes variablen totalpris

MC
Avatar billede jakobdo Ekspert
18. september 2005 - 21:43 #12
Prøv lige at skriv:

echo "<pre>";
print_r($_SESSION['varer']);
echo "</pre>";
inden:
$totalpris = 0;
og smid output herind!
Avatar billede mc.lucifer Praktikant
18. september 2005 - 21:45 #13
Array
(
    [id2] => Array
        (
            [Productnavn] => Ip Telefonserver
            [Productpris] => 5500.00
            [Productid] => 2
            [Productantal] => 1
        )

)
Avatar billede jakobdo Ekspert
18. september 2005 - 21:47 #14
Ret lige linien:
$totalTemp = $vare['Productpris'] * $vare['antal'];
til:
$totalTemp = $vare['Productpris'] * $vare['Productantal'];
Avatar billede mc.lucifer Praktikant
18. september 2005 - 21:52 #15
$user = mysql_query("select * from vare where Id = '$items'");
$shoparray = mysql_fetch_assoc($user);
$productname = $shoparray[Headtext];
$productid = $shoparray[Id];
$productpris = $shoparray[Pris];
$productantal = $antal;

if($addbasket=="ok")
{
$_SESSION["varer"]["id".$productid]["Productnavn"]=$productname;
$_SESSION["varer"]["id".$productid]["Productpris"]=$productpris;
$_SESSION["varer"]["id".$productid]["Productid"]=$productid;
$_SESSION["varer"]["id".$productid]["Productantal"]=$productantal;


$totalpris = 0;
foreach($_SESSION['varer'] as $vare)
{
$totalTemp = $vare['Productpris'] * $vare['Productantal'];
$totalpris += $totalTemp;
echo "Total: " . $totalTemp . "<br>";
}

}
if (!isset($count))
{$count = 0;}
$_SESSION['count'] += $productantal;
$counter = $count;


retunere altså stadig bare priserne hvergang

dvs
Total: 249
Total: 6000
her er købt 2 varer

MC
Avatar billede mc.lucifer Praktikant
18. september 2005 - 22:26 #16
Nu har jeg selv rodet lidt med det og nu funger det. sidste ting.

Har du en god ide til hvordan jeg kan ændre en session. sltså når kunderne ligger i checkup.php og de kan se at de har købt 2 af product X og 4 stk af product Y.

Hvis man så ændre 4 til 2 i product y, og trykker opdatere, hvordan for jeg så ændret hele sessionen ?

Så hæver jeg lige point til 200 og stopper

MC
Avatar billede jakobdo Ekspert
18. september 2005 - 23:19 #17
Altså hver vare har jo et unikt id, via: $_SESSION['varer']['Productid']
Det trækker du så ud (evt i en form)
Så laver du nogle felter som viser antal vare = 2 (det skal være et input felt)
Så kan brugeren skrive 4, trykke opdater og så gemmer den 4 i antal, og ikke 2 som før.
Avatar billede mc.lucifer Praktikant
19. september 2005 - 10:32 #18
det forstår jeg ikke helt, Vil det sige at jeg ligger en form rundt om min foreach som ved aktiveringen, sender data til en side hvor i der står noget ala.

$_SESSION["varer"]["id".$vare["productid"]]["Productantal"]=$antal;

MC
Avatar billede jakobdo Ekspert
19. september 2005 - 14:35 #19
Du kunne f.eks. lave en side som hed: visKurv.php
I den lavede du:

<?php
//visKurv.php
session_start();

if(isset($_POST['antal']))
{
    foreach($_POST['antal'] as $id => $antal)
    {
        $_SESSION['varer']['id".$id."']['Produktantal'] = $antal;
    }
}

echo "<table>\n";
echo "<tr><th>Produktnavn</th><th>Pris pr/stk.</th><th>Antal</th></tr>\n";
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n";
foreach($_SESSION['varer'] as $vare)
{
echo "<tr><td>" . $vare['Productnavn'] . "</td>\n";
echo "<td>" . $vare['Productpris'] . "</td>\n";
echo "<td><input type=\"text\" name=\"antal['".$vare['Productid']."']\" value=\"" . $vare['Productantal'] . "\"></td></tr>\n";

$totalTemp = $vare['Productpris'] * $vare['Productantal'];
$totalpris += $totalTemp;
}
echo "<tr><td colspan=\"3\">Total: " . $totalTemp . "</td></tr>\n";
echo "<tr><td colspan=\"3\"><input type=\"submit\" value=\"Opdater\"></td></tr>\n";
echo "</form>\n";
echo "</table>\n";
?>
Avatar billede mc.lucifer Praktikant
19. september 2005 - 20:14 #20
Her er min Vikurv. Tag dig ikke af de mange If´er jeg ved godt det måske ikke lige er den bedste måde at gøre det mpå men jeg optimerre den senere

<?
If ($_SESSION['varer'] < 1)
{$meddelelse = "Din kurv er tom";}
else
{
$meddelelse = "Du har følgende ting i din indkøbskurv";
}
?>
<table cellspacing="2" cellpadding="2" border="0">
<tr>
    <td  class="Kontakthead"><h2>ShopMe.dk<br><div class="Smalltext">Kurv</div></h2></td>
</tr>
<tr>
    <td>
    <!-- Check out starter her -->
<table cellspacing="2" cellpadding="2" border="0">
<tr>
    <td  class="menuborder">
   
    <!-- Kurvlayout starter her -->
   
    <table cellspacing="0" cellpadding="0" border="0">
<tr>
    <td class="checkudtop" align="center"><?=$meddelelse?></td>
</tr>
<tr>
    <td>

    <?if ($_SESSION['varer'] > 1)
   
    {echo"
    <table align=\"center\" cellspacing=\"2\" cellpadding=\"2\" border=\"0\">

";}?>

<?
echo "<form action=\"".$Host."?Site=".$Site."\" method=\"post\">";
If ($_SESSION['varer'] > 1){
foreach($_SESSION['varer'] as $vare)
{
echo "<tr><td class=\"vareroutputantal\"><input align=\"right\" class=\"antalcontainer\" type=\"text\" value=\"".$vare['Productantal']."\" name=\"antalkurv\">&nbsp;Stk.&nbsp;"."</td><td class=\"vareroutputtext\">". $vare['Productnavn'] .  ".<br></td>
</tr>";
}


if ($_SESSION['varer'] > 1)
{echo"
</table>

</td>
</tr>
<tr>
    <td class=\"vareroutputpris\"><input type=\"submit\" name=\"Opdater\"></td></form>
</tr>
<tr>
    <td class=\"vareroutputpris\">Din samlede pris er:&nbsp; <b>"; echo $totalpris; echo ".00 Kr.</b></td>
</tr>
<tr>
    <td></td>
</tr>
<tr>
    <td class=\"vareroutputpris\">Jeg acceptere handelsesbetingelserne.&nbsp;<input type=\"checkbox\" name=\"accept\" value=\"\"></td>
</tr>
<tr>
    <td class=\"vareroutputpris\">
    <form action=\"".$Host."?Site=25\" method=\"post\">
    <table cellspacing=\"2\" cellpadding=\"2\" border=\"0\">
<tr>
    <td class=\"orderinfotext\">*&nbsp;Firmanavn:</td>
    <td><input class=\"orderinfocontainer\" type=\"text\" name=\"firm\"></td>
</tr>
<tr>
    <td class=\"orderinfotext\">*&nbsp;Adresse:</td>
    <td><input class=\"orderinfocontainer\" type=\"text\" name=\"adresse\"></td>
</tr>
<tr>
    <td class=\"orderinfotext\">*&nbsp;Post nummer:</td>
    <td><input class=\"orderinfocontainer\" type=\"text\" name=\"zip\"></td>
</tr>
<tr>
    <td class=\"orderinfotext\">*&nbsp;By:</td>
    <td><input class=\"orderinfocontainer\" type=\"text\" name=\"city\"></td>
</tr>
<tr>
    <td class=\"orderinfotext\">*&nbsp;Telefon nummer:</td>
    <td><input class=\"orderinfocontainer\" type=\"text\" name=\"phone\"></td>
</tr>
<tr>
    <td class=\"orderinfotext\">Fax nummer:</td>
    <td><input class=\"orderinfocontainer\" type=\"text\" name=\"fax\"></td>
</tr>
<tr>
    <td class=\"orderinfotext\">*&nbsp;Kontakt:</td>
    <td><input class=\"orderinfocontainer\" type=\"text\" name=\"contact\"></td>
</tr>
<tr>
    <td class=\"orderinfotext\">*&nbsp;E-mail adresse:</td>
    <td><input class=\"orderinfocontainer\" type=\"text\" name=\"email\"></td>
</tr>
<tr>
    <td class=\"orderinfotext\">WWW adresse:</td>
    <td><input class=\"orderinfocontainer\" type=\"text\" name=\"www\"></td>
</tr>
<tr>
    <td colspan=\"2\">Evt. besked:</td></tr>
    <tr><td colspan=\"2\"><textarea class=\"ordermessagecontainer\" cols=\"\" rows=\"\" name=\"Besked\"></textarea></td>
</tr>
</table>
</td>
</tr>
<tr>
    <td class=\"vareroutputpris\" align=\"center\"><input type=\"submit\" name=\"sendorder\"></td>
</tr>
</form>
    ";}}?>
   
<tr>
    <td><img src=\"Images/ekstraStorkassebund.gif\" width=\"400\" height=\"20\" alt=\"\" border=\"0\"></td>
</tr>
</table>
    <!-- Kurvlayout slutter her -->
   
    </td>
</tr>
</table>
<!-- Checkout slutter her -->
    <?if ($_SESSION['varer'] > 1)
{echo"<div class=\"asterisk\">* skal udfyldes.</div>";}?></td>
</tr>
</table>

<br><br>

Det jeg gør at at når de kurven opdateres læses siden ind igen og via en include "barsket.php" skal så bearbejde den.

MC
Avatar billede jakobdo Ekspert
19. september 2005 - 20:24 #21
Hvad skal jeg gøre nu?
Avatar billede mc.lucifer Praktikant
19. september 2005 - 20:31 #22
Kan faktisk godt forstå at du spørger dig selv om det og jeg undskylder at jeg måske ikke er den skarbeste kniv i skuffen, men almindelige variabler og sql har jeg god styr på men de her sessioner fatter jeg ikke meget af.

Men ovenstående kode er den side der viser min indkøbskurv. den har nogle input boxe hvor antallet af vore står i. nu har jeg så tilføjet en opdater knap som i aktion har "http://www.host.dk?Site=5&Opdate=ok"
når siden genindlæses includer den en side der har en masse slave kode i sig, altså alle de processer som jeg ønsker udført. bla, reg af session variabler. Men nu vil jeg så gerne tilføje en funktion der siger at

if($Opdate=="OK")
{Opdater antallet af vare i den givne vare)

Men det er det med at få den til at gøre det jeg ikke fatter, havde det været SQL havde jeg jo bare skrevet Update bla bla where Id = '$Id'

men dette er jo ikke sql men sessioner så det er her jeg spøger hvor klare jeg den

MC
Avatar billede jakobdo Ekspert
19. september 2005 - 20:36 #23
Prøv lige at smid et kig i denne tråd:

http://www.eksperten.dk/spm/649312

Det er samme spørgsmål du søger lige nu!
Avatar billede mc.lucifer Praktikant
19. september 2005 - 21:03 #24
Så tror jeg ikke du har læst mit spørgsmål rigtigt, det er sessionene jeg ikke kan finde ud af at opdatere, Det med SQL var bare som et eksempel

MC
Avatar billede jakobdo Ekspert
19. september 2005 - 21:36 #25
Ok, så må du skære det ud i pap for mig! :o)
Hvad ønsker du opdateret?
du har jo: $_SESSION['varer'] som indeholder nogle varer.
Hvis du vil opdatere vare med id2, tager du:

$_SESSION['varer']['id2']['antal'] = 100;
eller navnet:
$_SESSION['varer']['id2']['produktnavn'] = "Nyt Produkt";
Avatar billede mc.lucifer Praktikant
19. september 2005 - 21:47 #26
hvis jeg må blive tilføjet din MSN "skal nok lade være med at misbruge det" så kan jeg vise dig hvad det drejer sig om min MSN er " 23ricky@romdata.dk23 " Fjern 23 i begge ender.

ellers:

foreach($_SESSION['varer'] as $vare)
{
echo "<tr><td class=\"vareroutputantal\"><input align=\"right\" class=\"antalcontainer\" type=\"text\" value=\"".$vare['Productantal']."\" name=\"antalkurv\">&nbsp;Stk.&nbsp;"."</td><td class=\"vareroutputtext\">". $vare['Productnavn'] .  ".<br></td>
</tr>";
}
ovenstående udskriver kurvens indhold,

Productantal
productnavn

her vil jeg så gerne kunne ændre antallet gennem min form "Opdater" sådanne at man kan ændre kurven.

Håber du forstå eller at se dig på MSN

MC
Avatar billede jakobdo Ekspert
19. september 2005 - 23:00 #27
Svar!
Avatar billede mc.lucifer Praktikant
19. september 2005 - 23:00 #28
Jeg fik online hjælp på msn af Jakobdo. her er koden vi fandt frem til

if(isset($_POST['antalkurv']))
{
    foreach($_POST['antalkurv'] as $id => $antal)
    {
        $_SESSION['varer'][$id]['Productantal'] = $antal;
    }
}

MC
Avatar billede jakobdo Ekspert
20. september 2005 - 08:16 #29
Du skal også lige have dette med:

foreach($_SESSION['varer'] as $id => $vare)
{
echo "<tr><td>" . $vare['Productnavn'] . "</td>\n";
echo "<td>" . $vare['Productpris'] . "</td>\n";
echo "<td><input type=\"text\" name=\"antalkurv[".$vare[$id]."]\" value=\"" . $vare['Productantal'] . "\"></td></tr>\n";

$totalTemp = $vare['Productpris'] * $vare['Productantal'];
$totalpris += $totalTemp;

PS: Takker for point!
}
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