Domanda

sono probabilmente di essere un po 'spessa, ma io non riesco a trovare una risposta a questo. Mi sto muovendo da un server con globali registro a uno con essendo fuori. E 'una buona cosa, ma purtroppo sono stati utilizzati per anni e anni di lavoro con globali registro essere su che ha portato in me la scrittura di codice sciatta. Ora sto cercando di sistemare le cose.

Sto cercando di riscrivere qualche vecchio codice che ha variabili variabili all'interno di $ _POST.

So che questo è un esempio stupido, ma illustra il problema che sto cercando di risolvere. Di seguito avrebbe lavorato con globali registrarsi sulla:

<?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>

Come faccio a fare questo lavoro con globali registro off? Di seguito, ovviamente, non funziona:

<?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>

Si prega di andare facile su me- So che sto probabilmente essere stupido, ma io non riesco a ottenere la mia testa intorno a questo.

È stato utile?

Soluzione

Semplice, basta $_POST[$variable]. (O $_GET o forse $_REQUEST, a seconda dei casi).

Tuttavia notare che quando si testo di output per HTML, è necessario codificare, o sarete vulnerabili al cross-site scripting-attacchi:

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

(I tipicamente definire una funzione chiamata h che fa echo htmlspecialchars, per ridurre questa quantità eccessiva di battitura.)

Altri suggerimenti

Ho alcune interazioni di forma simili ai tuoi, ma posso; t capire perché si sta utilizzando $ _POST all'interno di una forma. Che cosa si dovrebbe avere è questa:

<?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 è un array, non essere solo.

$_POST[$variable]

è possibile sbarazzarsi di tutta la pazzia $$ e semplicemente fare $_POST[$variable].

Sei sicuro che intendevi $_POST[$$variable] al contrario di $_POST[$variable]

Utilizzo delle variabili variabili direttamente da $ _SUPER globali è una cattiva idea e un rischio per la sicurezza, soprattutto se una delle vostro codice è open source. Si potrebbe modificare l'input per colpire intorno e scoprire il valore di qualsiasi variabile si lascia passare. Ad esempio, potrebbero passare in '$ _ENV' che farli un dump delle variabili di ambiente. In realtà, registrare globali è una cattiva idea in ogni modo.

Questa è contemplata @ risposta di bobince.

E, per quanto riguarda la tua domanda, è per questo che il tuo esempio non funziona con globali registro di PHP spenti. PHP è più rigorosa (per una buona ragione) con il registro di livello mondiale off, per quanto ne so, è più difficile fare il trucco variabile variabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top