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 Infor
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