PHP e HTML

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.

Quale codifica/decodifica devo usare quando passo un valore attraverso un form/URL?

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 &amp;. 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.

Sto cercando di usare un tag <input type="image">, ma le variabili $foo.x e $foo.y non sono disponibili. $_GET['foo.x'] non esiste nemmeno. Dove sono?

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" />
Quando l'utente clicca da qualche parte sull'immagine, il form corrispondente sarà trasmesso al server con due variabili aggiuntive: foo.x e foo.y.

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.

Come creo array in un <form> HTML?

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[]" />
Nota le parentesi quadre dopo il nome della variabile, è questo che lo rende un array. Puoi raggruppare gli elementi in array diversi assegnando lo stesso nome a elementi diversi:
<input name="MyArray[]" />
<input name="MyArray[]" />
<input name="MyOtherArray[]" />
<input name="MyOtherArray[]" />
Questo produce due array, MyArray e MyOtherArray, che vengono inviati allo script PHP. È anche possibile assegnare chiavi specifiche ai tuoi array:
<input name="AnotherArray[]" />
<input name="AnotherArray[]" />
<input name="AnotherArray[email]" />
<input name="AnotherArray[phone]" />
L'array AnotherArray conterrà ora le chiavi 0, 1, email e 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.

Come ottengo tutti i risultati da un tag HTML select multiple?

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">
Ogni opzione selezionata arriverà al gestore dell'azione come:
var=option1
var=option2
var=option3
      
Ogni opzione sovrascriverà il contenuto della precedente variabile $var. La soluzione è usare la funzionalità PHP "array da elemento form". Dovrebbe essere usato quanto segue:
<select name="var[]" multiple="yes">
Questo dice a PHP di trattare $var come un array e ogni assegnazione di un valore a var[] aggiunge un elemento all'array. Il primo elemento diventa $var[0], il successivo $var[1], ecc. La funzione count() può essere usata per determinare quante opzioni sono state selezionate, e la funzione sort() può essere usata per ordinare l'array delle opzioni se necessario.

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[]'];
      

Come posso passare una variabile da Javascript a PHP?

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();
}
?>

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top