Sven Rautenberg: Daten aus Formular in Datenbank

Beitrag lesen

Moin!

So, wie ich es verstanden habe, sollte das ganze so ausschauen:

Naja, so richtig PHP verstanden hast du noch nicht.

  

> <?php  
>   
>     error_reporting(E_ALL);  
>     include 'config.php';  
>     // Konfigurationsdatei laden  
>     @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR  
>         die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());  
  
// Nimm das @ vorne weg. Das unterdrückt dir die PHP-Fehlermeldung - und bei Fehlersuchen ist das ganz schlecht. Kein Skript sollte das @ benötigen, alle auftretenden Fehler sollten auf normalem Weg abgefangen und behandelt werden - wie beispielsweise ja hier mit dem die()-Befehl.  
  

>     mysql_select_db(MYSQL_DATABASE) OR  
>         die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());  
>     $sql = "SELECT  
>                 ID,  
>                 Name,  
>                 Vorname,  
>                 email  
>             FROM  
>                 News  
>             ORDER BY  
>                 ID ASC;";  
  
// Hier definierst du die Variable $sql.  
  

>     $sql="tu was;mach dies";  
  
// Hier überschreibst du die Variable $sql mit was anderem - etwas, das jedenfalls kein SQL-Befehl ist.  
  

>     $sqls = array("tu was", "mach dies", "und das");  
  
Das sind alles auch keine SQL-Befehle.  
  

>     foreach($sqls as $sql) {  
  
// Hier überschreibst du die oben schon zweimal beschriebene Variable $sql wieder, diesmal nacheinander mit allen Inhalten aus dem Array $sqls.  
  

>         $result = mysql_query($sql) OR die(mysql_error());  
  
// Und hier schickst du die ganzen Nicht-SQL-Befehle dann zur Datenbank - kann nicht funktionieren!  
  

>     }  
>   
>     $sql=CREATE TABLE News  
> (  
>     ID     INT AUTO_INCREMENT PRIMARY KEY,  
>     Name VARCHAR(30),  
>     Vorname VARCHAR(40),  
>     email VARCHAR(50)  
> );  
  
// Oh, die Variable $sql schon wieder - der Versuch, ihr einen String mit einem SQL-Befehl zuzuweisen, scheitert an den fehlenden Anführungszeichen zu Beginn und Ende - PHP müßte dir dafür eigentlich eine Fehlermeldung ausgeben.  
  
// Abgesehen davon: Neue Tabellen legt man üblicherweise EINMAL an, beispielsweise in einem Installationsskript. Ein "CREATE TABLE" in einem Skript wird deshalb nur beim ersten Mal problemlos funktionieren und danach immer die Fehlermeldung der Datenbank ausgeben, dass die Tabelle schon existiert.  
  

>     $sql=INSERT INTO News  
>     (Titel,Inhalt,Datum,Autor)  
>  VALUES  
>     ('$_NAME',  
>      '$_VORNAME',  
>      '$_EMAIL');  
  
// Und erneut wird die Variable $sql überschrieben - würde sie zumindest, wenn auch hier Anführungsstriche stünden. Das dürfte PHP auch anmeckern.  
  

>     $result = mysql_query($sql) OR die(mysql_error());  
  
// Wenigstens das Fehlerabfangen ist eingebaut - finde ich gut, da weiß man wenigstens, ob und was die Datenbank zu meckern hat.  
  

>     echo "News in der Datenbank:<br />\n";  
>     if(mysql_num_rows($result)) { // gucken ob was im Query drinsteckt  
  
// Wenn du in deiner Datenbank zuletzt ein INSERT gemacht hast, kannst du an dieser Stelle keine Datensätze abfragen und ausgeben. Dazu müßtest du den SQL-Befehl SELECT benutzen.  
  

>         while($row = mysql_fetch_assoc($result)) {  
>             echo $row['Datum']." > ".$row['Titel']."<br />\n";  
>         }  
>     } else {  
>         echo "Es sind keine News in der Datenbank vorhanden<br />\n";  
>     }  
>   
> ?>  

in config.php habe ich folgendes geschrieben:

  

> <?php  
>   
>     error_reporting(E_ALL);  
>     define('MYSQL_HOST',     'localhost');  
>     define('MYSQL_USER',     'progman');  
>     define('MYSQL_PASS',     'foobar');  
>     define('MYSQL_DATABASE', 'db24543253');  
>   
> ?>  

Die Idee, die Datenbank-Logindaten als Konstanten zu definieren, finde ich gut.

*sorry, dass ich so viel poste, aber ich weiß wirklich nicht, wo der Fehler ist*

Wie gesagt: Fehlermeldungen bräuchtest du. Die mußt du irgendwie einschalten.

- Sven Rautenberg

--
My sssignature, my preciousssss!