Christian: Wo liegt der Fehler?

Hallo zusammen,

ich probiere gerade etwas aus und möchte mir somit PHP für den Hausgebrauch aneignen. Leider bekomme ich folgende Fehlermeldung:

Konnte den Datensatz nicht eintragen: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

Das hier ist mein Code:

<?php

// Verbindung zur Datenbank aufbauen
    include("function.inc.php");
    mysqlconnect();

// Zum Eintragen neuer Datensätze in die Datenbank

if ( isset ($_REQUEST["do"]) &&  $_REQUEST["do"] ==  "insert" )
    {
        // Die Seite hat sich selbst aufgerufen

// Pflichtfeldkontrolle

$error_msg = "";

if ( $_REQUEST["form_verein"] == "")
  {
   $error_msg = "Bitte gwähle einen Verein aus.<br>";
  }

$error_msg = "";

if ( $_REQUEST["form_name"] == "")
  {
   $error_msg . "Bitte gebe einen Nachnamen an.<br>";
  }

$error_msg = "";

if ( $_REQUEST["form_vorname"] == "")
  {
   $error_msg .= "Bitte gebe einen Vornamen an.<br>";
  }

if ( $error_msg  == "")

if ( $_REQUEST["form_strasse"] == "")
  {
   $error_msg .= "Bitte gebe eine Straße an.<br>";
  }

if ( $_REQUEST["form_plz"] == "")
  {
   $error_msg .= "Bitte gebe eine Postleitzahl an.<br>";
  }

if ( $_REQUEST["form_ort"] == "")
  {
   $error_msg .= "Bitte gebe einen Ort an.<br>";
  }

if ( $_REQUEST["form_festnetz"] == "")
  {
   $error_msg .= "Bitte gebe eine Festnetznummer an.<br>";
  }

if ( $_REQUEST["form_mobil"] == "")
  {
   $error_msg .= "Bitte gebe eine Handynummer an.<br>";
  }

if ( $_REQUEST["form_gebdat"] == "")
  {
   $error_msg .= "Bitte gebe ein Geburtstag an.<br>";
  }

if ( $_REQUEST["form_icq"] == "")
  {
   $error_msg .= "Bitte gebe eine ICQ Nummer an.<br>";
  }

if ( $_REQUEST["form_alterklasse"] == "")
  {
   $error_msg .= "Bitte gebe eine Alterklasse an.<br>";
  }

if ( $_REQUEST["form_email"] == "")
  {
   $error_msg .= "Bitte gebe eine E-Mail-Adresse an.<br>";
  }

if ( $_REQUEST["form_blog"] == "")
  {
   $error_msg .= "Bitte trage einen Text ein an.<br>";
  }
  {
 }
    }
// Datenbank Zugriff

mysqlconnect();

// INSERT
    $query  =   "INSERT INTO adressbuch_eintraege (name, vorname, strasse, plz, ort, telefon, mobil, gebdat, verein, icq, alterklasse, blog, email ) VALUES ( ";
    $query  .=  " ' " . $_REQUEST["form_name"] . "',";
    $query  .=  " ' " . $_REQUEST["form_vorname"] . "',";
    $query  .=  " ' " . $_REQUEST["form_strasse"] . "',";
    $query  .=  " ' " . $_REQUEST["form_plz"] . "',";
    $query  .=  " ' " . $_REQUEST["form_ort"] . "',";
    $query  .=  " ' " . $_REQUEST["form_telefon"] . "',";
    $query  .=  " ' " . $_REQUEST["form_mobil"] . "',";
    $query  .=  " ' " . $_REQUEST["form_gebdat"] . "',";
    $query  .=  " ' " . $_REQUEST["form_verein"] . "',";
    $query  .=  " ' " . $_REQUEST["form_icq"] . "',";
    $query  .=  " ' " . $_REQUEST["form_alterklasse"] . "',";
    $query  .=  " ' " . $_REQUEST["form_blog"] . "',";
    $query  .=  " ' " . $_REQUEST["form_email"] . "',";
    $query  .=  " ) ";

// In die Datenbank eintragen
    $result =   mysql_query( $query );

if ( ! $result)
    {
        die ("Konnte den Datensatz nicht eintragen: " . mysql_error()   );
    }
?>

<html>

<head>
<meta http-equiv="Content-Language" content="de">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Verein</title>
</head>

<body bgcolor="#CCCCCC" text="#CF5248">

<form
   action="<?php echo $_REQUEST["PHP_Self"]; ?>" method="POST">
 <?php
  if ( $error_msg!= "")
  {
   echo $error_msg;

}

