29. oktober 2005 - 02:19
Der er
25 kommentarer
Problemer med sessions mv
Jeg er stødt på et problem i forbindelse med implementering af et script med sessions.
Konkret drejer det sig om dette script:
http://easy-shave.com/shop.php Det virker ganske fint når man bare kører det via ovenstående link.
Når jeg så prøver at indkorporere det i mit site, fungerer det ikke.
Når man trykker på tilføj et produkt på sitet indeholder linket pludselig sessionID - det gør det ikke i ovenstående link.
Jeg har lagt scriptet ind her på sitet så I kan se problemet (som jo er at der intet sker når man f.eks. vil tilføje et produkt mv.).
http://easy-shave.com/?menuID=13 Det skal tilføjes at jeg i forvejen bruger sessions på siden i anden sammenhæng og de fungerer ganske fint.
Annonceindlæg fra DE-CIX
Edge computing: behandling ved kilden
Edge computing revolutionerer den måde, data behandles på, ved at bringe kapacitet og ydeevne tættere på dér, hvor der er behov for det.
15. april 2025
29. oktober 2005 - 02:20
#1
Scriptet ser således ud: <SHOP.PHP> <? error_reporting(0); require("merchantfront.php"); session_name("mysession"); session_start(); if (!session_is_registered("basket")) { $basket=new Basket; session_register("basket"); } // Perform Cart Actions if (isset($A)) { if ($A=="Remove") { $basket->Del_Item($P); } } // End Cart Actions if ($A=="Add") { $basket->Add_Item("FORE2","George Foreman Grill",1,19.95,"YadaYada",".0675","black","XXL"); } // $basket->Set_Item_Quantity(0,2); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>New Page 1</title> <style> <!-- .netscape6problem { font-family: Verdana,Arial,Helvetica; font-size: 10px; } .smallnormal { font-family: Verdana,Arial,Helvetica; font-size: 10px; } .smallnormaltable { font-family: Verdana,Arial,Helvetica; font-size: 10px; color: black; } .smallnormaltablealt { font-family: Verdana,Arial,Helvetica; font-size: 10px; color: red; } .mednormal { font-family: Verdana,Arial,Helvetica; font-size: 12px } .mednormaltable { font-family: Verdana,Arial,Helvetica; font-size: 12px; color: black; } .mednormalhighlight { font-family: Verdana,Arial,Helvetica; font-size: 12px; color: black; background: yellow; } .medbold { font-family: Verdana,Arial,Helvetica; font-size: 12px; font-weight: bold } .medboldalt { font-family: Verdana,Arial,Helvetica; font-size: 12px; font-weight: bold; color: red; } .medboldtable { font-family: Verdana,Arial,Helvetica; font-size: 12px; font-weight: bold; color: black; } .largebold { font-family: Verdana,Arial,Helvetica; font-size: 18px; font-weight: bold } .smallcompact { font-family: Verdana,Arial,Helvetica; font-size: 10px } .smallbold { font-family: Verdana,Arial,Helvetica; font-size: 10px; font-weight: bold } .smallboldtable { font-family: Verdana,Arial,Helvetica; font-size: 10px; font-weight: bold; color: black; } .smallboldtablealt { font-family: Verdana,Arial,Helvetica; font-size: 10px; font-weight: bold; color: #99CCFF; } .smallboldtabletop { font-family: Verdana,Arial,Helvetica; font-size: 10px; font-weight: bold; color: black; } .smallboldtemplate { font-family: Verdana,Arial,Helvetica; font-size: 10px; font-weight: bold; color: black;} .smallboldfooter { font-family: Verdana,Arial,Helvetica; font-size: 10px; color: #999999;} .locationbar { font-family: Verdana,Arial,Helvetica; font-size: 10px; color: black; } A:link {text-decoration: underline; color: black; } A:visited {text-decoration: underline; color: black; } A:hover {text-decoration: underline; color: red; } A.minibasket:link {text-decoration: underline; color: blue; } A.minibasket:visited {text-decoration: underline; color: blue; } A.minibasket:hover {text-decoration: underline; color: red; } A.table:link {text-decoration: underline; color: blue; } A.table:visited {text-decoration: underline; color: blue; } A.table:hover {text-decoration: underline; color: red; } A.templatemenu:link {text-decoration: none; color: white; } A.templatemenu:visited {text-decoration: none; color: white; } A.templatemenu:hover {text-decoration: underline; color: red; background: #FFDD00; } A.locationlink:link {text-decoration: underline; color: black; } A.locationlink:visited {text-decoration: underline; color: black; } A.locationlink:hover {text-decoration: underline; color: red; } table.minibasket {background-color: white; } tr.minibasketline {background-color: #EEEEEE; } hr { height: 1; color: #DDDDDD } pre { font-family: Courier; font-size: 10px; } select { font-family: Verdana; font-size: 10px; color: black; background-color: white; border-color: #DDDDDD; } table.mainpage {background-color: white; } tr.mainpagetableline {background-color: #99CCFF; } tr.mainpagetableline2 {background-color: #99CCFF; } tr.mainpagetablespecial {background-color: #DDDDDD; } tr.mainpageversionhighlight {background-color: #FFFF00; } .buttonstyle {font-family: Verdana; font-size: 10px; font-weight: bold; color: #666666; background-color: #DDDDDD; border-style: outset; border-color: #999999; border-width: 1px } --> </style> </head> <body> <table class="mainpage" cellSpacing="0" cellPadding="5" width="100%" border="0"> <tbody> <tr> <td> <div align="center"> <center> <table cellSpacing="0" cellPadding="1" width="75%" border="0"> <tbody> <tr> <td width="95"></td> <td width="252"></td> <td class="smallboldtabletop" align="right" width="66">price ($)</td> <td class="smallboldtabletop" align="right" width="59"> <p align="center"> qty</p> </td> <td width="57"></td> </tr> <form method="post" action="shop.php?A=Update"> <? $count=0; $myid=""; $myquantity=""; if ($basket->Get_Basket_Count()>0) { # are there items in the basket $pos = $basket->Enum_Items(true); while ($pos>=0) { // Update Cart Quantities if (isset($A)) { if ($A=="Update") { $myvalue=$howmany[$pos]; $basket->Set_Item_Quantity($pos,$howmany[$pos]); } } $mytext="<tr class='mainpagetableline2'>"; $mytext.="<td class='medboldtable' colSpan='6' width='614'> ".$basket->Get_Item_Name($pos)." - ".$basket->Get_Item_Color($pos)." - ".$basket->Get_Item_Size($pos)."</td>"; $mytext.="</tr><tr>"; $mytext.="<td class='smallnormaltable' vAlign='center' width='95'><a href='product.php?product=WHATEVER&V=27&ph=basket'>See Item</a></td>"; $mytext.="<td class='smallnormaltable' vAlign='center' align='left' width='252'>".$basket->Get_Item_ID($pos)."</td>"; $mytext.="<td class='smallboldtable' vAlign='center' align='right' width='66'>".$basket->Get_Item_Price($pos)."</td>"; $mytext.="<td vAlign='center' align='right' width='59'><input size='3' value='".$basket->Get_Item_Quantity($pos)."' name='howmany[$pos]'></td>"; $mytext.="<td class='smallnormaltable' vAlign='center' align='right' width='57'><a href='shop.php?A=Remove&P=".$pos."'>Remove</a></td>"; $price=$basket->Get_Item_Price($pos); $quantity=$basket->Get_Item_Quantity($pos); $total=number_format(($total + ($price*$quantity)), 2, '.', ''); print $mytext; $pos = $basket->Enum_Items(); } } if (!isset($pos)) { ?> <align="center">No Items in Cart</align> <? } ?> </tbody> </table><BR> <table width="75%"> <TR> <td class="smallboldtabletop" align="right" width="100%">Total($): $<? print $total; ?></td> </tr> </table><BR> <input type="submit" name="submit" value="Update Quantities"> <form><BR><BR> <a href="add.php?A=Add&itemid=FORE2">Add Product - FORE 2</a> <BR><BR> <a href="add.php?A=Add&itemid=FORE1">Add Product - FORE 1</a> <BR><BR> <a href="add.php?A=Add&itemid=FORE3">Add Product - FORE 3</a> </center> </div> </td> </tr> </tbody> </table> <p align="center"> </p> </body> </html>
29. oktober 2005 - 02:20
#2
<ADD.PHP> <? error_reporting(0); require("merchantfront.php"); session_name("mysession"); session_start(); if (!session_is_registered("basket")) { $basket=new Basket; session_register("basket"); } $myid=""; $myquant=""; $zpos=""; if ($basket->Get_Basket_Count()>0) { # are there items in the basket $pos = $basket->Enum_Items(true); while ($pos>=0) { if ($basket->Get_Item_ID($pos)==$itemid) { $basket->Set_Item_Quantity($pos,($basket->Get_Item_Quantity($pos)+1)); $addprod="no"; } $myid=$basket->Get_Item_ID($pos); $myquant=$basket->Get_Item_Quantity($pos); $zpos=$pos; $pos = $basket->Enum_Items(); } } if ($addprod!="no") { $basket->Add_Item($itemid,"George Foreman Grill",1,19.95,"YadaYada",".0675","black","XXL","1"); } header("Location:shop.php"); ?>
29. oktober 2005 - 02:21
#3
<MERCHANTFRONT.PHP> <? class Basket { var $basket_count; var $basket_item_id; var $basket_item_name; var $basket_item_quantity; var $basket_item_data; var $basket_item_price; var $basket_item_tax; var $basket_item_color; var $basket_item_size; function Basket() { $this->basket_count=0; } function Add_Item($ID,$name,$quantity=1,$price=0,$data='',$tax,$color,$size,$weight) { $this->basket_item_id[$this->basket_count]=$ID; $this->basket_item_name[$this->basket_count]=$name; $this->basket_item_quantity[$this->basket_count]=$quantity; $this->basket_item_data[$this->basket_count]=$data; $this->basket_item_price[$this->basket_count]=$price; $this->basket_item_tax[$this->basket_count]=$tax; $this->basket_item_color[$this->basket_count]=$color; $this->basket_item_size[$this->basket_count]=$size; $this->basket_item_weight[$this->basket_count]=$weight; $this->basket_count++; return ($this->basket_count-1); } function Del_Item($pos) { $this->basket_item_id[$pos]=''; } function Get_Item_ID($pos) { return $this->basket_item_id[$pos]; } function Get_Item_Name($pos) { return $this->basket_item_name[$pos]; } function Get_Item_Price($pos) { return $this->basket_item_price[$pos]; } function Get_Item_Quantity($pos) { return $this->basket_item_quantity[$pos]; } function Get_Item_Data($pos) { return $this->basket_item_data[$pos]; } function Get_Item_Tax($pos) { return $this->basket_item_tax[$pos]; } function Get_Item_Color($pos) { return $this->basket_item_color[$pos]; } function Get_Item_Size($pos) { return $this->basket_item_size[$pos]; } function Get_Item_Weight($pos) { return $this->basket_item_weight[$pos]; } function Set_Item_Quantity($pos,$quantity) { $this->basket_item_quantity[$pos]=$quantity; } function Set_Item_Data($pos,$data) { $this->basket_item_data[$pos]=$data; } function Enum_Items($start=false) { static $current; if ($current>=$this->basket_count) return -1; if (!$start) { $current++; } else { $current=0; } while (($this->basket_item_id[$current]=='') && ($current<$this->basket_count)) { $current++; } return ($current<$this->basket_count) ? $current : -1; } function Empty_Basket() { $this->basket_count=0; } function Get_Basket_Count() { $num=0; for ($i=0;$i<$this->basket_count;$i++) { if ($this->basket_item_id[$i]!='') $num++; } return $num; } } ?>
29. oktober 2005 - 07:52
#4
Har du evt et link til din side? Det er sgu lidt meget kode at læse igennem! :o)
29. oktober 2005 - 13:40
#5
Hej Jakobdo.
Jeg har skrevet begge links i første post ;-)
Men her er de igen:
Konkret drejer det sig om dette script:
http://easy-shave.com/shop.php Her har jeg indsat dem på min egen side.
http://easy-shave.com/?menuID=13 Koden er der sådan set ikke noget i vejen med - den fungerer jo i det første link. Mit problem er at den ikke fungerer når jeg sætter den ind på min egen side...
29. oktober 2005 - 13:45
#6
Hvordan ser du session_id()? Er det i din DB? Eller andet steds?
29. oktober 2005 - 13:50
#7
Well, normalt (uden ovennævnte script) ser jeg ikke sessionID. De andre sessions der kører på min side bliver blot kaldt frem via session_start() og så kan jeg bruge de variable der indeholder værdierne, f.eks. MenuID_ses. Er det noget jeg ikke ved om hvordan sessions fungerer?
29. oktober 2005 - 14:05
#8
Måske vi snakker forbi hinanden. Hvad er dit problem? Kan du vise mig fejlen?
29. oktober 2005 - 14:43
#11
det er fordin på den første side kalder den det eksterne script add.php På min egen side har jeg sat det ind på siden så den kører scriptet når act==add
29. oktober 2005 - 14:47
#12
Jeg undrede mig også bare over hvorfor den indsætter PHPSESSID i linket af sig selv...
29. oktober 2005 - 14:48
#13
Prøv at lav noget debug i din act==add_product echo $_GET["itemid"]; og hvad du ellers mener skulle ske når du klikker på linket.
29. oktober 2005 - 14:54
#14
Det er noget php noget! :o) Mener man kan fjerne det, men kan ikke huske nærmere.
29. oktober 2005 - 15:10
#15
echo $_GET["itemid"]; udskriver den værdi jeg forventer. Det virker som om problemet opstår længere nede i scriptet. Hvis jeg sætter breaks ved denne stump kode udskriver den ikke break2. Resten af siden udskrives iøvrigt heller ikke. if ($act=='add_product'){ echo 'itemid: '.$_GET["itemid"]; $myid=""; $myquant=""; $zpos=""; print ('break1'); if ($basket->Get_Basket_Count()>0) { # are there items in the basket $pos = $basket->Enum_Items(true); while ($pos>=0) { if ($basket->Get_Item_ID($pos)==$itemid) { $basket->Set_Item_Quantity($pos,($basket->Get_Item_Quantity($pos)+1)); $addprod="no"; } $myid=$basket->Get_Item_ID($pos); $myquant=$basket->Get_Item_Quantity($pos); $zpos=$pos; $pos = $basket->Enum_Items(); } } if ($addprod!="no") { $basket->Add_Item($itemid,"George Foreman Grill",1,19.95,"YadaYada",".0675","black","XXL","1"); } } print ('break2');
29. oktober 2005 - 15:12
#16
endvidere, hvis jeg sætter et print her, så udskriver den "starter basket" hver gang jeg opdaterer siden - jeg ville forvente at den kun gjorde det første gang - næste gang burde basket jo være "session_is_registered"! session_name("mysession"); session_start(); if (!session_is_registered("basket")) { $basket=new Basket; session_register("basket"); print ('starter basket'); }
29. oktober 2005 - 15:16
#17
Hvis jeg indsætter samme print ('starter basket'); i første script
(
http://easy-shave.com/shop.php )
udskriver den det kun første gang - som jeg ville forvente...
29. oktober 2005 - 15:17
#18
Du husker at smide session_start(); i toppen af dit script?
29. oktober 2005 - 15:21
#19
session_start(); kører i forvejen som det første på min side - i forbindelse med de andre session variable jeg bruger. Jeg har prøvet at slette linierne session_name("mysession"); session_start(); fra scriptet ovenfor - det gør ikke nogen forskel.
29. oktober 2005 - 15:25
#20
Det script jeg kører først på siden ser sådan her ud: <?PHP session_start(); // FØRSTE SESSIONS NÅR BRUGEREN BESØGER SIDEN if(!isset($menuID_ses)) { $userlevel_ses = "0"; $langvar_ses = 'dan'; $menuID_ses = '0'; $product_maincats_ses = '0'; $edittext_ses = '0'; $editproducts_ses='0'; $dummy_random = '0'; } // Registrer sessions session_register("langvar_ses","ext_secret_word","menuID_ses","product_maincats_ses","product_ses","edittext_ses","editproducts_ses","picDB_dummy_ses","dummy_random"); ?>
29. oktober 2005 - 15:42
#21
Den måde du laver variabler på, er lidt outdated!
Prøv at kig på denne side, og overvej evt at gå over til:
$_SESSION
http://dk2.php.net/session_start
29. oktober 2005 - 16:05
#22
Jeg kan godt se de gør det på en anden måde. Men hvilken fordel har det?
29. oktober 2005 - 16:41
#23
Ikke nogen fordel! Forskellen er ens! :o)
31. oktober 2005 - 20:22
#24
Problemet bestod I at jeg havde indsat enkelte koder det forkerte sted i mit script. Men tak for assistancen jaobdo - smit et svr så får du point...
31. oktober 2005 - 21:02
#25
Svar! :o)
Vi tilbyder markedets bedste kurser inden for webudvikling