Satori: PHP-Post Script erstellt 2 Einträge in der MySQL-Datenbank

Hi Leute!!

Ich versuche mich seit gestern das erste mal mit MySQL.
Jetzt habe ich ein Problem.
Ich habe versucht eine Art "Blog" zu schrieben. Das Problem ist nur, dass das PHP-Post Script zwei Einträge in der Datenbank anlegt.
Einmal den Text, den man geschrieben hat und dann noch einen leeren Eintrag nur mit Datum und Zeit.
Auf meinem Rechner hat aber alles Funktioniert.

Hier ist der Quelltext:

index.php

<?php  
  
define('Host','');  
define('Name','');  
define('Pass','');  
define('DB','');  
  
mysql_connect(Host,Name,Pass) or die("Konnte Datenbankverbindung nicht herstellen");  
mysql_select_db(DB) or die("Konnte Datenbank konnte nicht gefunden werden");  
  
echo ("<center><a href=neu.php >Schreib, was dich bewegt!! Schreib in unser Blog und die ganze Welt kann es lesen!!!</a></center><br><table bgcolor=#FFFBE2 ><tr><td>  
<br><center><table width=70% bgcolor=#FC00CC><tr><td><b><center>- - Schreib etwas und die ganze Welt kann es lesen - -</center></b></td></tr></table></center><br><br>");  
$sql = "SELECT * FROM news ORDER BY dat DESC";  
$result = mysql_query($sql);  
while($row = mysql_fetch_assoc($result)) {  
echo "<table bgcolor=#E2FFF1><tr><td><br /><center><table width=90% bgcolor=#FFFFFF><tr><td>Geschrieben von: <b>".$row['aut']."</b><br />Wann Gepostet: <b>".$row['dat']."</b><br />Inhalt: <br /><b>".$row['inh']."</b><br /><br /></center></table><br /><b>::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::</b><br></td></tr></table><br /><br />\n";  
}  
echo ("</td></tr></table>");  
?>

neu.php

<html>  
<h2>Schreib was dich bewegt !! BETA-Version</h2>  
<form action="save.php" method="POST">  
Autor <input type="text" name="au" value=""/>  
<br />  
<textarea name="in" rows="20" cols="100"></textarea>  
<br />  
<input type="submit" name="submit" value="Eintragen" />  
<input type="reset" name="submit" value="Zurücksetzen" />  
</form>  
  
</html>

save.php

<?php  
  
define('Host','');  
define('Name','');  
define('Pass','');  
define('DB','');  
  
mysql_connect(Host,Name,Pass) or die("Konnte Datenbankverbindung nicht herstellen");  
mysql_select_db(DB) or die("Konnte Datenbank konnte nicht gefunden werden");  
  
$sql = "INSERT INTO news(aut, inh, dat) Values('{$_POST['au']}', '{$_POST['in']}', NOW())";  
mysql_query($sql);  
  
header("location: index.php");  
?>

Blog

Satori

  1. Mahlzeit Satori,

    mysql_connect(Host,Name,Pass) or die("Konnte Datenbankverbindung nicht herstellen");
    mysql_select_db(DB) or die("Konnte Datenbank konnte nicht gefunden werden");

    Zitat 1282

    echo ("<center><a href=neu.php >Schreib, was dich bewegt!! Schreib in unser Blog und die ganze Welt kann es lesen!!!</a></center><br><table bgcolor=#FFFBE2 ><tr><td>

    Du möchtest Dich GANZ DRINGEND mit dem EVA-Prinzip vertraut machen!

    neu.php

    <html>

    <h2>Schreib was dich bewegt !! BETA-Version</h2>
    <form action="save.php" method="POST">
    Autor <input type="text" name="au" value=""/>
    <br />
    <textarea name="in" rows="20" cols="100"></textarea>
    <br />
    <input type="submit" name="submit" value="Eintragen" />
    <input type="reset" name="submit" value="Zurücksetzen" />
    </form>

    </html>

    
    >   
    >   
    > save.php  
      
    Du möchtest GANZ DRINGEND die Grundlagen von [Affenformularen](http://de.wikipedia.org/wiki/Affenformular) kennenlernen!  
      
      
    
    > $sql = "INSERT INTO news(aut, inh, dat) Values('{$\_POST['au']}', '{$\_POST['in']}', NOW())";  
    > mysql\_query($sql);  
      
    Es ist eine GANZ SCHLECHTE Idee, Daten von irgendwoher einfach so ungeprüft in einer SQL-Abfrage zu verwursten - merke: ALL INPUT IS EVIL!  
      
    Du weißt nicht, wer was für einen Müll in Deine Formulare eingibt - geschweige denn, dass Du weißt, ob Deine Formulare überhaupt benutzt werden, um Deiner Datenbank [Fieslichkeiten](http://de.wikipedia.org/wiki/SQL_Injection) unterzujubeln.  
      
    Du möchtest Dich also GANZ DRINGEND darüber informieren, wie Daten für MySQL [aufbereitet](http://de.php.net/mysql_real_escape_string) werden!  
      
      
    MfG,  
    EKKi  
    
    -- 
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    
    1. Hi EKKi

      Ich will kein Blog schreiben ... Also das heißt ich will mich nur an MySQL versuchen und dann den Adminbereich unserer Community so machen.
      Der Blog ist nur eine "Übung" und da hab ich das Affenformular weggelassen.

      Jetzt habe ich aber immernoch das Problem, dass mein Script noch einen leeren Eintrag erstellt.

      Satori

      1. Mahlzeit Satori,

        Ich will kein Blog schreiben ... Also das heißt ich will mich nur an MySQL versuchen und dann den Adminbereich unserer Community so machen.

        Das mag sein - es ist aber trotzdem sinnvoller (auch und gerade im Hinblick darauf, dass Du gerade erst anfängst, Dich mit PHP/MySQL zu befassen), es gleich "richtig" zu machen ... so sparst Du Dir viel Ärger und Zeit.

        Der Blog ist nur eine "Übung" und da hab ich das Affenformular weggelassen.

        Dann übe das ganze doch mal mit einem solchen - glaub mir: es macht vieles erheblich einfacher.

        Jetzt habe ich aber immernoch das Problem, dass mein Script noch einen leeren Eintrag erstellt.

        Tja.

        Ohne aussagekräftige Fehlermeldungen wirst Du da auch nicht weiterkommen. Ebensowenig wie wir. Also lass Dein PHP doch mal gesprächig werden: error_reporting(), mysql_error(), ...

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. echo $begrüßung;

          Jetzt habe ich aber immernoch das Problem, dass mein Script noch einen leeren Eintrag erstellt.
          Tja.
          Ohne aussagekräftige Fehlermeldungen wirst Du da auch nicht weiterkommen. Ebensowenig wie wir. Also lass Dein PHP doch mal gesprächig werden: error_reporting(), mysql_error(), ...

          Die Ursache wird kein Fehler MySQLs sein, sondern eher einer im Ablauf des Scripts. Das error_reporting auf E_ALL bringt Hinweise auf Zugriffe auf nicht vorhandene Variablen. Damit findet man das Problem auch nicht direkt. Helfen können hier Kontrollausgaben, die man an strategisch wichtigen Stellen im Script einfügt, um zu sehen, welcher Weg gegangen wird. Dann kommt der Vergleich von Wunsch und Wirklichkeit bei Variableninhalten an die Reihe. Irgendein Stück Code führt dazu, dass ein mysql_query() mit INSERT doppelt ausgeführt wird.

          echo "$verabschiedung $name";