?>
 <div align="center">
  <table border="0" width="90%" cellspacing="6" cellpadding="0" bgcolor="#E7E7E2">
   <tr>
    <td width="18%"><b>Verein:</b></td>
    <td width="29%"><input type="text" name="form_verein" size="35"></td>
    <td width="15%"><b>Zusatzdaten</b></td>
    <td width="34%">&nbsp;</td>
   </tr>
   <tr>
    <td width="18%">&nbsp;</td>
    <td width="29%">&nbsp;</td>
    <td width="15%">&nbsp;</td>
    <td width="34%">&nbsp;</td>
   </tr>
   <tr>
    <td width="18%"><b>Person:</b></td>
    <td width="29%">&nbsp;</td>
    <td width="15%"><b>E-Mail:</b></td>
    <td width="34%"><input type="text" name="form_email" size="35"></td>
   </tr>
   <tr>
    <td width="18%"><b>Name:</b></td>
    <td width="29%"><input type="text" name="form_name" size="35"></td>
    <td width="15%"><b>ICQ</b></td>
    <td width="34%"><input type="text" name="form_icq" size="35"></td>
   </tr>
   <tr>
    <td width="18%"><b>Vorname:</b></td>
    <td width="29%">
    <input type="text" name="form_vorname" size="35"></td>
    <td width="15%"><b>Alterklasse:</b></td>
    <td width="34%">
    <input type="text" name="form_alterklasse" size="35"></td>
   </tr>
   <tr>
    <td width="18%"><b>Geb. Datum:</b></td>
    <td width="29%"><input type="text" name="form_geb" size="35"></td>
    <td width="15%">&nbsp;</td>
    <td width="34%">&nbsp;</td>
   </tr>
   <tr>
    <td width="18%">&nbsp;</td>
    <td width="29%">&nbsp;</td>
    <td width="15%">&nbsp;</td>
    <td width="34%">&nbsp;</td>
   </tr>
   <tr>
    <td width="18%"><b>Telefonnummern:</b></td>
    <td width="29%">&nbsp;</td>
    <td width="15%"><b>Blog:</b></td>
    <td width="34%">&nbsp;</td>
   </tr>
   <tr>
    <td width="18%"><b>Festnetz</b></td>
    <td width="29%">
    <input type="text" name="form_festnetz" size="35"></td>
    <td colspan="2" rowspan="7">
    <textarea rows="12" name="form_blog" cols="46"></textarea></td>
   </tr>
   <tr>
    <td width="18%"><b>Mobil:</b></td>
    <td width="29%"><input type="text" name="form_mobil" size="35"></td>
   </tr>
   <tr>
    <td width="18%">&nbsp;</td>
    <td width="29%">&nbsp;</td>
   </tr>
   <tr>
    <td width="18%"><b>Straße</b></td>
    <td width="29%">&nbsp;</td>
   </tr>
   <tr>
    <td width="18%" valign="top"><b>Straße</b></td>
    <td width="29%">
    <textarea rows="3" name="form_strasse" cols="29"></textarea></td>
   </tr>
   <tr>
    <td width="18%"><b>PLZ:</b></td>
    <td width="29%"><input type="text" name="form_plz" size="35"></td>
   </tr>
   <tr>
    <td width="18%"><b>Ort:</b></td>
    <td width="29%"><input type="text" name="form_ort" size="35"></td>
   </tr>
  </table>
 </div>
 <input type="HIDDEN" name="do" value="insert">
 <p><input type="submit" value="Absenden" name="B1"><input type="reset" value="Zurücksetzen" name="B2"></p>
</form>

</body>

</html>

