PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : probleme mit warenkorb



jochenjjj
19-12-2003, 10:28
hallo zusammen
ich programmiere zur zeit einen warenkorb.
wenn der kunde einen artikel auswählt lasse ich diesen samt session_id ,IP und das aktuelle Datum eine Datenbanktabelle schreiben.
Tabellenname: order1

Wenn der Kunde dann seine Bestellung mit Eingeben seiner Personalien fortsetzt werden dann anschließend die Daten aus dem Warenkorb und seine Personalien in eine Datenbanktabelle order2 geschrieben.
Das wäre der Idealfall.Was ist aber wenn der Kunde nach seiner Produktauswahl meine Seite verlässt ohne die Bestellung zu Ende zu führen.Die Daten würden dann in der Tabelle order1 stehen bleiben.

Lösung:
Kann man diese daten zeitlich begrenzen lassen.wie würdet ihr das umsetzen oder habt ihr eine andere lösung.

mfg

mehlvogel
19-12-2003, 11:09
Die ganzen Daten erst in der Session speichern (Dafür ist sie da) und erst am Ende alles in die DB schreiben - so macht es eigentlich jedes Warenkorb system.

Stanislaus
19-12-2003, 11:20
Oder, wenn Du den Kram unbedingt in der DB haben willst, schreibst Du dir einen eigenen Sessionhandler, der die Sessions nicht in /tmp sondern eben in der DB ablegt.
Alte Sessions werden dann genau so gelöscht, wie es unter /tmp der Fall ist.

Hier mal ein Beispiel wie sowas aussehen könnte:


function sessionHandler()
{
session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');
}


function open($save_path, $session_name)
{
mysql_connect("localhost", "benutzer", "passwd");
mysql_select_db("dingens");
$table = $session_name;
return true;
}


function read($session_id)
{
$result = mysql_query("select VALUE from SESSION_STORE where SESSION_ID = '" . $session_id . "'");
if($result && mysql_num_rows($result))
{
return mysql_result($result, 0);
}
else
{
echo mysql_error();
}
}

function write($session_id, $data)
{
$data = addslashes($data);
$strQuery = "replace into SESSION_STORE (SESSION_ID, VALUE) values ('" . $session_id . "', '" . $data . "')";
mysql_query($strQuery) or mysql_error();
return true;
}

function close()
{
return true;
}


function destroy($session_id)
{
mysql_query("delete from SESSION_STORE where SESSION_ID = '" . $session_id . "'");
return true;
}


function gc($max_time)
{
$strQuery = "delete from SESSION_STORE where unix_timestamp(EXPIRATION) < unix_timestamp()-$max_time";
mysql_query($strQuery) or mysql_error();
return true;
}

Wenn Du einfach am vor dem Start der Session sessionHandler() aufrufst läuft alles über die DB und nicht über /tmp

Bis neulich ...