Frage

Ich bin zu sein wahrscheinlich ein wenig dick, aber ich kann scheinen nicht eine Antwort auf diese zu finden. Ich bin bewegt von einem Server mit Registern Globals zu einem mit ihm sein wird. Es ist eine gute Sache, aber leider habe ich zu viele Jahre der Arbeit mit Register Globals verwendet ON ist, die in mir das Schreiben schlampig Code geführt hat. Ich bin jetzt versuchen, das zu beheben.

Ich versuche, einigen alten Code neu zu schreiben, die in $ _POST Variable Variablen hat.

Ich weiß, dass dies ein dummes Beispiel, aber es zeigt das Problem, das ich zu lösen versuchen. Im Folgenden funktionieren würde, mit Registern Globals ON:

<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $$variable;?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>

Wie mache ich diese Arbeit mit Registern Globals off? Die folgende offensichtlich nicht funktioniert:

<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $_POST[$$variable];?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>

Bitte gehen Sie einfach auf me- Ich weiß, dass ich wahrscheinlich dumm bin, aber ich kann scheinen nicht meinen Kopf um diese zu erhalten.

War es hilfreich?

Lösung

Ganz einfach, $_POST[$variable]. (Oder $_GET oder vielleicht $_REQUEST, falls erforderlich.)

Beachten Sie jedoch, dass bei der Ausgabe Text zu HTML, können Sie es verschlüsseln müssen, oder Sie anfällig sein für Cross-Site-Scripting-Attacken:

<input type="text"
    name="<?php echo htmlspecialchars($variable);?>"
    value="<?php echo htmlspecialchars($_POST[$variable]);?>" 
    size="20" maxlength="150"
/>

(I definiert typischerweise eine Funktion h genannt, die echo htmlspecialchars tut, auf dieser übermäßigen Menge Tipparbeit zu sparen.)

Andere Tipps

Ich habe einige Form Interaktionen ähnlich wie bei Ihnen, aber ich kann; t verstehen, warum Sie $ _POST in einem Formular verwenden. Was sollten Sie haben, ist dies:

<?php $variable = $_POST["fullname"];?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $variable; ?>" size="20" maxlength="150" /> 
<input name="submit" type="submit" value="Go!" />
</form>

$ _ POST ist ein Array, wird es nicht nur sein.

$_POST[$variable]

Sie können von der ganzen $$ Verrücktheit loszuwerden und einfach tun $_POST[$variable].

Sie sicher gemeint Sie $_POST[$$variable] zu $_POST[$variable] Gegensatz

variable Verwendung von Variablen direkt von $ _SUPER Globals ist eine schlechte Idee und ein Sicherheitsrisiko dar, vor allem, wenn alle Ihre Code ist Open Source. Man könnte die Eingabe ändern herumzustochern und den Wert einer Variable herauszufinden, Sie lassen durch. Zum Beispiel könnten sie in ‚$ _ENV‘ übergeben, die sie einen Dump Ihrer Umgebungsvariablen erhalten würde. Tatsächlich registriert Globals ist eine schlechte Idee sowieso.

Das in @ bobince Antwort bezeichnet wird.

Und in Bezug auf Ihre Frage ist, warum Ihr Beispiel funktioniert nicht mit PHP-Register Globals ausgeschaltet. PHP ist strenger (aus gutem Grund) mit Global Register ab, afaik, ist es schwieriger, die mit variablen Trick zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top