Finn: Gästebuch

Hallo.

Ich habe ein Problem mit dem untenstehenden Code
und zwar wird nichts in die Datenbank-Tabelle geschrieben und auch nichts ausgegeben.

Wär nettwenn mir jmd. hilft.

  
<?php error_reporting(E_ALL);  
ini_set('display_errors', 1); ?>  
<html>  
<head>  
<title></title>  
</head>  
<body>  
<form action = "<?php echo $_SERVER['PHP_SELF']; ?>" method = "POST">  
<table>  
<tr><td>Name:<br></td>  
<td><input type = "text" name = "name"></td></tr>  
<tr><td>E-Mail-Adresse:<br></td>  
<td><input type = "text" name = "mail"></td></tr>  
<tr><td>Gästebucheintrag:<br></td>  
<td><textarea name = "text" cols = "50" rows = "10"></textarea></td></tr>  
<tr><td><input type = "submit" value = "Eintragen" name = "submit"></td></tr>  
</table>  
</form>  
  
<?php  
         $server = "localhost";  
         $user = "**********";  
         $pass = "********";  
  
$verbindung = mysql_connect($server, $user, $pass)  
//...oder auch nicht^^:  
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");  
                //Datenbank auswahl   (finnjunker = Datenbank, guestbook = Tabelle):  
mysql_select_db("finnjunker")  
or die ("Datenbank konnte nicht ausgewählt werden");  
  
  
if($_POST['submit'] == TRUE)  
{  
  
$name = $_POST['name'];  
$mail = $_POST['mail'];  
$text = $_POST['text'];  
  
$einzutragen = "INSERT INTO gastbuch ('name', 'e-mail', 'eintrag') VALUES ('$name', '$mail', '$text')";  
$eintragen = mysql_query($einzutragen);  
}  
$ausgabe = "SELECT * FROM gastbuch";  
$ausgabe_query = mysql_query($ausgabe);  
while ($ausgeben = mysql_fetch_array($ausgabe_query))  
{  
  
  
//Ausgabe der Daten:  
echo "<pre>";  
print_r ($ausgeben);  
echo "</pre>";  
  
  
echo "<span style = 'background-color: #00EEFF;'> Name: ";  
echo $ausgeben['name'];  
echo "<br><br>";  
  
echo "E-Mail: ";  
echo $ausgeben['e-mail'];  
echo "<br><br>";  
  
echo "Eintrag: ";  
echo $ausgeben['eintrag'];  
echo " <br></span>";  
  
  
}  
?>  
  
