2011-09-15 34 views
13

Ad esempio, sto utilizzando una variabile $ _POST per inserire dati in un DB. Appena prima di questa query ho alcuni test e se sono veri, voglio regolare il valore $ _POST (nascosto).

Es.

if($baby_dragon_eats_children){ 
    $_POST['hidden_value'] = "grapes"; 
} 

Can $ _POST [ 'hidden_value'] essere assegnato un nuovo valore e poi essere passato a un'altra funzione da $ _POST ed essere in grado di accedere al nuovo $ _POST [ 'hidden_value']?

Grazie


$ _POST [ 'consolidate_answers']

  • SE si assegna un valore di $ _POST si dovrebbe documento è molto chiaro in quanto non è comune, né considerato "la migliore pratica.
  • SE avete estensioni di PHP come Suhosin Patch ... potrebbe bloccare tali azioni ..
  • Maniglia i propri array, non dipendono da $ _POST!
  • Se è necessario il, creare una copia di $ _POST e lavorarci.

risposta

23

È possibile assegnare valori a $_POST, ma in questo caso è necessario documentarlo in modo molto chiaro con commenti sia sul punto di assegnazione che sul successivo punto di accesso. La manipolazione manuale di $_POST può rompere le aspettative future dei programmatori (incluse le tue) di ciò che è nel superglobale e da dove proviene.

Ci possono essere altre alternative, come:

$my_post = $_POST; 
$my_post['hidden_value'] = 12345; 

// In a function: 
function func() { 
    // Emulate a superglobal 
    echo $GLOBALS['mypost']['hidden_value']; 
} 
+0

Ho solo la sensazione che se uso una variabile separata per questi valori è inutile avere il mio input nascosto in primo luogo? Questa è considerata una cattiva pratica? Probabilmente dovrei rimuovere il valore nascosto e assegnare semplicemente una variabile ai risultati di questi test e usarla. – KRB

+0

@KRB con il metodo sopra, non stai usando un valore separato - stai sostituendo '$ _POST' con' $ my_post' per un uso futuro. Considererei una cattiva pratica manipolare '$ _POST', anche se ammetto di averlo fatto di tanto in tanto. Finché commentate le vostre intenzioni molto chiaramente, probabilmente è ok. –

+0

Commentare le tue intenzioni non aiuterà davvero altri posti nel codice che hanno bisogno della variabile $ _POST, che può o non può essere scritta da lui (o lui stesso potrebbe un giorno non ricordare le sue terribili manipolazioni globali). –

11

Can $ _POST [ 'hidden_value'] assegnare un nuovo valore e poi essere passato a un'altra funzione da $ _POST ed essere in grado di accedere al nuovo $ _POST ['hidden_value']?

Può in PHP normale.

Tuttavia, le estensioni come lo Suhosin Patch potrebbero bloccarlo.

Inoltre, è sbagliato in generale. $_POST è progettato per contenere i dati POST in arrivo, nient'altro. Non dovrebbe essere modificato IMO.

Un modo migliore per andare sarebbe quello di recuperare tutti i dati che si pianifica di inserire nel database in un array e fare invece le manipolazioni in tale array.

5

È possibile, funzionerà, ma non farlo.

Creare una copia di $_POST, eseguire i test su quello e modificarlo. Per esempio.

$postdata = $_POST; 
if ($postdata['somevalue'] != 'someothervalue') $postdata['newvalue'] = 'anothervalue'; 
// ... 

Se si modificano le variabili automaticamente creato da PHP, probabilmente tornerà a ritorcersi contro di te più tardi, quando la variabile non detiene i dati che si aspetta.

1

Trova un'alternativa!

La variabile $ _POST ha una responsabilità distinta. Non abusare del suo globalismo.

Direi che non abusano del globalismo in alcun modo, anche se ciò significa cambiare il design che hai (o avere in mente).

Ma se si sceglie di non farlo, quindi prendere in considerazione la creazione di un registro globale dedicato solo per le vostre esigenze. Non manipolare i built-in del linguaggio.

+0

Il mio professore direbbe sempre: "Le variabili globali puzzano!". Sembra un buon uomo, grazie per il consiglio !! – KRB

Problemi correlati