[PHP] vbulletin + track_vars

Hellraiser

Lt. Junior Grade
Registriert
Juli 2001
Beiträge
459
vbulletin + track_vars

Mein Problem:
anscheind werden keine track_vars angenommen,
was für mein vbbulletin bedeutet, dass die settings im admin pannel nicht übernommen werden und viele weitere sachen auch nicht.

Meine php.ini Einträge:

register_globals = On
track_vars = On

Wie erfordert sind die beiden Variablen aktiviert.

form action=options.php method=post
input type=hidden name=action value=dooptions

so lautet das forumlular (mit klammern)

im script ist folgende abfrage:

if ($HTTP_POST_VARS['action']=="dooptions") {
......
}


Als test hab ich die variable ausgegebe (echo), einmal als $action
und dann als $HTTP_POST_VARS['action'].
leider ist die variable unter $HTTP_POST_VARS['action'] leer.

Wenn noch weitere infos genötigt werden, kann ich damit dienen.
Woran liegt es ???
 
Zuerst mal eine vielleicht ganz dumme Frage. ;)
Hast du deinen Webserver nach den Änderungen in der php.ini neu gestartet?

Seit PHP 4.03 ist track_vars übrigens standardmäßig aktiviert und bei meinem 4.1.1 gibt es in der php.ini auch gar keine Möglichkeit mehr das auszuschalten. Welche Version läuft denn bei dir?

Update: Wenn das auch nicht hilft, dann setz' mal folgenden Code an den Anfang deines PHP-Scripts:
PHP:
ini_set ("track_vars","1");
Das sollte das selbe bewirken, wie track_vars in der php.ini einzuschalten...
 
Zuletzt bearbeitet:
Um ganz sicher zu gehen, dass das HTTP_*_VARS Array gar nicht mit Variablen gefüllt ist, mach bitte mal folgendes auf deiner Seite:
PHP:
var_dump( $HTTP_POST_VARS );
var_dump( $HTTP_GET_VARS );
Wenn du in deiner php.ini die Möglichkeit hast, track_vars zu verändern: Wird die Einstellung bei phpinfo() ausgegeben?
 
nein, phpinfo() gibt nichtmal eine einstellung von track_vars an! auch kein bischen von register_globals!

ich hab php nicht als modul installier, sondern als cgi-erweiterung, ich hoffe nicht, dass daran der fehler liegt.
 
doch, er scheint die variablen zu übergeben
ABER
die action varialbe, die für die scriptnavigaton verantowrtlich ist, wird NICHT als array element eingefügt!

brauchst du die Scriptausgabe der array elemente ?
 
"register_globals" steht bei mir unter phpinfo() drin, track_vars hingegen nicht, da es ja seit PHP 4.03 immer aktiviert ist. Dass bei dir beides nicht drin steht, deutet darauf hin, dass du PHP 4.04, 4.05 oder 4.06 hast, da register_globals mit 4.10 eingeführt wurde.

doch, er scheint die variablen zu übergeben
ABER
die action varialbe, die für die scriptnavigaton verantowrtlich ist, wird NICHT als array element eingefügt!

brauchst du die Scriptausgabe der array elemente ?
Wenn er deine Variable nicht mittels var_dump() anzeigt, wird uns das auch nicht weiterhelfen.

Vielleicht zeigst du uns mal dein Script. Eventuell liegt es auch daran, dass du in deinem Formular die Werte nicht in Anführungszeichen eingeschlossen hast, obwohl ich das eher weniger glaube...
 
register_globals steht doch drin, ich hab allerdings schon die neuste version.

nun
hiermit
PHP:
<?
if (!isset($HTTP_POST_VARS['p']) | $HTTP_POST_VARS['p'] == "") {
echo "<form action=$PHP_SELF method=post><input type=hidden name=p value=step2><input type=submit></form>";
} elseif ($HTTP_POST_VARS['p'] == "step2") {
echo $HTTP_POST_VARS['p'];
} ?>
funktioniert es wunderbar, beim andren script....
ich werde es nochmal analysieren. schonmal beruhigend zu wissen, dass die variablen doch funktionieren.
 
Dein Script funktioniert bei mir, nach dem Senden wird "step2" ausgegeben. Trotzdem gibt es einen kleinen Fehler in Zeile 2, richtig müsste diese lauten:
PHP:
if (!isset($HTTP_POST_VARS['p']) || $HTTP_POST_VARS['p'] == "") {
Beachte die beiden || anstatt dem einen, bei mir hat es wie gesagt trotzdem funktioniert.

Was passiert denn, wenn du die Zeile 5 durch die neuen Arrays in PHP 4.1.x ersetzt?
PHP:
echo $_POST['p'];
Als weitere Möglichkeit kannst du mal die einfachen Anführungszeichen in um das "p" in dem Array herum weglassen, obwohl es daran eigentlich gar nicht liegen kann (bei mir funktioniert beides).

Update: Woran lag es denn jetzt? :confused_alt:
 
warum zwei |


ich glaub das hat doch mit den typen der beiden bedingungsvariablen zu tun, oder ?

weiss aber nicht mehr genau inwiefern.







dann passiert das selbe, bei php hat man eben viel flexibilität
 
war ein wenig komplizierter,
bei einigen dateien war nach dem ?> noch ein leerzeichen, das hat infolgedessen zu einigen fehlern geführt.
 
Original erstellt von Hellraiser
warum zwei |
Du willst doch prüfen, ob die Variable entweder nicht existiert oder leer (Das könnte man übrigens auch mit empty() lösen) ist. Die Oder-Anweisung besteht in PHP nunmal aus zwei '|'. Das Gegenteil, die Und-Anwesiung setzt sich aus zwei & zusammen.

Als Alternative kann man auch dirket "OR" bzw. "AND" schreiben, da kommt das selbe bei raus. ;)

Nachlesen kannst du das ganze hier: http://www.php.net/manual/de/language.operators.logical.php
 
thx,
und das mit empty() gefällt mir eigentlicht auch besser,

kennst dich ziemlich gut aus in php, weisst du ob es besser wäre variablen zu deklarieren, wie bei c++ ?
 
weisst du ob es besser wäre variablen zu deklarieren, wie bei c++ ?
Soweit ich weiß bringt das keinen Geschwindigkeitsvorteil. Es kann allenfalls dabei helfen, den Code etwas übersichtlicher zu halten.

Wenn man gleichzeitig "error_reporting" in der php.ini auf den Wert "15" stellt, bekommt man eine Fehlermeldung, wenn man eine nicht deklarierte Variable benutzt. Das kann dann dabei behilflich sein, nicht aus Versehen (durch einen Tippfehler) auf eine nicht deklarierte Variable zuzugreifen.
 
jo, durch das error_reporting bin ich auf diese idee gekommen, weil ich einst mal so eine fehlermeldung bekommen habe
schätze aber, dass es sich absolut nicht lohnt.
 
Zurück
Oben