<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/faq.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'faq.html.php',
    1 => 'PHP e HTML',
    2 => 'PHP e HTML',
  ),
  'up' => 
  array (
    0 => 'faq.php',
    1 => 'FAQ',
  ),
  'prev' => 
  array (
    0 => 'faq.passwords.php',
    1 => 'Hashing delle Password',
  ),
  'next' => 
  array (
    0 => 'faq.com.php',
    1 => 'PHP e COM',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'faq/html.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="faq.html" class="chapter">
  <h1 class="title">PHP e HTML</h1>

  

  <p class="para">
   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 <a href="language.variables.external.php" class="link">
   variabili da fonti esterne</a>. La pagina del manuale su
   questo argomento include anche molti esempi.
  </p>

  <div class="qandaset"><ol class="qandaset_questions"><li><a href="#faq.html.encoding">
     
      Quale codifica/decodifica devo usare quando passo un valore attraverso un form/URL?
     
    </a></li><li><a href="#faq.html.form-image">
     
      Sto cercando di usare un tag &lt;input type=&quot;image&quot;&gt;, ma
      le variabili $foo.x e $foo.y
      non sono disponibili. $_GET[&#039;foo.x&#039;] non esiste
      nemmeno. Dove sono?
     
    </a></li><li><a href="#faq.html.arrays">
     Come creo array in un &lt;form&gt; HTML?
    </a></li><li><a href="#faq.html.select-multiple">
     
      Come ottengo tutti i risultati da un tag HTML select multiple?
     
    </a></li><li><a href="#faq.html.javascript-variable">
     
      Come posso passare una variabile da Javascript a PHP?
     
    </a></li></ol></div>
   <dl class="qandaentry" id="faq.html.encoding">
    <dt><strong>
     
      Quale codifica/decodifica devo usare quando passo un valore attraverso un form/URL?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Ci sono diverse fasi per le quali la codifica è importante. Supponendo che
      tu abbia una <span class="type"><a href="language.types.string.php" class="type string">string</a></span> <var class="varname">$data</var>, che contiene
      la stringa che vuoi passare in modo non codificato, queste sono le
      fasi rilevanti:
      <ul class="itemizedlist">
       <li class="listitem">
        <p class="para">
         Interpretazione HTML. Per specificare una stringa arbitraria,
         <em>devi</em> includerla tra virgolette doppie e
         usare <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> sull&#039;intero valore.
        </p>
       </li>
       <li class="listitem">
        <p class="para">
         URL: Un URL è composto da diverse parti. Se vuoi che i tuoi dati siano
         interpretati come un singolo elemento, <em>devi</em> codificarli con
         <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span>.
        </p>
       </li>
      </ul>
     </p>
     <p class="para">
      <div class="example" id="example-1">
       <p><strong>Example #1 Un elemento nascosto di un form HTML</strong></p>
        <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />    </span><span style="color: #007700">echo </span><span style="color: #DD0000">'&lt;input type="hidden" value="' </span><span style="color: #007700">. </span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">) . </span><span style="color: #DD0000">'" /&gt;'</span><span style="color: #007700">.</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

      </div>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <span class="simpara">
        È sbagliato usare <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span> su
        <var class="varname">$data</var>, perché è responsabilità del browser
        fare <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span> 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.
       </span>
      </p></blockquote>
      <div class="example" id="example-2">
       <p><strong>Example #2 Dati da modificare dall&#039;utente</strong></p>
        <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />    </span><span style="color: #007700">echo </span><span style="color: #DD0000">"&lt;textarea name='mydata'&gt;\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">).</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #DD0000">"&lt;/textarea&gt;"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

      </div>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <span class="simpara">
        I dati sono mostrati nel browser come previsto, perché il browser
        interpreterà i simboli HTML con escape.
       </span>
       <span class="simpara">
        All&#039;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.
       </span>
      </p></blockquote>
      <div class="example" id="example-3">
       <p><strong>Example #3 In un URL</strong></p>
        <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />    </span><span style="color: #007700">echo </span><span style="color: #DD0000">'&lt;a href="' </span><span style="color: #007700">. </span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #DD0000">"/nextpage.php?stage=23&amp;data=" </span><span style="color: #007700">.<br />        </span><span style="color: #0000BB">urlencode</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">)) . </span><span style="color: #DD0000">'"&gt;'</span><span style="color: #007700">.</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
        </div>

      </div>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <span class="simpara">
        In effetti stai simulando una richiesta HTML GET, quindi è necessario
        fare manualmente <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span> sui dati.
       </span>
      </p></blockquote>
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <span class="simpara">
        Devi usare <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> sull&#039;intero URL, perché l&#039;URL
        appare come valore di un attributo HTML. In questo caso, il browser
        prima rimuoverà l&#039;escape <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> dal valore, e poi passerà
        l&#039;URL. PHP capirà l&#039;URL correttamente, perché hai
        usato <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span> sui dati.
       </span>
       <span class="simpara">
        Noterai che il <code class="literal">&amp;</code> nell&#039;URL è sostituito
        da <code class="literal">&amp;amp;</code>. 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, <em>devi</em> usare
        <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> sull&#039;URL.
       </span>
      </p></blockquote>
     </p>
     
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.form-image">
    <dt><strong>
     
      Sto cercando di usare un tag &lt;input type=&quot;image&quot;&gt;, ma
      le variabili <var class="varname">$foo.x</var> e <var class="varname">$foo.y</var>
      non sono disponibili. <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET['foo.x']</a></var> non esiste
      nemmeno. Dove sono?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Quando si invia un form, è possibile usare un&#039;immagine invece del
      pulsante di invio standard con un tag come:
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input type=&quot;image&quot; src=&quot;image.gif&quot; name=&quot;foo&quot; /&gt;</pre>
</div>
      </div>

      Quando l&#039;utente clicca da qualche parte sull&#039;immagine, il form
      corrispondente sarà trasmesso al server con due variabili aggiuntive:
      <var class="varname">foo.x</var> e <var class="varname">foo.y</var>.
     </p>
     <p class="para">
      Poiché <var class="varname">foo.x</var> e <var class="varname">foo.y</var>
      sarebbero nomi di variabili non validi in PHP, vengono automaticamente convertiti in
      <var class="varname">foo_x</var> e <var class="varname">foo_y</var>. Cioè, i
      punti sono sostituiti da underscore. Quindi, accederesti a queste variabili
      come qualsiasi altra descritta nella sezione sul recupero di
      <a href="language.variables.external.php" class="link">variabili da fonti
      esterne</a>. Per esempio, <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET['foo_x']</a></var>.
      <blockquote class="note"><p><strong class="note">Nota</strong>: 
       <p class="para">
         Gli spazi nei nomi delle variabili di richiesta sono convertiti in underscore.
       </p>
      </p></blockquote>
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.arrays">
    <dt><strong>
     Come creo array in un &lt;form&gt; HTML?
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Per ottenere il risultato del tuo &lt;form&gt; inviato come
      <a href="language.types.array.php" class="link">array</a> al tuo script PHP
      nomina gli elementi &lt;input&gt;, &lt;select&gt; o &lt;textarea&gt;
      in questo modo:
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input name=&quot;MyArray[]&quot; /&gt;
&lt;input name=&quot;MyArray[]&quot; /&gt;
&lt;input name=&quot;MyArray[]&quot; /&gt;
&lt;input name=&quot;MyArray[]&quot; /&gt;</pre>
</div>
      </div>

      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:
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input name=&quot;MyArray[]&quot; /&gt;
&lt;input name=&quot;MyArray[]&quot; /&gt;
&lt;input name=&quot;MyOtherArray[]&quot; /&gt;
&lt;input name=&quot;MyOtherArray[]&quot; /&gt;</pre>
</div>
      </div>

      Questo produce due array, MyArray e MyOtherArray, che vengono inviati
      allo script PHP. È anche possibile assegnare chiavi specifiche
      ai tuoi array:
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input name=&quot;AnotherArray[]&quot; /&gt;
&lt;input name=&quot;AnotherArray[]&quot; /&gt;
&lt;input name=&quot;AnotherArray[email]&quot; /&gt;
&lt;input name=&quot;AnotherArray[phone]&quot; /&gt;</pre>
</div>
      </div>

      L&#039;array AnotherArray conterrà ora le chiavi 0, 1, email e phone.
      </p>
      <p class="para">
       <blockquote class="note"><p><strong class="note">Nota</strong>: 
        <p class="para">
         Specificare le chiavi dell&#039;array è opzionale in HTML. Se non specifichi
         le chiavi, l&#039;array viene riempito nell&#039;ordine in cui gli elementi appaiono nel
         form. Il nostro primo esempio conterrà le chiavi 0, 1, 2 e 3.
        </p>
       </p></blockquote>
      </p>
      <p class="para">
      Vedi anche
      <a href="ref.array.php" class="link">Funzioni Array</a> e
      <a href="language.variables.external.php" class="link">Variabili da Fonti
      Esterne</a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.select-multiple">
    <dt><strong>
     
      Come ottengo tutti i risultati da un tag HTML select multiple?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      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&#039;azione per il form. Il problema è che vengono
      tutti passati con lo stesso nome del widget. Cioè
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;select name=&quot;var&quot; multiple=&quot;yes&quot;&gt;</pre>
</div>
      </div>

      Ogni opzione selezionata arriverà al gestore dell&#039;azione come:
      <div class="example-contents"><div class="cdata"><pre>
var=option1
var=option2
var=option3
      </pre></div></div>

      Ogni opzione sovrascriverà il contenuto della precedente
      variabile <var class="varname">$var</var>. La soluzione è usare
      la funzionalità PHP &quot;array da elemento form&quot;. Dovrebbe essere
      usato quanto segue:
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;select name=&quot;var[]&quot; multiple=&quot;yes&quot;&gt;</pre>
</div>
      </div>

      Questo dice a PHP di trattare <var class="varname">$var</var> come un array e
      ogni assegnazione di un valore a var[] aggiunge un elemento all&#039;array.
      Il primo elemento diventa <var class="varname">$var[0]</var>, il successivo
      <var class="varname">$var[1]</var>, ecc. La funzione <span class="function"><a href="function.count.php" class="function">count()</a></span>
      può essere usata per determinare quante opzioni sono state selezionate,
      e la funzione <span class="function"><a href="function.sort.php" class="function">sort()</a></span> può essere usata per ordinare
      l&#039;array delle opzioni se necessario.
     </p>
     <p class="para">
      Nota che se stai usando JavaScript le <code class="literal">[]</code>
      nel nome dell&#039;elemento potrebbero causare problemi quando provi a
      riferirti all&#039;elemento per nome. Usa invece l&#039;ID numerico dell&#039;elemento form,
      o racchiudi il nome della variabile tra apici singoli e
      usalo come indice dell&#039;array elements, per esempio:
      <div class="example-contents"><div class="cdata"><pre>
variable = document.forms[0].elements[&#039;var[]&#039;];
      </pre></div></div>

     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.javascript-variable">
    <dt><strong>
     
      Come posso passare una variabile da Javascript a PHP?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Poiché Javascript è (solitamente) una tecnologia lato client, e
      PHP è (solitamente) una tecnologia lato server, e poiché HTTP è un
      protocollo &quot;stateless&quot;, i due linguaggi non possono condividere direttamente
      variabili.
     </p>
     <p class="para">
      È, 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&#039;esempio sotto mostra
      precisamente come fare questo -- permette al codice PHP di catturare la larghezza
      e l&#039;altezza dello schermo, qualcosa che normalmente è possibile solo
      lato client.
     </p>
     <p class="para">
      <div class="example" id="example-4">
       <p><strong>Example #4 Generare Javascript con PHP</strong></p>
       <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">if (isset(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]) AND isset(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'height'</span><span style="color: #007700">])) {<br />  </span><span style="color: #FF8000">// output the geometry variables<br />  </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Screen width is: "</span><span style="color: #007700">. </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'width'</span><span style="color: #007700">] .</span><span style="color: #DD0000">"&lt;br /&gt;\n"</span><span style="color: #007700">;<br />  echo </span><span style="color: #DD0000">"Screen height is: "</span><span style="color: #007700">. </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'height'</span><span style="color: #007700">] .</span><span style="color: #DD0000">"&lt;br /&gt;\n"</span><span style="color: #007700">;<br />} else {<br />  </span><span style="color: #FF8000">// pass the geometry variables<br />  // (preserve the original query string<br />  //   -- post variables will need to handled differently)<br /><br />  </span><span style="color: #007700">echo </span><span style="color: #DD0000">"&lt;script language='javascript'&gt;\n"</span><span style="color: #007700">;<br />  echo </span><span style="color: #DD0000">"  location.href=\"</span><span style="color: #007700">{</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'SCRIPT_NAME'</span><span style="color: #007700">]}</span><span style="color: #DD0000">?</span><span style="color: #007700">{</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'QUERY_STRING'</span><span style="color: #007700">]}</span><span style="color: #DD0000">"<br />            </span><span style="color: #007700">. </span><span style="color: #DD0000">"&amp;width=\" + screen.width + \"&amp;height=\" + screen.height;\n"</span><span style="color: #007700">;<br />  echo </span><span style="color: #DD0000">"&lt;/script&gt;\n"</span><span style="color: #007700">;<br />  exit();<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
       </div>

      </div>
     </p>
    </dd>
   </dl>

  
 </div>
<?php manual_footer($setup); ?>