Vielen Dank

  1. hi,

    ich probiere gerade etwas aus und möchte mir somit PHP für den Hausgebrauch aneignen. Leider bekomme ich folgende Fehlermeldung:

    Konnte den Datensatz nicht eintragen: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

    Das bezieht sich ganz offensichtlich auf die Query, die du an die Datenbank absetzt.
    In solchen Fällen wäre es in Zukunft schön, wenn du dich auf das Posten des relevanten Codes beschränkst - und uns nicht mit deinem kompletten Script erschlägst.

    Lass dir die Query, nachdem du sie zusammengesetzt hast, zur Kontrolle ausgeben - und kontrolliere die Syntax.

    Und informiere dich dringend über das Stichwort SQL Injection, und was du dagegen zu unternehmen hast.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hi,

    Konnte den Datensatz nicht eintragen: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

    Ah, deswegen also Tonnen irrelevantes PHP / HTML ...

    $error_msg = "Bitte gwähle einen Verein aus.<br>";

    Sadist! Was hat Dir denn der Verein getan? Geht es zufällig um diesen Verein? ;-)

    $error_msg . "Bitte gebe einen Nachnamen an.<br>";

    Das Ergebnis der Stringverknüpfung wird weggeworfen.
    Imperativ Singular von "geben" ist "gib".

    $error_msg .= "Bitte gebe ein Geburtstag an.<br>";

    das Geburtstag?

    $error_msg .= "Bitte trage einen Text ein an.<br>";

    ein an?

    {
    }

    Das ist ziemlich nichtssagend.

    $query  .=  " ' " . $_REQUEST["form_email"] . "',";
        $query  .=  " ) ";

    Aufgrund der Fehlermeldung kann der Fehler nur unmittelbar vor der letzten Klammer liegen.
    Da ist ein Zeichen, das da nicht hingehört ...

    <html>

    und noch zig Zeilen irrelevanter Code ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo MudGuard.

      {
      }

      Das ist ziemlich nichtssagend.

      YMMD!

      Einen schönen Sonntag noch.

      Gruß, Mathias

      --
      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
      debian/rules
    2. Erstmal Danke.

      aber schlauer bin ich jetzt nicht wirklich. Irgendwie hast du nur Fragen auf meine Fragen gestellt.

      1. Hi,

        aber schlauer bin ich jetzt nicht wirklich. Irgendwie hast du nur Fragen auf meine Fragen gestellt.

        dass Du nicht schlauer bist, liegt daran, dass Du auf diese Fragen noch nicht geantwortet hast.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. hi,

        aber schlauer bin ich jetzt nicht wirklich. Irgendwie hast du nur Fragen auf meine Fragen gestellt.

        Natürlich, damit du selber darüber Nachdenken kannst - die beste Art von Hilfe, die du bekommen kannst, wenn du wirklich etwas dazulernen willst.

        "The wise man doesn't give the right answers, he poses the right questions."
           Claude Levi-Strauss

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      3. Hi,

        Erstmal Danke.

        Bitte.

        aber schlauer bin ich jetzt nicht wirklich.

        Bedauerlich.

        Irgendwie hast du nur Fragen auf meine Fragen gestellt.

        Das ist eine Lüge.
        Insbesondere an der Stelle, um die es Dir eigentlich ging, habe ich keine Frage gestellt.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  3. Hi,

    $query  .=  " ' " . $_REQUEST["form_name"] . "',";
        $query  .=  " ' " . $_REQUEST["form_vorname"] . "',";
        $query  .=  " ' " . $_REQUEST["form_strasse"] . "',";
        $query  .=  " ' " . $_REQUEST["form_plz"] . "',";
        $query  .=  " ' " . $_REQUEST["form_ort"] . "',";
        $query  .=  " ' " . $_REQUEST["form_telefon"] . "',";
        $query  .=  " ' " . $_REQUEST["form_mobil"] . "',";
        $query  .=  " ' " . $_REQUEST["form_gebdat"] . "',";
        $query  .=  " ' " . $_REQUEST["form_verein"] . "',";
        $query  .=  " ' " . $_REQUEST["form_icq"] . "',";
        $query  .=  " ' " . $_REQUEST["form_alterklasse"] . "',";
        $query  .=  " ' " . $_REQUEST["form_blog"] . "',";
        $query  .=  " ' " . $_REQUEST["form_email"] . "',";

    Nachtrag:
    Warum fügst Du eigentlich allen Werten am Anfang noch ein Leerzeichen hinzu?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Ich habe das so gemacht, wie es auf dem Lern-Video beschrieben wurde.

      1. Ich habe das so gemacht, wie es auf dem Lern-Video beschrieben wurde.

        Dann sollte man den Hersteller dieses Videos mal gründlich über's Knie legen. Lerne, was SQL Injection ist (ist hier schon verlinkt worden), und lerne, was man dagegen tun kann. Du baust hier eine Sicherheitslücke, auf deren Größe man selbst in Redmond neidisch werden würde.

        Alexander

    2. Hi!

      $query  .=  " ' " . $_REQUEST["form_name"] . "',";
      Warum fügst Du eigentlich allen Werten am Anfang noch ein Leerzeichen hinzu?

      Und wieso wird keiner dieser Werte irgendwie geprüft oder bereinigt?
      Man darf nie, nie, niemals Werte, die von außen kommen, ungeprüft in Abfragen einbauen.
      Dieser Code eignet sich wunderbar für einen Angriff per SQL-Injection.
      Eventuell übergebener SQL-Code müßte entfernt bzw. unschädlich gemacht werden.

      Wird mal einen Blick auf die Funktion mysql_real_escape_string().
      Das wäre schon mal ein guter Anfang.

      Schöner Gruß,
      rob

  4. Hy!

    Hast Du mittlerweile den Fehler gefunden?

    Ich vermute ihn in dieser Zeile:

    $query  .=  " ' " . $_REQUEST["form_email"] . "',";

    Das Komma am Ende ist mehr als flüssig = überflüssig, denn danach kommt ja in der nächsten Zeile die Klammer.

    Und sonst lass dir den Query mal ausgeben, damit man mal sehen kann, was dort genau steht.

    Grüße
    Marcus