Kleines Warenkorb Problem
P.Gabriel
- php
0 romy0 P.Gabriel0 romy0 AnalphaBestie0 P.Gabriel0 romy0 Peter Gabriel0 romy
0 Andreas Korthaus
Hallo Forumler,
ich habe mir einen Warenkorb gebaut und eigentlich funktioniert alles ganz prima. Nur wenn ich einen Artikel
lösche muss ich immer noch den Akutalisieren Button im Browser drücken, damit die Änderung sichtbar wird.
Manchmal funktioniert es auch...
Den delete lasse ich über eine externe Datei(delete.php) ausführen und von dort aus wird direkt über "Location: header" zur warenkorb.php zurückgesprungen.
Kann mir jemand sagen was da falsch sein könnte???
Vielen Dank
P.
HI,
Kann mir jemand sagen was da falsch sein könnte???
mit einem kleinen Codebeispiel sicherlich ;)
ohne ist es immer etwas schwierig,
ciao
romy
Hallo Romy,
also hier mal meine delete.php. Gelöscht wird es ja schon nur halt erst nach einem Browser Refresh angezeigt...
<?
if($del!=0){
if($del==1){
header("Location: warenkorb.php?bid=$bid&mode=show");
}
if($del==2){
header("Location: warenkorb.php?bid=$bid&mode=b");
}
require('database.inc.php');
connectDB($host,$user,$password);
$db = 'db72612510';
mysql_select_db($db);
$sql = "DELETE FROM Warenkorb
WHERE BID='$bid' AND artikelnr='$artikelnr'";
$result = mysql_query($sql);
}
?>
mode "show"+"b" geben den Warenkorb aus...
Viele Grüsse
Peter
Hi,
irgendwie habe ich dass Gefühl, dass beim ersten Mal $del nicht gesetzt ist, demzufolge nicht in die if-Schleife gesprungen wird...kann das sein?
Wo kommt $del her? mal mal echo $del und guck was beim ersten Aufruf bzw. nach dem reload drinsteht.
<tip> es ist besser und sicherer $_POST["del"] bzw. $_GET["del"] bzw. $_SESSION["del"] zu benutzen und register_globals auf off zu stellen </tip>
ciao
romy
moin ihr 2.
könnte auch sein das es nen cache problem ist. habe mit den code nicht angeschaut aber klingt fast so wenn es manchmal geht und manchmal nicht.
probier mal: <meta http-equiv="cache-control" content="no-cache"> im header der HTML datei
MFG analpha
Hallo und danke für eure Antworten,
leider funktioniert es mit dem Cache auch nicht.
Del ist gesetzt und es funktioniert ja eigentlich auch :)
Nur das es erst nach einem Refresh angezeigt wird.
Falls ihr Euch Code antun wollt wäre ich sehr dankbar.
Hier ein auschnitt daraus:
if($mode==show){
echo '
<table border="0" cellpadding="3" cellspacing="2">
<tr class="tr">
<td><b>Anzahl</b></td>
<td><b>Bezeichnung</b></td>
<td><b>Artikelnummer</b></td>
<td><b>Einzelpreis</b></td>
<td><b>Summe</b></td>
</tr>
';
$sql = "SELECT * FROM Warenkorb
WHERE BID='$bid'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
$anzahl = $row['anzahl'];
$einzelpreis = strtr($row['Preis'], ',.','.,');
$summe = $einzelpreis * $anzahl;
$summe = number_format($summe, 2);
$gesamt2 = $gesamt + $summe;
$gesamt = number_format($gesamt2, 2);
$mwst1 = $summe * 116;
$mwst2 = $mwst1 / 100 ;
$mwst3 = $mwst2 - $summe;
$mwst3 = number_format($mwst3, 2);
$mwst3 = strtr($mwst3, '.', ',');
$summe = strtr($summe, '.', ',');
$einzelpreis = strtr($einzelpreis, '.', ',');
echo '
<tr>
<td class="td">
<form action="update.php" method="POST" name="form1">
<input type="text" value="'.$row['anzahl'].'" name="anzahl" size="3">
<input type=image src="aktualisieren.gif" alt="aktualisieren" name="update" value="update">
<input type="hidden" value="'.$row['artikelnr'].'" name="artikelnr">
<input type="hidden" value="'.$row['BID'].'" name="bid">
<input type="hidden" value="show" name="mode">
</td>
<td class="td" width="200">
<div class="text">'.$row['Artikel'].'</div></td>
<td class="td"><div class="text">'.$row['artikelnr'].'</div></td>
<td class="td" rowspan="2" valign="top" align="right">
<div class="text">'.$einzelpreis.'<br>'.$row['Mwst'].'% MwSt.</div></td>
<td class="td" rowspan="2" valign="top" align="right">
<div class="text">'.$summe.'<br>'.$mwst3.'</div></td>
</tr>
<tr>
<td class="td">
<a href="delete.php?id='.$id.'&artikelnr='.$row['artikelnr'].'&anzahl='.$anzahl.'&bid='.$bid.'&artikel='.$artikel.'&preis='.$preis.'&mwst='.$mwst.'&del=1">
<img src="img/trashcan.gif" width="30" height="32" border="0" alt="löschen"></a></td>
<td colspan="2" class="td"></td></form>
</tr>
';
}
Viele Grüße und danke
Peter
Hi,
<a href="delete.php?id='.$id.'&artikelnr='.$row['artikelnr'].'&anzahl='.$anzahl.'&bid='.$bid.'&artikel='.$artikel.'&preis='.$preis.'&mwst='.$mwst.'&del=1">
<img src="img/trashcan.gif" width="30" height="32" border="0" alt="löschen"></a></td>
aua... ;)
Bitte übergib nicht soviele Infos über den querystring...ich kann jetzt bequem deinen Preis durch meinen ersetzten und dann reload drücken und schon steht mein Preis da...oder fängst Du dass noch ab, ob dann anstatt 10 Euro, 1 Euro dasteht???
Wenn $del gleich 1 ist, führst Du zuerst den header aus und dann den code...d.h. Du musst den header unter der Ausführung des Codes schreiben
if($del == 1) {
sql sql sql
header();
}
sonst führt er den Code zwar trotzdem aus, ist aber noch nicht aktuell nach der Weiterletung, logischerweise erst nach dem reload.
<tip> lies Dir mal ein paar Beiträge zum Thema Sicherheit durch
zB. c't 2002/26 Sicherheitslücken bei Onlineshops </tip>
ciao
romy
Hi Romy,
ich benutze ein Frameset, deshalb sieht man den Url String nicht, aber stimmt schon, sicherer wäre es anders.
Die Sache mit dem Sql davor setzten klingt logisch, doch leider funktioniert es immer noch nicht. Ich habe mal den Cache im meinem Browser deaktiviert - da geht´s jetzt plötzlich (auch die Version von mir). Über Meta den Cache zu deaktivieren hat auch nicht geklappt...
Ob es noch weiter Möglichkeiten gibt diesen per Script zu deaktivieren??? Habe mal im PHP Manual nachgeguckt und session.cache_limiter(nocache) gefunden. Doch schaffe ich es nicht ihn richtig in meinen Code einzubinden...
Naja, vielen vielen Dank schonmal für deine Antworten.
Falls das mein letzter Eintrag im Thread wird schonmal
Frohes Fest und einen guten Rutsch :)
Grüße
Peter
Hi Peter,
heisst Du wirklich Peter Gabriel?
Die Sache mit dem Sql davor setzten klingt logisch, doch leider funktioniert es immer noch nicht. Ich habe mal den Cache im meinem Browser deaktiviert - da geht´s jetzt plötzlich (auch die Version von mir). Über Meta den Cache zu deaktivieren hat auch nicht geklappt...
komisch komisch, eigentlich sollte es gehen, der Fehlerteufel lauert sichrelich noch irgendwo, kann ihn aber auch nicht erkennen ;)
Ob es noch weiter Möglichkeiten gibt diesen per Script zu deaktivieren??? Habe mal im PHP Manual nachgeguckt und session.cache_limiter(nocache) gefunden. Doch schaffe ich es nicht ihn richtig in meinen Code einzubinden...
nimm doch session.cache_expire(1); oder nicht
ciao
romy
Hallo!
also hier mal meine delete.php.
<?
if($del!=0){if($del==1){
header("Location: warenkorb.php?bid=$bid&mode=show");
}
if($del==2){
header("Location: warenkorb.php?bid=$bid&mode=b");
}require('database.inc.php');
connectDB($host,$user,$password);
$db = 'db72612510';
mysql_select_db($db);
$sql = "DELETE FROMWarenkorb
WHERE BID='$bid' AND artikelnr='$artikelnr'";
$result = mysql_query($sql);
}
?>
Gelöscht wird es ja schon nur halt erst nach einem Browser Refresh angezeigt...
Wie auch? Veranlaßt den Browser ja erstmal sich die neue Seite zu holen(header()), und _danach_ löscht Du das ganze erst! Manchmal ist der Browser wohl schnell genug das er von der Änderung in der DB noch nichts mitbekommt, da das DELETE-Statement zu diesem Zeitpunkt halt noch nicht ausgeführt wurde, manchmal eben nicht er bekommt die aktuelle Seite, d.h. der SELECT wird in diesem Fall erst _nach_ dem DELETE ausgeführt, kommt halt immer drauf an wie schnell der Browser den Header bekommt und darauf reagiert.
Grüße
Andreas
PS: Selbiger Fehler hat mich auch schonmal ne ganze Menge Haare gekostet ;-)
PPS: ohne das andere Script habe ich dieses hier nicht wirklich verstanden.