Ergebnis 1 bis 3 von 3

Thema: Submit Problem bei Formularübergabe

  1. #1
    TP-Newbie
    Registriert seit
    Jul 2011
    Beiträge
    1

    Submit Problem bei Formularübergabe

    Hallo,
    ich habe ein einfaches Formular erstellt:

    Code:
    <?php
    
    
    
    if (isset($_REQUEST['submit'])) 
    
    {
    
    $sql = " INSERT INTO news_comments ";
    $sql .= " SET ";
    $sql .= " name   ='". $_POST['name'] ."', ";
    $sql .= " datum  ='". date("Y-m-d H:i:s") ."', ";
    $sql .= " comment ='". $_POST['comment'] ."' ";
    }
    
    
    $db_erg = mysql_query( $sql );
    if ( ! $db_erg )
    {
      die('Ungültige Abfrage: ' . mysql_error());
    }
    
    
    $sql = "
        SELECT
            *
        FROM news_comments ";
    	
    	$db_erg = mysql_query( $sql );
    if ( ! $db_erg )
    {
        die('Ungültige Abfrage: ' . mysql_error());
    }
    
    
    
    echo "<h1> Ein Kommentar abgeben</h1><br />
    <form method=\"post\">
    		Name: <input type=\"text\" name=\"name\" id=\"name\" /><br />
           
           Kommentar: </ br> <br>
           <textarea cols=\"30\" rows=\"5\" name=\"comment\"></textarea><br />
           <input type=\"submit\" value=\"Abgeben\" id=\"submit\" name=\"submit\" />
    </form>";
    
    
    
    
    
    
    $anzahl_eintraege = mysql_num_rows($db_erg);
    echo "<p>Anzahl der Kommentare: $anzahl_eintraege </p>";
    
    while ($daten = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
    
    {
    
    echo "<div id=\"container5\">
    
    <div id=\"gaestebuchname\">Name:" . $daten["name"] . " </div>
    <div id=\"gaestebuchdatum\">Datum:  " . $daten["datum"] . "</div>
    <div id=\"gaestebuchkommentar\"> " . $daten["comment"] . "</div>
    </div>";
    }
    
    ?>
    Obwohl ich oben die Bedingung habe, dass der Submit Button gedrückt werden muss, wird dennoch schon alleine beim aktualisieren des Browsers (IE) ein weiterer eintrag gesetzt mit den Daten des vorigen....der explorer gibt mir auch ne warnung an: "Die bereits eingegebenen Informationen müssen erneut gesendet werden, um die Website wieder anzuzeigen, Wenn ich auf "Wiederholen" klicke verdoppelt sich der letzte eintrag. Aber das kann ich nicht jedem Besucher zumuten, dass er so eine Meldung bekommt und außerdem sind dann etliche Einträge doppelt drin wenn irgendwer aktualisiert...was hab ich falsch gemacht im Script?

    Liebe Grüße
    Stefan

  2. #2
    TP-Moderator Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.666
    Falsch hast Du nichts gemacht. Wenn Du ein Formular an eine Seite schickst und dann die Seite aktualisierst, ist es für den Browser so als ob Du das Formular nochmal hin schickst.

    Du könntest Dein sql (und alles was an Verarbeitung stattfinden soll) in eine "Zwischenseite" packen und wenn die Verarbeitung durch ist, mittels
    Code:
    header("Location:http://www.deineseite.com");exit;
    den Besucher an die ursprüngliche Seite weiterleiten. Der Browser hat dann Dein Formular nicht mehr mit der Ergebnisseite verknüpft.

    So viel erstmal nur grob beschrieben, weil ich Deine Kenntnisse nicht kenne. Also vielleicht reicht Dir das ja schon
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

  3. #3
    TP-Moderator Avatar von maxi89
    Registriert seit
    Nov 2004
    Ort
    Mulpe an der Tunke
    Beiträge
    2.584
    Und mal wieder von dem alten Nörgler (mir), der immer und überall Sicherheitsbedenken äußert:
    Tippe doch mal als Kommentar exakt folgendes ein:

    BITTE NICHT IM PRODUKTIVEN SYSTEM MIT DER ORIGINALEN DATENBANK MACHEN - NUR MIT EINER KOPIE!
    Code:
    toller Kommentar'; TRUNCATE TABLE `news_comments`; SELECT '1' AS 'a
    Wenn da nicht die magic_quotes von PHP greifen, sollte danach die Tabelle ratzekahl leer sein
    Warum ist das so? Nun, es handelt sich dabei um eine sogenannte SQL-Injection - es werden also von außen durch beliebige Personen SQL-Befehle eingeschleust, die du so i.d.R. nicht ausführen willst.
    In deiner Variable $sql steht nämlich jetzt drin:

    INSERT INTO news_comments SET name = 'dings', datum = '2011-07-25 19:17:23', comment = 'toller Kommentar'; TRUNCATE TABLE `news_comments`; SELECT '1' AS 'a'

    Da mit dem Semikolon mehrere hintereinander geschriebene SQL-Befehle getrennt werden, wird also erst der Kommentar eingefügt, dann durch mein Apostroph und das Semikolon die SQL-Anfrage beendet und dann der Befehl zum Ausleeren der Tabelle hinterhergeschoben.
    Die "magischen Zeichen" wie Apostroph, Anführungszeichen etc... müssen escaped werden. Dabei wird vor jedes magische Zeichen ein Backslash ( \ ) gestellt der MySQL signalisiert, dass er dieses Zeichen doch bitte ignorieren soll. Es kann dir sonst auch ungewollt passieren, weil jemand (nichts böses ahnend) ein Apostroph in seinem Kommentar verwendet, ohne böse Absichten zu haben. Aber dennoch ist dein SQL-String dann kaputt...

    Um das zu verhindern gibt es die PHP-Funktion "mysql_real_escape_string()", die eben jene kritischen Zeichen escaped - siehe hier: http://de.php.net/manual/de/function...ape-string.php
    Durch die solltest du die im SQL-String verwendeten POST-Variablen (oder generell: Immer alle Variblen von außen) durchlaufen lassen, bevor du sie verwendest.


    Uuuuuuund noch etwas fällt mir auf: Du benutzt die Datenbankfelder "name" und "comment". Das sind aber auch Befehle von MySQL...
    Es kann dir u.U. passieren, dass MySQL merkwürdige Syntaxfehler wirft - eben weil es fälschlicherweise einen Befehl erkennt. Um das zu verhindern, kannst du die Backticks nutzen ( ` ).
    Einfach alle Datenbank-, Tabellen- und Feldnamen in diese Backticks stecken und du kannst dir sicher sein, dass MySQL das niemals falsch interpretieren wird.
    Beispiel: SELECT `Name`, `Select`, `Feld3` FROM `Tabelle` WHERE `Name` = "dingenskirchen";

    Das war es von meiner Front, dem ewigen Dauernörgler :P

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Problem mit submit()
    Von freddymc im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 12.11.2005, 23:17
  2. Formularübergabe - zwei frames ändern
    Von JMS im Forum Traum-Dynamik
    Antworten: 2
    Letzter Beitrag: 08.11.2003, 14:32
  3. Fehler in Formularübergabe???
    Von Master_T2 im Forum Traum-Dynamik
    Antworten: 2
    Letzter Beitrag: 29.10.2003, 15:33
  4. submit Problem in isset funktion
    Von Paco im Forum Traum-Dynamik
    Antworten: 22
    Letzter Beitrag: 19.05.2003, 23:08
  5. Wie erstelle ich eine Formularübergabe mit Dreamweaver?
    Von sky im Forum Dreamweaver & andere Webeditoren
    Antworten: 3
    Letzter Beitrag: 18.03.2002, 08:39

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

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