Burner: über HTML Formular daten in SQL Datenbank

Hallo zusammen,

ich habe ein Problem, vielleicht kann mir einer helfen.
Habe eine SQL Datenbank auf dem localhost eingerichtet, die auch einwandfrei funktioniert.
Da ich ein kleines Netzwerk im Hause habe, wollte ich ein Intranet erstellen.

Apache, PHP und MySQL sind korrekt installiert.

Soweit so gut, jetzt zu meinem Problem.
Habe ein HTML-Formular erstellt und möchte über diesen Daten in die SQL-Datenbank reinschreiben. Wenn ich das Formular ausfülle und diese in die Datenbank eintragen möchte, werden keine Daten übermittelt. Bekomme aber die Meldung das

"Verbindung mit der Datenbank besteht!!"
"Werte eingetragen!!"

Dies ist aber nicht so, das einzigste was passiert ist, daß eine leere Zeile ohne Daten hinzugefügt wurde.
Hier mein Code, vielleicht habe ich was übersehen.

Danke und Gruß
Burner

HTML Formular:
<H2>Eintrag in die Datenbank </H2>
<FORM action="listing-08b.php" method="get">
<B></B><BR>

Titel:   <BR><INPUT TYPE=text   NAME="$titel" size="50" ><BR>
Typ:<BR><INPUT TYPE=text NAME="$typ" size="10" ><BR>
Kategorie:  <BR><INPUT TYPE=text NAME="$kategorie" size="50" ><BR>
Language:  <BR><INPUT TYPE=text NAME="$language" size="50" ><BR>
<P>
<INPUT TYPE=submit value="Eintrag"><BR>

PHP Script:
<?

function verbinden( )
   {
   $Server = mysql_connect( "localhost", "", "" ) ;

if( mysql_select_db( "test" ) )
      {
      echo  "Verbindung mit der Datenbank besteht!!<BR><BR>" ;
      return 1 ;
      }
    else
      {
      echo  "Fehler<BR>Keine Verbindung mit der Datenbank!!<BR>Abbruch!!" ;
      return 0 ;
      }
   }

function einfuegen( $SQL )
   {
   $erg = mysql_query( $SQL ) ;
   if( $erg )
         {
         echo  "Werte eingetragen!!<BR><BR>" ;
         return 1 ;
         }
       else
         {
         echo  "Fehler<BR>".mysql_error()."<BR>Abbruch!!" ;
         return 0 ;
         }
   }

if( !verbinden() ) return 0 ;

$SQL = "INSERT INTO dvd values( '', '$titel', '$typ' , '$kategorie', '$language' )"  ;

einfuegen( $SQL )  ;

mysql_close( ) ;
?>

  1. $SQL = "INSERT INTO dvd values( '', '$titel', '$typ' , '$kategorie', '$language' )"  ;

    Wie man ein INSERT Statemnet korrekt formuliert findest Du hier:
    http://dev.mysql.com/doc/mysql/de/HANDLER.html

    Viel Spaß
    TomIRL

    1. yo,

      $SQL = "INSERT INTO dvd values( '', '$titel', '$typ' , '$kategorie', '$language' )"  ;

      Wie man ein INSERT Statemnet korrekt formuliert findest Du hier:
      http://dev.mysql.com/doc/mysql/de/HANDLER.html

      und was genau soll nun an dem INSERT statement falsch sein, ausser dass die variablen eventuell nicht den gewünschten inhalt besitzen ?

      Ilja

  2. hi,

    $SQL = "INSERT INTO dvd values( '', '$titel', '$typ' , '$kategorie', '$language' )"  ;

    hast du dir den hier erzeugten querystring mal zur kontrolle ausgeben lassen? du wärst sicher überrascht ... er enthält vermutlich nicht das, was du erwartest.

    und nach diesem erstaunen ist jetzt der zeitpunkt gekommen, sich über die PHP-konfigurationsoption register_globals zu informieren, was diese für auswirkungen hat, wenn sie auf 'off' steht (und das ist default).

    und hier noch ein bisschen lesestoff, der dir sicher weiterhelfen wird:
    http://www.php.net/manual/de/language.variables.predefined.php
    http://tut.php-q.net/formulare.html
    http://php-faq.de/ch/ch-webvariablen.html

    gruß,
    wahsaga

    --
    Rest in peace, Dimebag!
    #
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  3. Hallo Burner,

    "Verbindung mit der Datenbank besteht!!"
    "Werte eingetragen!!"

    Hier mein Code, vielleicht habe ich was übersehen.

    HTML Formular:
    <H2>Eintrag in die Datenbank </H2>
    <FORM action="listing-08b.php" method="get">

    Sieht nach einem Tutorial oder einem Buch aus.
    Falls diese Annahme stimmt, so ist es älteren
    Datums und geht davon aus, dass in php.ini

    register_globals = on

    steht. Dies ist schon seit längerer Zeit nicht
    mehr der Fall, siehe http://www.php.net/manual/de/security.globals.php.

    <B></B><BR>

    Titel:   <BR><INPUT TYPE=text   NAME="$titel" size="50" ><BR>
    Typ:<BR><INPUT TYPE=text NAME="$typ" size="10" ><BR>
    Kategorie:  <BR><INPUT TYPE=text NAME="$kategorie" size="50" ><BR>
    Language:  <BR><INPUT TYPE=text NAME="$language" size="50" ><BR>

    ...

    if( !verbinden() ) return 0 ;

    $SQL = "INSERT INTO dvd values( '', '$titel', '$typ' , '$kategorie', '$language' )"  ;

    Die Variablen $titel, $typ, $kategorie werden jetzt angelegt und sind leer.
    Du solltest statt dessen mit $POST[$titel], ... auf die Inhalte Deiner Eingabefelder zugreifen.

    Benutzereingaben darfst Du nicht ungeprüft übernehmen, schau' Dir bitte das Kapitel SQL-Injection http://www.php.net/manual/de/security.database.sql-injection.php im PHP-Handbuch an.

    Ein

    echo $SQL;

    an dieser Stelle kann nicht schaden. Dann siehst Du, wie Deine SQL-Anweisung aussieht.

    einfuegen( $SQL )  ;

    Freundliche Grüsse,

    Vinzenz