</body>  
</html>  
  

  1. $einzutragen = "INSERT INTO gastbuch ('name', 'e-mail', 'eintrag') VALUES ('$name', '$mail', '$text')";
    $eintragen = mysql_query($einzutragen);

    Bau Dir mal eine Fehlerkontrolle für diese zwei Zeilen auf!

    Und bitte lies in diesem Thread noch gaaaanz lange mit, denn da werden noch ganz viele andere Mängel gerügt werden, die Du in deiner Programmlogik hast.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. $einzutragen = "INSERT INTO gastbuch ('name', 'e-mail', 'eintrag') VALUES ('$name', '$mail', '$text')";
      $eintragen = mysql_query($einzutragen);

      Bau Dir mal eine Fehlerkontrolle für diese zwei Zeilen auf!

      Und bitte lies in diesem Thread noch gaaaanz lange mit, denn da werden noch ganz viele andere Mängel gerügt werden, die Du in deiner Programmlogik hast.

      Besonders hinsichtlich Sicherheit und Kontextwechseln.

    2. $einzutragen = "INSERT INTO gastbuch ('name', 'e-mail', 'eintrag') VALUES ('$name', '$mail', '$text')";
      $eintragen = mysql_query($einzutragen);

      Bau Dir mal eine Fehlerkontrolle für diese zwei Zeilen auf!

      Hab das jz so gemacht:

        
      $name = $_POST['name'];  
      $mail = $_POST['mail'];  
      $text = $_POST['text'];  
        
      $einzutragen = "INSERT INTO gastbuch (name, e-mail, eintrag) VALUES ('$name', '$mail', '$text')";  
      $eintragen = mysql_query($einzutragen);  
        
      if ($eintragen)  
      {  
          echo "Ihr Eintrag wurde gespeichert.";  
      }  
      else  
      {  
          echo "Fehler beim Schreiben in die Datenbank!";  
      }  
      
      

      und es kommt immer "Fehler beim Schreiben in die Datenbank".
      warum?!

      1. warum?!

        Das sagt dir die Fehlerbehandlungs-Funktion von MySQL - unter PHP erreichst du diese über mysql_error().

      2. Hallo,

        Hab das jz so gemacht:

        $name = $_POST['name'];

        $mail = $_POST['mail'];
        $text = $_POST['text'];

          
        warum? Wozu kopierst du diese drei Werte um, bevor du sie verwendest?  
          
        `INSERT INTO gastbuch (name, e-mail, eintrag) VALUES (...)`{:.language-sql}  
          
        Darf ein Spaltenname denn einen Bindestrich enthalten? Mal schnell im [Handbuch](http://dev.mysql.com/doc/refman/5.6/en/identifiers.html) nachschlagen ... ja, darf er, aber dann muss er gequotet werden.  
          
        Ciao,  
         Martin  
        
        -- 
        Disziplin: Teppichböden wiederfinden, wenn man sie verlegt hat.  
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        
        1. Einen hab ich noch ...

          $name = $_POST['name'];

          $mail = $_POST['mail'];
          $text = $_POST['text'];

          
          > warum? Wozu kopierst du diese drei Werte um, bevor du sie verwendest?  
            
          und was noch viel schlimmer ist: Wieso gibst du sie so unbekümmert an SQL weiter, ohne sie zu überprüfen und/oder [kontextgerecht zu maskieren](http://de.php.net/manual/en/function.mysql-real-escape-string.php)? Noch nie vom kleinen [Bobby Tables](http://bobby-tables.com/) gehört?  
            
          Ciao,  
           Martin  
          
          -- 
          Wenn ein Räuber eine deutsche Amtsstube überfällt, welchen Satz kann er sich dann sparen?  
          "Keine Bewegung!"  
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          
          1. Noch nie vom kleinen Bobby Tables gehört?

            Nein hab ich noch nicht...

            beschäftige mich ca. 1/2Jahr mit php erst

            deswegen ziemlich unerfahren.

      3. Hello,

        $einzutragen = "INSERT INTO gastbuch ('name', 'e-mail', 'eintrag') VALUES ('$name', '$mail', '$text')";
        $eintragen = mysql_query($einzutragen);

        Bau Dir mal eine Fehlerkontrolle für diese zwei Zeilen auf!

        Bei der Spaltenliste sehe ich schon zwei Fehler.

        Die Values müssen auf jeden Fall vorher für die SQL-Textschnittstelle vorbehandelt werden, also "escaped". Sonst baust Du Dir eine Sicherheitslücke.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Dein Passwort und User bestehen nur aus Sternchen. So kann das bestimmt nicht funktionieren.

    Gruß
    der alles sieht
    T-Rex

    1. Hello,

      Dein Passwort und User bestehen nur aus Sternchen. So kann das bestimmt nicht funktionieren.

      *ROTFL*

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  3. Lieber Finn,

    und zwar wird nichts in die Datenbank-Tabelle geschrieben und auch nichts ausgegeben.

    wozu braucht ein GB eine Datenbank? Es geht auch anders.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
  4. Habs jz raus danke für eure antworten...

    es lag am namen der spalte e-mail
    die heißt jz email^^

    1. Habs jz raus danke für eure antworten...

      es lag am namen der spalte e-mail

      Das war offensichtlich.

      die heißt jz email^^

      Das ist ein Workaround, keine Lösung.

      1. Hello,

        Habs jz raus danke für eure antworten...

        es lag am namen der spalte e-mail

        Das war offensichtlich.

        die heißt jz email^^

        Das ist ein Workaround, keine Lösung.

        Stimmt! Aber mit dieser Aussage kann Finn vermutlich nicht viel anfangen.

        Er könnte sich mal
        http://dev.mysql.com/doc/refman/5.1/de/legal-names.html
        durchlesen. Dann könnte er hinterher wissen, was noch verkehrt war in seiner ersten Fassung.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hallo,

          Habs jz raus danke für eure antworten...
          es lag am namen der spalte e-mail
          die heißt jz email^^
          Das ist ein Workaround, keine Lösung.
          Stimmt! Aber mit dieser Aussage kann Finn vermutlich nicht viel anfangen.

          doch, sollte er eigentlich.

          Er könnte sich mal
          http://dev.mysql.com/doc/refman/5.1/de/legal-names.html
          durchlesen. Dann könnte er hinterher wissen, was noch verkehrt war in seiner ersten Fassung.

          Das habe ich ihm gestern schon vorgehalten.

          Ciao,
           Martin

          --
          Nein, es ist nicht wahr, dass bei der Post Beamte schneller befördert werden als Pakete.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  5. http://php.net/manual/de/book.mysqli.php

    mysqli für prepared statements verwenden.