Avatar billede peecee Nybegynder
21. december 2002 - 20:30 Der er 12 kommentarer og
1 løsning

Script glemmer session?

Jeg har en side der glemmer sessions! Hvorfor pokker gør den det? Koden til kurv.php kan ses her:

<?
session_start();
require("config.php");
if(!isset($_SESSION['UserID'])){
    mysqlaccess();
    $spoerg = mysql_query("select UserID FROM ordrer ORDER BY nr DESC limit 1") or die('MySQL fejl: '.mysql_error());
    $data = mysql_fetch_row($spoerg);
    $sessionuserid = $data[0];
    $_SESSION['UserID'] = $sessionuserid + 1;
}
$ersendt = $_POST["send"];
$vareantal = $_POST["antal"];
$varenr = $_GET["nr"];
if($ersendt){
    $_SESSION[$varenr] = $vareantal;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Onlineshop</title>
<link href="style/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width='500' height='550' cellpadding='0' cellspacing='0'>
    <tr>
        <td height='50' width='500' colspan='3'>
            <p><img src="pics/banner.gif"></p>
        </td>
    </tr>
    <tr>
        <td height='485' width='100' valign="top">
            <div align="center"><a href="kurv.php" class="menu">Kurv</a></div><p>
            Produkter:<br><br>
            Køling:<br>
            &nbsp;-<a href="index.php?kategori=blæsere">Blæsere</a><br>
            &nbsp;-<a href="index.php?kategori=gitre">Gitre</a><br>
            &nbsp;-<a href="index.php?kategori=kølere">Kølere</a><br><br>

            Shoppen:<br>
            &nbsp;-<a href="profil.php">Profil</a><br>
            &nbsp;-<a href="kontakt.php">Kontakt</a><br>
            &nbsp;-<a href="info.php">Info</a><br>
            &nbsp;-<a href="betingelser.php">Salg/levering</a><br>       
            </p>
        </td>
        <td width='15' class="usynlig"></td>
        <td height='500' width='385' class='usynlig' rowspan="2" valign="top">
           
            <table width="70%" cellpadding="1" cellspacing="0"><tr><td width="40%"><p>Varenavn:</p></td><td width="30%"><p>Antal:</p></td width="30%"><td><p>Pris pr. styk:</p></td></tr>
            <?
            mysqlaccess();
            while(list($key, $value) = each ($_SESSION)) {
                $spoerg = mysql_query("select navn,pris FROM onlinevarer WHERE nr = '$key' ORDER BY nr DESC") or die('MySQL fejl: '.mysql_error());
                while($data = mysql_fetch_row($spoerg)){
                $_SESSION['samletpris'] += $data[1] * $value;
                echo "<tr><td><p>$data[0]</p></td><td><p>$value</p></td><td><p>$data[1]</p></td>";
                echo "<br>";
                }
            }
            $prisialt = $_SESSION['samletpris'];
            echo "<tr><td height='15' class='usynlig'></td></tr>";
            echo "<tr><td colspan='2'><p>Pris i alt:</p></td><td><p>$prisialt kr</p></td></tr>";
            echo "</td></tr></table>";
            tilbage();
            ?>           
           
        </td>
    </tr>
    <tr>
        <td height='15' align="center">
            <p>Copyright 2002<br>PeeCee.dk</p>
        </td>
    </tr>
</table>
</body>
</html>

Den får dataene fra index.php. kurv.php viser det rigtigt lige når man har trykket "køb" ved en vare, men når man går videre til en anden side forsvinder dataene der ligger i sessionen. For at vise det har jeg lavet en tabel der viser indhold af alle sessions på alle sider på hjemmesiden. Siden kan ses her http://www.peecee.dk/onlineshop man kan heller ikke tilføje flere varer til kurven da dataene i session forsvinder lige så snart man går ind på en anden side. På forhånd tak for hjælpen, jeg har brug for den.
Avatar billede peecee Nybegynder
22. december 2002 - 11:23 #1
Ej.. kom nu.. hvorfor glemmer den sessionsne?
Avatar billede rednex Nybegynder
22. december 2002 - 16:10 #2
Så vidt jeg kan se på din form, så prøver du at bruge både GET og POST samtidig. Din FORMs method er "kurv.php?nr=xx" dvs. et GET request mens selve FORMen jo er et POST. Da du ikke kan lave begge dele samtidig betyder det at kun GET requestet kommer med. Så vidt jeg kan se, betyder det at der ikke bliver gemt nogen data i din session - dvs. at den "glemmer" tingene.

En løsning ville nok være at du laver et hidden felt i din form som hedder ser nogenlunde sådan her ud:
<input type="hidden" name="nr" value="xx">

Variablen skal så hentes i kurv.php med $_POST['nr'] istedet for $_GET['nr'].
Avatar billede peecee Nybegynder
22. december 2002 - 17:18 #3
Det virkede desværre ikke rednex.. kan det have noget at gøre med at jeg kalder navnet på min session en variabel? Altså sådan her:

$_SESSION[$varenr] = $vareantal;
Avatar billede peecee Nybegynder
22. december 2002 - 17:20 #4
Lille tilføjelse: jeg har lige tjekket min session_id.. den er den samme på alle siderne.
Avatar billede rednex Nybegynder
22. december 2002 - 18:59 #5
$_SESSION[$varenr] = $vareantal - den havde jeg ikke lige set. Hvis du vil have en variabel som hedder indholdet af $varenr skal du nok prøve at bruge $_SESSION["$varenr"] istedet. Så vidt jeg husker kan det godt være lidt tricky men det kan lade sig gøre.
Hvor får du iøvrigt $varenr fra ?? Så vidt jeg kan se er den bare grebet ud af den blå luft, så den indeholder jo ikke noget!

Bare for forsøgets skyld kan du jo prøve at 'hardcode' en vare ind i scriptet for at checke at den husker det bagefter. F.eks.
$_SESSION['dims'] = 1;
Så skulle der jo gerne ligge 1 dims i kurven.
Avatar billede rednex Nybegynder
22. december 2002 - 19:03 #6
Hovsa - glem det der med hvor $varenr kommer fra. Det er vist bare mig der er søvnig :oP
Avatar billede peecee Nybegynder
22. december 2002 - 23:39 #7
Der er altså et eller andet HELT galt med den side der.. jeg har prøvet at bruge $_SESSION["$varenr"] i stedet - Virkede ikke

Så prøvede jeg at 'hardcode' en ting ind i kurven.. det virker heller ikke når man går videre..

Men jeg kan ikke forstå det.. for alle mine andre sessions virker :(
Avatar billede rednex Nybegynder
22. december 2002 - 23:42 #8
Kan du ikke lige prøve at lægge den nye version af scriptet op ? Så er det lidt nemmere at følge med i hvad der er ændret. Så prøver jeg at kigge på det.
Avatar billede peecee Nybegynder
23. december 2002 - 08:42 #9
Den nye version er lagt op - kan det have noget at gøre med min hoster?
Avatar billede rednex Nybegynder
23. december 2002 - 09:59 #10
Hmm, det virker godt nok skummelt. Prøv at lave en print_r($_SESSION) på din index.php side. Så skulle du gerne få udskrevet alle værdierne i din session. Hvis værdierne er der, så er det fordi der er noget galt i din index.php side.

Ellers kunne du måske prøve at poste index.php her
Avatar billede peecee Nybegynder
23. december 2002 - 23:57 #11
Index.php ser sådan ud:

<?
session_start();
require("config.php");
if(!isset($_SESSION['UserID'])){
    mysqlaccess();
    $spoerg = mysql_query("select UserID FROM ordrer ORDER BY nr DESC limit 1") or die('MySQL fejl: '.mysql_error());
    $data = mysql_fetch_row($spoerg);
    $sessionuserid = $data[0];
    $_SESSION['UserID'] = $sessionuserid + 1;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Onlineshop</title>
<link href="style/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width='500' height='550' cellpadding='0' cellspacing='0'>
    <tr>
        <td height='50' width='500' colspan='3'>
            <p><img src="pics/banner.gif"></p>
        </td>
    </tr>
    <tr>
        <td height='485' width='100' valign="top">
            <div align="center"><a href="kurv.php" class="menu">Kurv</a></div><p>
            Produkter:<br><br>
            Køling:<br>
            &nbsp;-<a href="index.php?kategori=blæsere">Blæsere</a><br>
            &nbsp;-<a href="index.php?kategori=gitre">Gitre</a><br>
            &nbsp;-<a href="index.php?kategori=kølere">Kølere</a><br><br>

            Shoppen:<br>
            &nbsp;-<a href="profil.php">Profil</a><br>
            &nbsp;-<a href="kontakt.php">Kontakt</a><br>
            &nbsp;-<a href="info.php">Info</a><br>
            &nbsp;-<a href="betingelser.php">Salg/levering</a><br>       
            </p>
        </td>
        <td width='15' class="usynlig"></td>
        <td height='500' width='385' class='usynlig' rowspan="2" valign="top">
            <?
            mysqlaccess();
            if($_GET["kategori"]){
                $vaelgkategori = $_GET["kategori"];
                visvarer($vaelgkategori);
            }else{
            ?>
                <p>
                *HardwareZone ønsker alle vores kunder en glædelig jul og et godt nytår*<br><br>
                Velkommen til HardwareZone hvor du finder Danmarks største udvalg i køleudstyr og modding ting.
                Siden er kun beta indtil videre!<br><br>
                Bestillinger foregår indtil videre over mail, spørgsmål over icq eller msn.<br>
                Mail: <a href="mailto:Villads@hesteriet.dk">Villads@hesteriet.dk</a><br>
                Icq: 171495650 <br>
                Msn: cool_hw@msn.com
                </p>
            <?
            }
            ?>
            <table width="70%" cellpadding="1" cellspacing="0"><tr><td width="40%"><p>Varenavn:</p></td><td width="30%"><p>Antal:</p></td width="30%"><td><p>Pris pr. styk:</p></td></tr>
            <?
            echo session_id();
            mysqlaccess();
            while(list($key, $value) = each ($_SESSION)) {
                $spoerg = mysql_query("select navn,pris FROM onlinevarer WHERE nr = '$key' ORDER BY nr DESC") or die('MySQL fejl: '.mysql_error());
                while($data = mysql_fetch_row($spoerg)){
                $_SESSION['samletpris'] += $data[1] * $value;
                echo "<tr><td><p>$data[0]</p></td><td><p>$value</p></td><td><p>$data[1]</p></td>";
                echo "<br>";
                }
            }
            $prisialt = $_SESSION['samletpris'];
            echo "<tr><td height='15' class='usynlig'></td></tr>";
            echo "<tr><td colspan='2'><p>Pris i alt:</p></td><td><p>$prisialt kr</p></td></tr>";
            echo "</td></tr></table>";
            ?>
        </td>
    </tr>
    <tr>
        <td height='15' align="center">
            <p>Copyright 2002<br>PeeCee.dk</p>
        </td>
    </tr>
</table>
</body>
</html>

Hvad gør den print_r($_SESSION) helt præcis?
Avatar billede peecee Nybegynder
25. december 2002 - 13:58 #12
Er der ikke nogen der har noget hjælp?

Skal jeg kontakte min hoster?
Avatar billede peecee Nybegynder
30. december 2002 - 20:34 #13
Jeg fandt ud af at problemet var, at sessionnavne IKKE må starte med tal.. derfor tager jeg pointene selv, ikke noget af det rednex svarede hjalp, ellers tak for hjælpen mate :)
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