PHP e HTML interagiscono molto: PHP può generare HTML, e HTML può passare informazioni a PHP. Prima di leggere queste FAQ, è importante imparare come recuperare variabili da fonti esterne. La pagina del manuale su questo argomento include anche molti esempi.
Ci sono diverse fasi per le quali la codifica è importante. Supponendo che tu abbia una string $data, che contiene la stringa che vuoi passare in modo non codificato, queste sono le fasi rilevanti:
Interpretazione HTML. Per specificare una stringa arbitraria, devi includerla tra virgolette doppie e usare htmlspecialchars() sull'intero valore.
URL: Un URL è composto da diverse parti. Se vuoi che i tuoi dati siano interpretati come un singolo elemento, devi codificarli con urlencode().
Example #1 Un elemento nascosto di un form HTML
<?php
echo '<input type="hidden" value="' . htmlspecialchars($data) . '" />'."\n";
?>Nota: È sbagliato usare urlencode() su $data, perché è responsabilità del browser fare urlencode() sui dati. Tutti i browser popolari lo fanno correttamente. Nota che questo avverrà indipendentemente dal metodo (cioè, GET o POST). Lo noterai solo nel caso di richieste GET però, perché le richieste POST sono solitamente nascoste.
Example #2 Dati da modificare dall'utente
<?php
echo "<textarea name='mydata'>\n";
echo htmlspecialchars($data)."\n";
echo "</textarea>";
?>Nota: I dati sono mostrati nel browser come previsto, perché il browser interpreterà i simboli HTML con escape. All'invio, sia tramite GET che POST, i dati saranno codificati URL dal browser per il trasferimento, e decodificati direttamente da PHP. Quindi alla fine, non hai bisogno di fare alcuna codifica/decodifica URL tu stesso, tutto viene gestito automaticamente.
Example #3 In un URL
<?php
echo '<a href="' . htmlspecialchars("/nextpage.php?stage=23&data=" .
urlencode($data)) . '">'."\n";
?>Nota: In effetti stai simulando una richiesta HTML GET, quindi è necessario fare manualmente urlencode() sui dati.
Nota: Devi usare htmlspecialchars() sull'intero URL, perché l'URL appare come valore di un attributo HTML. In questo caso, il browser prima rimuoverà l'escape htmlspecialchars() dal valore, e poi passerà l'URL. PHP capirà l'URL correttamente, perché hai usato urlencode() sui dati. Noterai che il
&nell'URL è sostituito da&. Sebbene la maggior parte dei browser sia in grado di interpretare il carattere se omesso, non è sempre possibile. Quindi anche se il tuo URL non è dinamico, devi usare htmlspecialchars() sull'URL.
Quando si invia un form, è possibile usare un'immagine invece del pulsante di invio standard con un tag come:
<input type="image" src="image.gif" name="foo" />
Poiché foo.x e foo.y sarebbero nomi di variabili non validi in PHP, vengono automaticamente convertiti in foo_x e foo_y. Cioè, i punti sono sostituiti da underscore. Quindi, accederesti a queste variabili come qualsiasi altra descritta nella sezione sul recupero di variabili da fonti esterne. Per esempio, $_GET['foo_x'].
Nota:
Gli spazi nei nomi delle variabili di richiesta sono convertiti in underscore.
Per ottenere il risultato del tuo <form> inviato come array al tuo script PHP nomina gli elementi <input>, <select> o <textarea> in questo modo:
<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" />
<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyOtherArray[]" /> <input name="MyOtherArray[]" />
<input name="AnotherArray[]" /> <input name="AnotherArray[]" /> <input name="AnotherArray[email]" /> <input name="AnotherArray[phone]" />
Nota:
Specificare le chiavi dell'array è opzionale in HTML. Se non specifichi le chiavi, l'array viene riempito nell'ordine in cui gli elementi appaiono nel form. Il nostro primo esempio conterrà le chiavi 0, 1, 2 e 3.
Vedi anche Funzioni Array e Variabili da Fonti Esterne.
Il tag select multiple in un costrutto HTML permette agli utenti di selezionare più elementi da una lista. Questi elementi vengono poi passati al gestore dell'azione per il form. Il problema è che vengono tutti passati con lo stesso nome del widget. Cioè
<select name="var" multiple="yes">
var=option1
var=option2
var=option3
<select name="var[]" multiple="yes">
Nota che se stai usando JavaScript le []
nel nome dell'elemento potrebbero causare problemi quando provi a
riferirti all'elemento per nome. Usa invece l'ID numerico dell'elemento form,
o racchiudi il nome della variabile tra apici singoli e
usalo come indice dell'array elements, per esempio:
variable = document.forms[0].elements['var[]'];
Poiché Javascript è (solitamente) una tecnologia lato client, e PHP è (solitamente) una tecnologia lato server, e poiché HTTP è un protocollo "stateless", i due linguaggi non possono condividere direttamente variabili.
È, tuttavia, possibile passare variabili tra i due. Un modo per farlo è generare codice Javascript con PHP, e far aggiornare il browser, passando variabili specifiche allo script PHP. L'esempio sotto mostra precisamente come fare questo -- permette al codice PHP di catturare la larghezza e l'altezza dello schermo, qualcosa che normalmente è possibile solo lato client.
Example #4 Generare Javascript con PHP
<?php
if (isset($_GET['width']) AND isset($_GET['height'])) {
// output the geometry variables
echo "Screen width is: ". $_GET['width'] ."<br />\n";
echo "Screen height is: ". $_GET['height'] ."<br />\n";
} else {
// pass the geometry variables
// (preserve the original query string
// -- post variables will need to handled differently)
echo "<script language='javascript'>\n";
echo " location.href=\"{$_SERVER['SCRIPT_NAME']}?{$_SERVER['QUERY_STRING']}"
. "&width=\" + screen.width + \"&height=\" + screen.height;\n";
echo "</script>\n";
exit();
}
?>