Wo liegt der Fehler?
Christian
- php
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%"> </td>
</tr>
<tr>
<td width="18%"> </td>
<td width="29%"> </td>
<td width="15%"> </td>
<td width="34%"> </td>
</tr>
<tr>
<td width="18%"><b>Person:</b></td>
<td width="29%"> </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%"> </td>
<td width="34%"> </td>
</tr>
<tr>
<td width="18%"> </td>
<td width="29%"> </td>
<td width="15%"> </td>
<td width="34%"> </td>
</tr>
<tr>
<td width="18%"><b>Telefonnummern:</b></td>
<td width="29%"> </td>
<td width="15%"><b>Blog:</b></td>
<td width="34%"> </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%"> </td>
<td width="29%"> </td>
</tr>
<tr>
<td width="18%"><b>Straße</b></td>
<td width="29%"> </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
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
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
Hallo MudGuard.
{
}Das ist ziemlich nichtssagend.
YMMD!
Einen schönen Sonntag noch.
Gruß, Mathias
Erstmal Danke.
aber schlauer bin ich jetzt nicht wirklich. Irgendwie hast du nur Fragen auf meine Fragen gestellt.
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
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
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
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
Ich habe das so gemacht, wie es auf dem Lern-Video beschrieben wurde.
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
Grundlage für Zitat #711.
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
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