PHP/MySQL: Datensatz wird nicht eingefügt (bin Anfänger)

Kyrodust

Erfahrenes Mitglied
Hi Leute!

Ich habe mal versucht ein kleines Feedbackformular im Stil eines Gästebuches zu schreiben! Nun zur Beschreibung meines Problems:

Zur Datenbank verbinden: OK
Datenbank wählen: OK
Datensatz einfügen: Problem--

Ich habe das Script zu Testzwecken mal so geschrieben, dass ich genau sehen kann, wo das Script nicht mehr weitermacht. Hier ist ein Link zum Formular:

Link zur Page

Und hier ist noch der PHP Code, den Ihr nicht sehen könnt:


PHP:
  <? 
        $mysql_user='lordalucard'; 
      $mysql_pw='********'; 
      $mysql_host='localhost'; 
      $mysql_db='lordalucard'; 

        if ($_GET['name']!="" AND $_GET['email']!="" AND $_GET['homepage']!="" AND $_GET['meinung']!="") 
        { 
         $name1=$_GET['name']; 
         $email1=$_GET['email']; 
         $homepage1=$_GET['homepage']; 
         $meinung1=$_GET['meinung']; 
         if($res_id=@mysql_connect($mysql_host,$mysql_user,$mysql_pw)) 
           { 
            mysql_select_db($mysql_db); 
              if (mysql_query("INSERT INTO guestbook VALUE($name1,$email1,$homepage1,$meinung1)")) 
            { 
                echo "Datensatz wurde eingefügt!"; 
            } 
            else 
            { 
                die ("Datensatz wurde nicht eingefügt!"); 
            } 
           } 
           else 
           { 
               die("Es ist ein Fehler aufgetreten"); 
           } 
        } 
  ?>


Das Passwort habe ich zensiert, aber beim Connecten treten sowieso keine Fehler auf.

Ich bitte um Hilfe.

cu Alucard
 
Zuletzt bearbeitet:
PHP:
if (mysql_query("INSERT INTO guestbook VALUE($name1,$email1,$homepage1,$meinung1)"))
Da fehlt ein Leerzeichen zwischen VALUE und der öffnenden Klammer.
 
&hellip;beim Connecten treten sowieso keine Fehler auf.
Woher willst du das wissen, wenn du bei der zuständigen Funktion die Fehlermeldungen unterdrückst?


Was dein Problem angeht, musst du Zeichenketten im MySQL-Ausdruck auch als solche angeben:
PHP:
<?php
  [...]
  $query = "
	INSERT INTO
	        `guestbook`
	  SET
	        `name` = '".mysql_escape_string($name1)."',
	        `email` = '".mysql_escape_string($email1)."',
	        `homepage` = '".mysql_escape_string($homepage1)."',
	        `meinung` = '".mysql_escape_string($meinung1)."'
	";
  if(!$res = mysql_query($query)) {
    echo '<p><strong>MySQL Error <tt>'.mysql_errno().'</tt>:</strong> '.htmlspecialchars(mysql_error()).'<pre>'.$query.'</pre></p>';
    exit;
  } 
  [...]
?>
Und zusammen mit der PHP Funktion mysql_escape_string werden auch alle „gefährlichen“ Zeichen maskiert.
 
Hallo,

also erst einmal würde ich die ganze connect Sache in eine extra Datei legen und diese hier includen. Zum einen spart das Platz und Du kannst auf anderen Seitn auchauf den connect zugreifen ohne es jedesmal neu schreiben zu müssen.

Zum Problem:

Entweder:
PHP:
mysql_query("INSERT INTO guestbook (name,email,www) VALUES ('$name1','$email1','homepage1')")

Oder:
PHP:
mysql_query("INSERT INTO guestbook SET  name='$name1',email='$email1',www='homepage1')")

Das Problem bei der oberen Variante ist, daß man sich zu 100% an der Tabellenstruktur halten muss. Sonst kann es zu Problemen führen.

Besser ist die untere Variante, da man hinter SET festlegt was wo eingetragen werden soll. Dabei spielt hier die Reihenfolge keine Rolle und man muss sich nicht zu 100% an die Tabellenstruktur halten.
 
stimmt gumbo,

warst etwas schneller wie ich. :o)
Das escapen sit sehr wichtig, da ansonsten böse buben die DB zerstören könnten oder andere schlimme Sachen mit machen können.

Nur ich prüfe die Eingaben vorher extra und etwas gründlicher und erst wenn diese ok sind, dann kommen sie an die DB Abfrage heran.
 
Sry ich hab noch eine Frage: Wie kann ich bei MySQL einen Autowert (so heißt es jedenfalls bei MsAccess) für eine ID vergeben? Es soll mit 1 beginnen und bei jedem Datensatz um eine Nummer erhöhen.

Hoffe, dass Ihr mir helfen könnt!

Thx Alucard
 
Wo willst du denn autowert auswählen?
Auch bei Verwendung von PHPmyAdmin in deutsch hat der Spaltentyp den Zusatz "auto_increment". Das Datenfeld für diesen Zusatz muss ein numerischen Datentyp wie z.B. int haben.
 
Zurück