Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Gästebuch

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Gästebuch

    Hallo, ich habe ein kleines Problem. Ich habe mir ein kleines Gästebuch programmiert, aber wenn ich einen eintrag schreibe und danach die Page durch F5 aktualisiere wird der Beitrag immer wieder eingefügt. Habe aber im Script die Varibalen mit unset gelöscht. Gibt es eine weitere Möglichkeit das Problem zu lösen?

    Gruß Akula


  • #2
    Hallo!

    Zeige mal deinen Code! Ohne Code können wir nur Rätzel raten und nicht effektiv auf dein Problem einngehen!

    mfg der Litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

    Kommentar


    • #3
      PHP-Code:

      <?php 
        $host 
      "localhost";
        
      $user "Akula";
        
      $pass "akula35";
        
      $datenbank "bus_seite";
        
        
      $dz mysql_connect($host$user$pass);
        
      mysql_select_db($datenbank$dz);

      function 
      PostVar($variablen_name) {
        
      $ergebnis $_POST[$variablen_name];
        if (
      get_magic_quotes_gpc()) $ergebnis stripslashes($ergebnis);
        return 
      trim($ergebnis);
      }

      function 
      format ($text) {
        
      $ergebnis htmlentities($text);
        
      $ergebnis str_replace("\r\n\r\n","<br><br>",$text);
        return 
      $ergebnis;
      }

      $anzeigen true;

      if (empty(
      $_POST)) $fehler "";

      else {
        
      $grenzwert 1000;
        
      // $eintrag = PostVar("eintrag");
        //$autor =  PostVar("autor");
        
      $eintrag $_POST['eintrag'];
        
      $autor =  $_POST['autor'];
        
      $status $_POST['status'];
        if (empty(
      $eintrag)) $fehler .= "<li>Der Eintrag ist leer</li>";
        if (empty(
      $autor)) $fehler .= "<li>Sie haben keinen Namen eingetragen</li>";
        if (
      strlen($eintrag) > $grenzwert$eintrag substr($eintrag,0,$grenzwert);
        if (!
      strpos($eintrag," ") || strpos($eintrag," " 60)) $eintrag wordwrap($eintrag60" "1);
      }
      ?>

      <link href="main.css" rel="stylesheet" type="text/css" />
      <h2>Mein G&auml;stebuch</h2>

      <div id="gbnachricht">
      <?php
       
      if (!empty($fehler)) {
          
      $anzeigen false;
          echo 
      "<p><b>Leider konnte Ihr Beitrag nicht angenommen werden:</b></p>";
          echo 
      "<ul>$fehler</ul>";
          }
      else if (
      $status == "Vorschau")
      {
        
      $anzeigen false;
        
      $datum date("\a\m j. n. Y \u\m H:i"); 
        
      ?>
        <h3>So sieht Ihr Eintrag aus:</h3>
        <hr>
        <p><?php echo format($eintrag); ?></p>
        <hr>
        <b><p><?php echo htmlentities($autor), ", $datum"?></p></b>
        <hr>
        <p> Um den Beitrag zu &auml;ndern benutzen Sie bitte dass Formular</p>
      <?php
      }
      elseif (
      $status == "Eintragen") {
          
      $query "INSERT INTO guestbook SET
          datum = now(),
          eintrag ='"
      .addslashes($eintrag)."',
          autor = '"
      .addslashes($autor)."'
          "
      ;
         
      $sql mysql_query($query)
              or die(
      mysql_error());
        unset(
      $eintrag$autor);
      }

      if (
      $anzeigen) {
          unset(
      $eintrag$autor);
          
      $query "SELECT DATE_FORMAT(datum,'am %e. %c. %Y um %k:%i') AS datum, eintrag, autor FROM guestbook ORDER BY datum DESC";
          
      $sql mysql_query($query)
              or die(
      mysql_error());
          while (
      $ds mysql_fetch_object($sql)) {
            
      $eintrag $ds->eintrag;
            
      $autor $ds->autor;
            
      $datum $ds->datum;  ?>
        <p><?php echo format($eintrag); ?></p>
        <p><b><?php echo htmlentities($autor),", $datum?></b></p>
        <hr />
        <?php
        
      }
        unset(
      $eintrag,$autor);
      }   
      ?>

      </div>
      <div id="gbtextfeld">
      <form action="gp.php" method="post">
      Ihr Eintrag:<br>
      <textarea style="width:500px; height:240px" name="eintrag"><?php echo htmlentities($eintrag); ?></textarea><br><br>
      Ihr Name:<br>
      <input style="width:500px" type="text" name="autor" value="<?php echo htmlentities($autor); ?>">
      <p></p>
      <input type="submit" name="status" value="Vorschau">
      <input type="submit" name="status" value="Eintragen">
      </form>
      </div>
      <?php unset($eintrag,$autor); ?>
      Das ist jetzt der ganze Code

      Kommentar


      • #4
        FAQ der Newsgroups de.comp.lang.php.* - 11.19.*Wie verhindere ich mehrfaches Absenden eines Formulars?

        Kommentar


        • #5
          Also als erstes solltest du anstatt addslashes eher mysql_real_escape_string nehmen.

          Die einfachste und beste Möglichkeit um Formularinhalte nach dem senden zurück zu setzen ist header("Location: deinedatei.php");

          Dazu müsstest du deinen Code ein wenig umbauen. Denn vor dieser Anweisung darf kein HTML stehen!

          Ich finde für ein Gästebuch bist du zu kompliziert ran gegangen! Einige unnötige Sachen mit dabei. Das ist aber meine Meinung und hat nichts mit Ansichten anderer zu tun! Aber ich würde es mir einfacher machen,viel einfacher!
          Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
          http://www.lit-web.de

          Kommentar


          • #6
            gibt es nicht eine infacherer Lösung dasganze zu rück zu setzten, denn mit header("Location: deinedatei.php"); versthe ich nicht ganz, weil html kann ich ja nicht einfach löschen.

            Kommentar


            • #7
              Was meinst du denn mit Html löschen? Das verlangt doch keiner. Belies dich doch mal was header("Location: "); macht,das macht genau das was du willst,es setzt dir dein ganzes Formular zurück indem es ein neue Seite oder die selbe Seite wieder neu aufruft,also im Ausgangszustand!

              Das ist die einzige Möglichkeit die ich kenne und die einfachste!

              Du müsstest nur deinen Code etwas umstrukturieren mehr nicht. Und iwe gesagt ich finde deinen Code ziemlich wuselig und teilweise unnütz. Mache es dir doch einfacher. Den gesammten PHP Code den du für das einsenden eines Eintrages brauchst vor das Html schreiben und dann funktioniert das mit der header Sache und du hast was du willst!

              Hier mal ein Beispiel Code wie ich es bei meinem Gästebuch Script mache um einen Eintrag zu schreiben!

              PHP-Code:
              <?php
              if(isset($_POST['post']))
              {  
               
              //Captcha Check
               
              if($capcha==1)
               {
               
              $Capcha_check=1;
                  require(
              "i_capcha_form.php");
               }
               
              //Variablen Aufbereitung für das Eintrag absenden
               
              if(get_magic_quotes_gpc())
               {
                
              $titel stripslashes($_POST['titel']);
                
              $name stripslashes($_POST['name']);
                
              $email stripslashes($_POST['email']);
                
              $text stripslashes($_POST['text']);
                
              $icon stripslashes($_POST['icon']);
                
              $name stripslashes($_POST['name']);
                
              $ok stripslashes($_POST['ok']);
                
              $hp stripslashes($_POST['home']);
                
              $datum time();
                
              $icq stripslashes($_POST['icq']);
                
              $msn stripslashes($_POST['msn']);
                
              $yahoo stripslashes($_POST['yahoo']);
                
              $skype stripslashes($_POST['skype']);
                
              $allowkomm stripslashes($_POST['allowkomm']);
               }
               else
               {
                
              $titel $_POST['titel'];
                
              $name $_POST['name'];
                
              $email $_POST['email'];
                
              $text $_POST['text'];
                
              $icon $_POST['icon'];
                
              $name $_POST['name'];
                
              $ok $_POST['ok'];
                
              $hp $_POST['home'];
                
              $datum time();
                
              $icq $_POST['icq'];
                
              $msn $_POST['msn'];
                
              $yahoo $_POST['yahoo'];
                
              $skype $_POST['skype'];
                
              $allowkomm $_POST['allowkomm'];
               }
               
              $link "<a href=\"post_gb.php\">Zurück</a>";
               
              //Pflichtfeldprüfung
               
              $titel mysql_real_escape_string($_POST['titel']);
               if(!
              preg_match("#^([0-9a-zäöü _-]+)$#i",$titel))
               {
                echo 
              msgBox("Der Titel fehlt oder hat verbotene Zeichen! Nur Zeichen von a-z A-Z 0-9 Leerzeichen _ - sind erlaubt! <br>".$link."");
                exit();
               }
               
              $name mysql_real_escape_string($_POST['name']);
               if(!
              preg_match("#^([0-9a-zäöü _-]+)$#i",$name))
               {
                echo 
              msgBox("Der Name fehlt oder hat verbotene Zeichen! Nur Zeichen von a-z A-Z 0-9 Leerzeichen _ - sind erlaubt! <br>".$link."");
                exit();
               }
               
              $email mysql_real_escape_string($_POST['email']);
               if(!
              eregi("^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,4}$",$email))
                  {
                echo 
              msgBox("Das E-Mail Format ist falsch! <br>".$link."");
                exit();
                  }
               
              $text mysql_real_escape_string($_POST['text']);
               if(
              strlen($_POST['text'])<15)
               {
                echo 
              msgBox("Der Text fehlt oder hat weniger als 15 Zeichen! <br>".$link."");
                exit();
               }
               else
               {
               
              $icon mysql_real_escape_string($_POST['icon']);
               
              $ok mysql_real_escape_string($_POST['ok']);
               
              $hp mysql_real_escape_string($_POST['home']);
               
              $datum time();
               
              $icq mysql_real_escape_string($_POST['icq']);
               
              $msn mysql_real_escape_string($_POST['msn']);
               
              $yahoo mysql_real_escape_string($_POST['yahoo']);
               
              $skype mysql_real_escape_string($_POST['skype']);
               
              $allowkomm mysql_real_escape_string($_POST['allowkomm']);
               
               
              //Sql Insert Abfrage
               
              $sqlbefehl ="Insert Into $tab_data
                  (icon,titel,name,ok,email,home,text,datum,icq,msn,yahoo,skype,allowkom)
                VALUES ('
              $icon','$titel','$name','$ok','$email','$hp','$text','$datum','$icq','$msn','$yahoo','$skype','$allowkomm')
                  "
              ;
               
              $result mysql_query($sqlbefehl)or die(mysql_error());
               if(
              $send ==1)
               {
                
              $empfaenger $adminmail;
                
              $betreff .="Neuer Eintrag im Gästebuch!";
                
              $mailtext .= "Sie haben einen neuen Eintrag vom ".date("d.m.Y H:i")."\n";
                
              $mailtext .= "Der Eintrag stammt von ".$name."\n";
                
              $header .= 'From: Gästebuch' "\n";
                
              $header .= 'MIME-Version: 1.0' "\n";
                
              $header .= 'Content-type: text/plain; charset="iso-8859-1"' "\n";
                
                
              mail($empfaenger,$betreff,$mailtext,$header);
               }
               
              header("Location: danke.php");
               }
              }
              ?>
              Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
              http://www.lit-web.de

              Kommentar


              • #8
                Danke für deine Antwort, habe einfach noch eine "Danke-Seite" eingefügt und dann ging es. und danke für das Beispiel dann kann ich mal schaune was ich ändern kann.

                Akula

                Kommentar


                • #9
                  Auf alle Fälle kann ich dir nur eins Raten anstatt addslashes nutzen nimm lieber mysql_real_escape_string das ist sicherer!
                  Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                  http://www.lit-web.de

                  Kommentar


                  • #10
                    Draf man fragen warum dieser Befehl besser ist, ich habe noch nichts von dem gehöhrt.

                    Kommentar


                    • #11
                      Das ist kein Befehl das ist eine PHP Funktion!

                      Schau mal hier PHP: mysql_real_escape_string - Manual und vergleiche damit PHP: addslashes - Manual und du findest die Antwort auf deine Frage!
                      Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                      http://www.lit-web.de

                      Kommentar

                      Lädt...
                      X