[php] probleempje met shop bouwen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Mitsah
  • Registratie: Februari 2002
  • Laatst online: 09-10-2024
Ik ben een shop aan het bouwen en kom problemen tegen en weet niet hoe ik die op moet lossen. Om een paar stappen over te slaan... ik bevind me in
detail.php?idfoto=288

Deze wil ik toevoegen aan de winkelmand en vervolgens verder shoppen. dit lukt niet. Om de een of andere reden krijg ik steeds een nieuwe sessie en wordt de cookie niet geplaatst. Ik heb hieronder de belangrijkste code neergezet ter verduidelijking.

Ik gebruik PHP 4.2.0.

Ik hoop dat iemand me kan helpen.

Voor de detail heb ik de result.php en daarvoor de index.php. In al deze bestanden heb ik de volgende includes:
PHP:
1
2
3
4
5
$LibPath = "lib/";
include($LibPath.'setCookie.php');
include_once($LibPath.'libDatabase.php');    //gegevens over de connectie
$Connection = ConnectDB();
$CrLf = Chr(13).Chr(10);

Hieronder de setCookie.php
PHP:
1
2
3
4
5
6
7
8
9
10
function GetCartId() {
if(isset($_COOKIE["cartId"])) {
    return $_COOKIE["cartId"];
} else {

                session_start();
    setcookie("cartId", session_id(), time() + 14400);
    return session_id(); 
    }
}

In de detail.php staat dus een foto met veschillende extra info. Om deze toe te voegen aan het winkelmandje gebruik ik de volgende link:

<a href="shop_cart.php?action=add_item&idfoto=<?php echo $idfoto; ?>&aantal=1">Voeg toe aan winkelwagen</a>

In de shop_cart.php doe ik dezelfde includes als eerder beschreven staat.

Verder staat daar de volgende code in (alleen het belangrijke):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
switch($_GET["action"]) {
    case "add_item": {
        AddItem($_GET["idfoto"], $_GET["aantal"]);
        ShowCart();
        break;
    }
    default: {
    ShowCart();
    }
}

function AddItem($idfoto, $aantal){
global $Connection;

$Query = "  SELECT count(*) 
            FROM card 
            WHERE cookie_id = '" . GetCartId() . "' 
            AND id = $idfoto ";
echo $Query;
$Result = OpenQuery ($Query, $Connection);
$Record = FetchRow($Result); 
$numRows = $Record[0]; 

if($numRows == 0) { 
// This item doesn't exist in the users cart, 
// we will add it with an insert query 
$Query = "  INSERT INTO card
            (
            cookie_id,
            foto,
            aantal
            ) 
            VALUES
            (
            '" . GetCartId() . "',
            '$idfoto', 
            '$aantal'
            )";
echo $Query;
$Result= ExecuteQuery($Query, $Connection);
} else { 
// This item already exists in the users cart, 
// we will update it instead 
UpdateItem($id, $aantal); 
} 
}

function ShowCart() {
global $Connection;
$totalCost = 0;
$Query = "  SELECT * 
            FROM card
            WHERE cookie_id = '" . GetCartId() . "' 
            ORDER BY foto asc
            ";
echo $Query;
$Result= OpenQuery($Query, $Connection);

while($Record = FetchRow($Result)) { 
$foto = $Record["foto"];
// Increment the total cost of all items 
$totalCost += ($Record["aantal"] * $Record["prijs"]); 

//hier allerlei een html tabel om de lijst weer te geven.

}
<a href="index.php">&lt;&lt; Keep Shopping</a>
}

Acties:
  • 0 Henk 'm!

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 16-08 06:44

CyberSnooP

^^^^ schrijft --->

Helpt het als je geen expiration time op je cookie zet? Zoja, dan staat je server-tijd of je client-systeem-tijd verkeerd, zonee.. wacht op een nieuwe reply :)

|_____vakje______|


Acties:
  • 0 Henk 'm!

  • Mitsah
  • Registratie: Februari 2002
  • Laatst online: 09-10-2024
Tja, klinkt misschien stom, maar zou best kunnen. Ik maak gebruik van EasyPHP (zo'n compleet pakket). Ik ben ervan uit gegaan dat deze tijd hetzelfde is als de tijd van mijn windows bak. Het gebeurde me wel al een paar keer dat er zomaar ineens WEL een cookie was. Enig idee of deze tijd verschilt of niet? Zou Easy PHP een eigen tijd hebben?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

vervang op regel 2 in setcookie.php "$_COOKIE" eens door "$_SESSION", en gebruik om de session-vars te registreren niet de $_COOKIE array of setcookie functie, maar de $_SESSION array. Zet de parameters van je sessie met de juiste functie (set_session_params, oid, uit mijn hoofd gezegd) en zet niet zelf de cookie.

Kortom niet cookie voor sessies gebruiken en andersom. Als je sessies gebruikt wordt het hele cookie verhaal al voor je gedaan, dan hoef je daar niet nog eens zelf aan te gaan zitten frutselen.

hth :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Sowieso zou ik gewoon altijd "session_start" boven je code plaatsen en niet half, zoals je nu hebt.

Want session_start zorgt dan voor de afhandeling en het inlezen van je cookies voor het sessie id.