P.Gabriel: Kleines Warenkorb Problem

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.

  1. HI,

    Kann mir jemand sagen was da falsch sein könnte???

    mit einem kleinen Codebeispiel sicherlich ;)
    ohne ist es immer etwas schwierig,

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    ->Alles ist gut wenn es aus Schokolade ist
    1. 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

      1. 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

        --
        DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
        ->Alles ist gut wenn es aus Schokolade ist
        1. 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

          1. 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

            1. 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

              --
              DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
              ->Alles ist gut wenn es aus Schokolade ist
              1. 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

                1. 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

                  --
                  DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
                  ->Alles ist gut wenn es aus Schokolade ist
      2. 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 FROM Warenkorb 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.