SERVER-Variable wird nicht gespeichert

@DeluXe: Nein, query ist kein reserviertes Wort:

http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

Ich habe die starke Vermutung, das es sich lediglich ein Tipp-Fehler im Script handelt. Daher wollte ich ja auch den Source sehen.

Ein include() hebt die Umgebungsvariable nicht auf. Umgebungsvariablen sind im globalen Scope gültig. Man muss sie noch nicht mal als global definieren, wenn man sie innerhalb einer Funktion verwenden will. Ist irgendwie seltsam, das beschriebene Verhalten.
 
Wenn ich das richtig verstehe gehst du davon aus, dass $_SERVER['QUERY_STRING'] in der Datei config.php nicht mehr vorhanden, bzw. anders ist, als in der index.php, da diese später lediglich eingebunden wird?
Das ist leider falsch, auch in der config.php ist der QUERY_STRING der selbe, der ändert sich ja nicht. Includes arbeiten auf Dateisystem-Ebene, nicht per HTTP.

Aber mal was anderes:
Kann es sein, dass das Wort "query" ein von MySQL bereits reserviertes Wort ist?
Schreibe es einfach mal wie folgt:
PHP:
mysql_query("UPDATE users SET `query`='".$_SERVER['QUERY_STRING']."',time=NOW() WHERE id='".$_SESSION['user_id']."'");

Es ist aber wirklich so, denn ich include sofort in der ersten Zeile, direkt nach dem <? die config.php, wo eben dieser Update-Befehl dann auch auftaucht. Mich verwundert es auch irgendwie, dass es klappt, wenn ich den Befehl in der index.php schreibe. Er steht übrigens direkt nach dem include der config.php... aber ich glaube nicht, dass das der Grund ist. Ich weiß auch nicht...
 
Hast du dir die Query mal ausgeben lassen?
PHP:
echo "UPDATE users SET query='".$_SERVER['QUERY_STRING']."',time=NOW() WHERE id='".$_SESSION['user_id']."'"

Eventuell würde auch hier mysql_real_escape_string() Abhilfe schaffen.

PHP:
echo "UPDATE users SET query='".mysql_real_escape_string( $_SERVER['QUERY_STRING'] )."',time=NOW() WHERE id='".$_SESSION['user_id']."'"
 
Zurück