<?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 => 'fr',
  ),
  'this' => 
  array (
    0 => 'faq.html.php',
    1 => 'PHP et HTML',
    2 => 'PHP et HTML',
  ),
  'up' => 
  array (
    0 => 'faq.php',
    1 => 'FAQ',
  ),
  'prev' => 
  array (
    0 => 'faq.passwords.php',
    1 => 'Hachage de mots de passe',
  ),
  'next' => 
  array (
    0 => 'faq.com.php',
    1 => 'PHP et COM',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    '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 et HTML</h1>

  

  <p class="para">
   PHP et HTML sont très interactifs : PHP peut générer du HTML et HTML
   peut passer des informations à PHP. Avant de lire cette <code class="literal">faq</code> (foire aux
   questions), il est important d&#039;apprendre comment <a href="language.variables.external.php" class="link">récupérer des variables externes à PHP</a>.
   La page du manuel correspondante contient beaucoup d&#039;exemples.
  </p>

  <div class="qandaset"><ol class="qandaset_questions"><li><a href="#faq.html.encoding">
     
      Quel encodage/d&eacute;codage ai-je besoin lors du passage d&#039;une valeur via
      un formulaire/une URL ?
     
    </a></li><li><a href="#faq.html.form-image">
     
      J&#039;essaye d&#039;utiliser &lt;input type=&quot;image&quot;&gt; mais
      les variables $foo.x et $foo.y
      ne sont pas disponibles. $_GET[&#039;foo.x&#039;] n&#039;existe pas non plus.
      O&ugrave; sont-elles ?  
     
    </a></li><li><a href="#faq.html.arrays">
     Comment cr&eacute;er un tableau dans une balise &lt;form&gt; HTML ?
    </a></li><li><a href="#faq.html.select-multiple">
     
      Comment puis-je r&eacute;cup&eacute;rer le r&eacute;sultat d&#039;un champ HTML SELECT 
      multiple ?
     
    </a></li><li><a href="#faq.html.javascript-variable">
     
      Comment puis-je passer une variable de Javascript vers PHP ?
     
    </a></li></ol></div>
   <dl class="qandaentry" id="faq.html.encoding">
    <dt><strong>
     
      Quel encodage/décodage ai-je besoin lors du passage d&#039;une valeur via
      un formulaire/une URL ?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Il y a plusieurs étapes pour lesquelles le codage est important. En supposant qu&#039;il y a
      une <span class="type"><a href="language.types.string.php" class="type string">string</a></span> <var class="varname">$data</var>, qui contient la chaîne
      à passer de manière non-encodée, voici les étapes appropriées :
      <ul class="itemizedlist">
       <li class="listitem">
        <p class="para">
         Interprétation HTML. Afin d&#039;indiquer une chaîne aléatoire, il
         <em>faut</em> l&#039;inclure entre doubles guillemets et
         utiliser la fonction <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> pour encoder
         la chaîne.
        </p>
       </li>
       <li class="listitem">
        <p class="para">
         URL : une URL est constituée de plusieurs parties. Si les données
         doivent être interprétées comme un seul élément, il <em>faut</em>
         les encoder avec la fonction <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>Exemple #1 Un élément de formulaire HTML caché</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">Note</strong>: 
       <span class="simpara">
        Il n&#039;est pas correct d&#039;utiliser la fonction <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span>
        pour les données <var class="varname">$data</var>, car il en est de la responsabilité du
        navigateur de les encoder. Tous les navigateurs populaires le font correctement.
        Il est à noter que cela s&#039;effectue sans considération de la méthode utilisée
        (c&#039;est-à-dire 
        <code class="literal">GET</code> ou <code class="literal">POST</code>).
        Il faut uniquement noter ce cas pour les requêtes <code class="literal">GET</code>,
        car les requêtes <code class="literal">POST</code> sont généralement cachées.
       </span>
      </p></blockquote>
      <div class="example" id="example-2">
       <p><strong>Exemple #2 Données éditables par l&#039;utilisateur</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">Note</strong>: 
       <span class="simpara">
        Les données sont montrées dans le navigateur comme prévues, car celui-ci interprétera
        les symboles HTML échappés.
       </span>
       <span class="simpara">
        Au moment de la validation, via la méthode <code class="literal">GET</code> ou 
        <code class="literal">POST</code>, les données devraient être
        url-encodées par le navigateur avant le transfert et directement url-décodées par PHP.
        Donc, finalement, il n&#039;est pas nécessaire d&#039;effectuer d&#039;url-encodage/url-decodage soi-même,
        tout est effectué automatiquement.
       </span>
      </p></blockquote>
      <div class="example" id="example-3">
       <p><strong>Exemple #3 Dans une 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">Note</strong>: 
       <span class="simpara">
        En fait, lors de la simulation d&#039;une requête <code class="literal">GET</code> HTML, il est nécessaire
        d&#039;utiliser manuellement la fonction <span class="function"><a href="function.urlencode.php" class="function">urlencode()</a></span> sur les données.
       </span>
      </p></blockquote>
      <blockquote class="note"><p><strong class="note">Note</strong>: 
       <span class="simpara">
        Il faut utiliser <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> sur l&#039;URL complète,
        car l&#039;URL se comporte comme la valeur d&#039;un attribut HTML. Dans ce cas, le navigateur
        fera un <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> sur la valeur et passera le résultat à
        l&#039;URL. PHP devrait comprendre l&#039;URL correctement, car les données ont été url-encodées.
       </span>
       <span class="simpara">
        Il est à noter que <code class="literal">&amp;</code> dans l&#039;URL est remplacé par
        <code class="literal">&amp;amp;</code>. Bien que la plupart des navigateurs devraient
        corriger cela en cas d&#039;oubli, ce n&#039;est pas toujours le cas. Donc, même si l&#039;URL
        n&#039;est pas dynamique, il <em>faut</em> utiliser
        la fonction <span class="function"><a href="function.htmlspecialchars.php" class="function">htmlspecialchars()</a></span> sur l&#039;URL.
       </span>
      </p></blockquote>
     </p>
     
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.form-image">
    <dt><strong>
     
      J&#039;essaye d&#039;utiliser &lt;input type=&quot;image&quot;&gt; mais
      les variables <var class="varname">$foo.x</var> et <var class="varname">$foo.y</var>
      ne sont pas disponibles. <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET['foo.x']</a></var> n&#039;existe pas non plus.
      Où sont-elles ?  
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Lors de la validation d&#039;un formulaire, il est possible d&#039;utiliser une image au lieu du bouton
      standard de type &quot;<code class="literal">submit</code>&quot; avec une balise du type :
      <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>

      Lorsque l&#039;utilisateur clique sur l&#039;image, le formulaire est transmis au serveur avec deux
      variables supplémentaires : <var class="varname">foo.x</var> et 
      <var class="varname">foo.y</var> qui représentent les coordonnées du point cliqué.
     </p>
     <p class="para">
      Comme <var class="varname">foo.x</var> et <var class="varname">foo.y</var> sont
      des noms de variables invalides en PHP, elles sont automatiquement converties
      en <var class="varname">foo_x</var> et <var class="varname">foo_y</var>. Les points sont 
      remplacés par des soulignés. Donc, il faut accéder à ces variables
      comme n&#039;importe quelle autre variable tel que décrit dans la section
      &quot;<a href="language.variables.external.php" class="link">Variables provenant d&#039;autres sources</a>&quot;.
      Par exemple, en utilisant <var class="varname"><a href="reserved.variables.get.php" class="classname">$_GET['foo_x']</a></var>.
      <blockquote class="note"><p><strong class="note">Note</strong>: 
       <p class="para">
        Les espaces dans les noms de variables de requête sont également convertis en tirets bas.
       </p>
      </p></blockquote>
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.arrays">
    <dt><strong>
     Comment créer un tableau dans une balise &lt;form&gt; HTML ?
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Pour envoyer le résultat du &lt;form&gt; comme un <a href="language.types.array.php" class="link">tableau</a>
      de variables au script PHP, il faut nommer, via l&#039;attribut <code class="literal">name</code>, les balises
      &lt;input&gt;, &lt;select&gt; ou &lt;textarea&gt; comme cela :
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input name=&quot;MonTableau[]&quot; /&gt;
&lt;input name=&quot;MonTableau[]&quot; /&gt;
&lt;input name=&quot;MonTableau[]&quot; /&gt;
&lt;input name=&quot;MonTableau[]&quot; /&gt;</pre>
</div>
      </div>

      Noter les crochets après le nom de la variable, c&#039;est ce qui fait que celle-ci sera un tableau.
      Il est possible de grouper les éléments dans différents tableaux de variables en assignant le
      même nom à différents éléments :
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input name=&quot;MonTableau[]&quot; /&gt;
&lt;input name=&quot;MonTableau[]&quot; /&gt;
&lt;input name=&quot;MonAutreTableau[]&quot; /&gt;
&lt;input name=&quot;MonAutreTableau[]&quot; /&gt;</pre>
</div>
      </div>

      Cela produira deux tableaux de variables, MonTableau et MonAutreTableau, qui seront
      envoyés au script PHP. Il est également possible d&#039;assigner des clés spécifiques au
      tableau :
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;input name=&quot;UnAutreTableau[]&quot; /&gt;
&lt;input name=&quot;UnAutreTableau[]&quot; /&gt;
&lt;input name=&quot;UnAutreTableau[email]&quot; /&gt;
&lt;input name=&quot;UnAutreTableau[telephone]&quot; /&gt;</pre>
</div>
      </div>

      Le tableau UnAutreTableau contiendra les clés 0, 1, email et telephone.
     </p>
     <p class="para">
      <blockquote class="note"><p><strong class="note">Note</strong>: 
       <p class="para">
         Le fait de spécifier une clé à un tableau est optionnel en HTML. Sans spécification,
         les clés du tableau suivront l&#039;ordre d&#039;apparition des éléments dans le formulaire.
         Dans notre premier exemple, le tableau contient les clés 0, 1, 2 et 3.
        </p>
       </p></blockquote>
      </p>
      <p class="para">
      Voir aussi les 
      <a href="ref.array.php" class="link">fonctions sur les tableaux de variables</a> et la section
      sur les
      <a href="language.variables.external.php" class="link">variables provenant d&#039;autres sources</a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.html.select-multiple">
    <dt><strong>
     
      Comment puis-je récupérer le résultat d&#039;un champ HTML <code class="literal">SELECT</code> 
      multiple ?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Le champ <code class="literal">SELECT</code> multiple en HTML permet à l&#039;utilisateur de 
      sélectionner plusieurs éléments d&#039;une liste. 
      Ces éléments seront transmis à la page pointée par l&#039;attribut 
      <code class="literal">action</code> de la balise <code class="literal">form</code>.
      Le problème est que ces éléments sont tous passés avec le même nom de variable.
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;select name=&quot;var&quot; multiple=&quot;yes&quot;&gt;</pre>
</div>
      </div>

      Chaque option sélectionnée arrivera au mécanisme de traitement sous la forme :
      <div class="example-contents"><div class="cdata"><pre>
var=option1
var=option2
var=option3
      </pre></div></div>

      Chaque option effacera donc le contenu de la précédente variable 
      <var class="varname">$var</var>. La solution consiste à utiliser un tableau de variables
      dans cet élément de formulaire HTML, par exemple :
      <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;select name=&quot;var[]&quot; multiple=&quot;yes&quot;&gt;</pre>
</div>
      </div>

      Cela fera que PHP traitera <var class="varname">$var</var> comme un tableau de
      variables et que chaque assignement de valeur à var[] ajoutera un index au tableau.
      La première option choisie sera mise dans <var class="varname">$var[0]</var>,
      la suivante sera mise dans <var class="varname">$var[1]</var>, etc. La fonction
      <span class="function"><a href="function.count.php" class="function">count()</a></span> peut être utilisée pour déterminer combien
      d&#039;options ont été sélectionnées, et la fonction <span class="function"><a href="function.sort.php" class="function">sort()</a></span>
      peut être utilisée pour trier le tableau, si nécessaire.
     </p>
     <p class="para">
      Il est à noter que lors de l&#039;utilisation de Javascript, <code class="literal">[]</code> dans le nom de l&#039;élément peut
      poser problème lors de l&#039;accès à celui-ci par son nom.
      Utiliser plutôt l&#039;indice numérique de l&#039;élément dans ce cas, ou bien les simples
      guillemets pour entourer cet élément, comme :
      <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>
     
      Comment puis-je passer une variable de Javascript vers PHP ?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Javascript est (habituellement) une technologie côté client et PHP
      est (habituellement) une technologie côté serveur et sachant que HTTP est un 
      protocole « sans état », les deux langages ne peuvent pas directement partager des
      variables.
     </p>
     <p class="para">
      Cependant, il est possible de faire passer des variables entre les deux.
      Une des solutions pour cela est de générer un code Javascript à l&#039;aide de PHP
      et de faire rafraîchir le navigateur tout seul, passant ainsi des variables spécifiques
      au script PHP. L&#039;exemple suivant montre précisément comment réaliser cela --
      il permet au code PHP de récupérer les dimensions de l&#039;écran du client, ce qui est normalement
      uniquement possible côté client.
     </p>
     <p class="para">
      <div class="example" id="example-4">
       <p><strong>Exemple #4 Génération de Javascript avec 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">'largeur'</span><span style="color: #007700">]) AND isset(</span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'hauteur'</span><span style="color: #007700">])) {<br />  </span><span style="color: #FF8000">// Affichage des variables<br />  </span><span style="color: #007700">echo </span><span style="color: #DD0000">'La largeur de l\'écran est : ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'largeur'</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">'La hauteur de l\'écran est : ' </span><span style="color: #007700">. </span><span style="color: #0000BB">$_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">'hauteur'</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">// passage des variables de dimensions<br />  // (préservation de la requête d'origine<br />  //   -- les variables par méthode POST doivent être traitées différemment)<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;largeur=\" + screen.width + \"&amp;hauteur=\" + 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); ?>