Datensätze schreiben, VALUES fehler?!



  • Hallo ich habe hier folgendes Problem das in

    mysql_query('
      INSERT INTO Daten
          (Name, Alt)
      VALUES
          ($HTTP_POST_VARS["name"], $HTTP_POST_VARS["alt"])');
    

    der Name "name" und das Alter "alt" nicht von den Textfeldern übergeben werden... vielleicht habe ich auch nur einen falschen Lösungsweg...
    Ich will die Datensätze nicht mit phpMyAdmin schreiben sondern halt per script, ich überprüfe lediglich nur per phpMyAdmin ob Datensätze angelegt worden sind...

    <body>
    
      <form action = "mysql_connect.php" method = "post">
    
      <input type = "text" name = "name"/>
      <input type = "text" name = "alt"/>
      <input type = "submit"/>
    
    <?php
    
      define('MYSQL_HOST', 'localhost');
      define('MYSQL_USER', 'root');
      define('MYSQL_DATABASE', 'db_ernie');
    
      $dblink = @mysql_connect(MYSQL_HOST, MYSQL_USER) OR die(mysql_error());
      mysql_select_db(MYSQL_DATABASE, $dblink) OR die(mysql_error());
    
      mysql_query('CREATE TABLE Daten
      ( ID INT AUTO_INCREMENT PRIMARY KEY,
        Name TEXT,
        Alt INT
      )'); 
    
      mysql_query('
      INSERT INTO Daten
          (Name, Alt)
      VALUES
          ($HTTP_POST_VARS["name"], $HTTP_POST_VARS["alt"])');
    
    ?>
    


  • 1. Verwende statt $HTTP_POST_VARS $_POST[]
    2. Du solltest den Table nicht in diesem Script erstellen. Was wenn das Script 2 Mal abgesendet wird.

    3. Name als Text zu definieren ist etwas OVERHEAD. Nimm varchar.
    4. Willst du in die Datenbank eine STRING schreiben muss der Wert in einfachen Hochkommas übergeben werden. Bei INT geht es mit und ohne Hochkomma. Besserist aber immerHochkommas anzugeben da sich ja z.B. das Feld alt von INT auf varchar ändern kann.

    INSERT INTO Daten (Name, Alt) VALUES('Dein Name','24');



  • EDIT:
    danke erstmal für deine schnelle antwort
    hat alles geklappt



  • du solltest aber vermeiden,
    vom Benutzer abgesendete Daten ungeprüft an die Datenbank zu übergeben.
    (Im Besten Fall gibts nur nen Fehler, wenn der Benutzer z. B. Anführungszeichen eingibt. Wobei es aber duchaus nich unwahrscheinlich ist, dass sich eine Eingabe formulieren läßt, die dir die Datenbank löscht...)

    schau dich mal nach "mysql_escape_string()" um.


Log in to reply