[PHP][SQL] syntax error

HighTec

Lieutenant
Registriert
Sep. 2006
Beiträge
761
beim ausführen meiner Dazei beko0mm ich immer folgende Fehlermeldung:

Code:
You have an error in your SQL syntax near '= 14-16' at line 1

(das '14-16' ist in der get variablen day gespeichert)

die zeile worauf verwiesen wird ist folgende

PHP:
mysql_query("UPDATE sendeplan SET $_GET[day] = $_POST[moderator] WHERE = $_GET[time]") OR die(mysql_error());

könnt ihr mir da irgendwie helfen???

Würde mich über Antwort freuen.

Greetz

HighTec
 
Du hast keine Spalte angegeben, die den Wert von $_GET[time] haben soll (nach dem WHERE)
Komisch ist nur, dass der error auf das vorher bezogen ist...

mfg
 
Jau jetzt zeigt es mir wohl keine Fehler mehr an aber scheint trotzdem nichts in die Datenbank zu ändern.
Hier mal der gesante quellcode:

PHP:
<?php
include ('config.php');
$connection = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
if(isset($_POST['action'])){
echo $_GET[time];
echo $_POST[moderator];
echo $_GET[day];
$do = mysql_query("UPDATE sendeplan SET $_GET[day] = '$_POST[moderator]' WHERE Uhrzeit = $_GET[time]") OR die(mysql_error());

}else{
$read = mysql_query("SELECT * FROM moderatoren ORDER BY id") OR die(mysql_error());
?>
<html>
<body>
<form action="change.php?day=<?=$_GET[day]?>&time=<?=$_GET[time]?>" method="post">
<select name="moderator" size=1>
<?php
while ($result = mysql_fetch_array($read)){
$name = $result['name'];
?>
<option value="<?=$name?>"><?=$name?></option>
<?php
}
?>
</select>
<input type="submit" value="Ändern" name="submit">
<input type="hidden" name="action" value="action">
</form>
</body>
</html>
<?php
}
?>
 
Setze mal im SQL-Query das $_GET[time] in einfache Anführungszeichen, so wie du es auch mit dem $_POST[moderator] gemacht hast.
 
Jau danke es funktioniert
 
Zur Ergänzung: IN Zeichenketten ersetzt PHP nur skalare Variablen. Demnach parst PHP auch nicht mehr die eckige Indexklammer. Die Autoglobals $_GET, $_POST, $_COOKIE, $_ENV, $_SERVER usw. sind aber alle durchweg assoziative Arrays, also spezielle "Vektoren".
Und Vektoren sind ja bekanntermaßen keine Skalare.

PHP:
echo "statischer Text ".$_GET["vector"]." und hier steht dann noch eine $skalare_variable";

Ach ja, was mich auch noch stören würde:

PHP:
$_GET[day]

Alle Bezeichner, die ohne runde Klammern geschrieben werden und kein Variablenzeichen ($) vor sich tragen, sind PHP-Makros. Solange sie nicht mit define gesetzt werden, geben die Makros ihren eigenen Namen zurück.

Hast Du jetzt vorher irgendwo ein define("day","Tag"), so stünde da für PHP jetzt:

PHP:
$_GET["Tag"]

Sowas macht Scripte noch verwundbarer, falls Angreifer VORHER Code einschleusen können (durch ungeprüfte Includes, etc.)

Also solltest Du statt $_GET[day]

PHP:
$_GET["day"]

schreiben, damit "day" auch wirklich als statische Zeichenkette interpretiert wird und nicht als Makro, wenn es per define gesetzt wird.
 
Zuletzt bearbeitet:
Zurück
Oben