PHP et HTML

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 faq (foire aux questions), il est important que vous appreniez comment r�cup�rer des variables externes � PHP. La page du manuel correspondante contient beaucoup d'exemples. Faites particuli�rement attention � ce que signifie register_globals.

  1. Quel encodage/d�codage ai-je besoin lors du passage d'une valeur via un formulaire/une URL ?
  2. J'essaye d'utiliser <input type="image"> mais les variables $foo.x et $foo.y ne sont pas disponibles. $_GET['foo.x'] n'existe pas non plus. O� sont-elles ?
  3. Comment cr�er un tableau dans une balise <form> HTML ?
  4. Comment puis-je r�cup�rer le r�sultat d'un champ HTML SELECT multiple ?
  5. Comment puis-je passer une variable de Javascript vers PHP ?

Quel encodage/d�codage ai-je besoin lors du passage d'une valeur via un formulaire/une URL ?

Il y a plusieurs �tapes pour lesquelles le codage est important. En supposant que vous avez une cha�ne de caract�res $data, qui contient la cha�ne que vous voulez passer de mani�re non-encod�e, voici les �tapes appropri�es :

  • Interpr�tation HTML. Afin d'indiquer une cha�ne al�atoire, vous devez l'inclure entre doubles guillemets et utiliser la fonction htmlspecialchars() pour encoder la cha�ne.

  • URL : une URL est constitu�e de plusieurs parties. Si vous voulez que vos donn�es soient interpr�t�es comme un seul �l�ment, vous devez les encoder avec la fonction urlencode().

Exemple #1 Un �l�ment de formulaire HTML cach�

<?php
echo '<input type="hidden" value="' htmlspecialchars($data) . '" />';
?>

Note: Il n'est pas correct d'utiliser la fonction urlencode() pour vos donn�es $data, car il en est de la responsabilit� du navigateur de les encoder. Tous les navigateurs populaires le font correctement. Notez que cela s'effectue sans consid�ration de la m�thode utilis�e (c'est-�-dire GET ou POST). Vous devez uniquement noter ce cas pour les requ�tes GET, car les requ�tes POST sont g�n�ralement cach�es.

Exemple #2 Donn�es �ditables par l'utilisateur

<?php
echo "<textarea name=\"mydata\">\n";
echo 
htmlspecialchars($data)."\n";
echo 
'</textarea>';
?>

Note: Les donn�es sont montr�es dans le navigateur comme pr�vues, car celui-ci interpr�tera les symboles HTML �chapp�s. Au moment de la validation, via la m�thode GET ou POST, les donn�es devraient �tre url-encod�es par le navigateur avant le transfert et directement url-d�cod�es par PHP. Donc, finalement, vous n'avez pas � effectuer d'url-encodage/url-decodage vous-m�me, tout est effectu� automatiquement.

Exemple #3 Dans une URL

<?php
echo "<a href=\"" htmlspecialchars("/nextpage.php?stage=23&data=" .
        
urlencode($data)) . "\">\n";
?>

Note: En fait, vous simulez une requ�te GET HTML, il est n�cessaire d'utiliser manuellement la fonction urlencode() sur vos donn�es.

Note: Vous devez utiliser htmlspecialchars() sur l'URL compl�te, car l'URL se comporte comme la valeur d'un attribut HTML. Dans ce cas, le navigateur fera un htmlspecialchars() sur la valeur et passera le r�sultat � l'URL. PHP devrait comprendre l'URL correctement, car vous avez url-encod� les donn�es. Vous devez noter que & dans l'URL est remplac� par &amp;. Bien que la plus part des navigateurs devraient corriger cela si vous l'oubliez, ce n'est pas toujours le cas. Donc, m�me si votre URL n'est pas dynamique, vous devez utiliser la fonction htmlspecialchars() sur l'URL.

J'essaye d'utiliser <input type="image"> mais les variables $foo.x et $foo.y ne sont pas disponibles. $_GET['foo.x'] n'existe pas non plus. O� sont-elles ?

Lorsque vous validez un formulaire, il est possible d'utiliser une image au lieu du bouton standard de type "submit" avec une balise du type :

<input type="image" src="image.gif" name="foo" />

Lorsque l'utilisateur clique sur l'image, le formulaire est transmis au serveur avec deux variables suppl�mentaires : foo.x et foo.y qui repr�sentent les coordonn�es du point cliqu�.

Comme foo.x et foo.y sont des noms de variables invalides en PHP, elles sont automatiquement converties en foo_x et foo_y. Les points sont remplac�s par des soulign�s. Donc, vous devez acc�der � ces variables comme n'importe quelle autre variable tel que d�crit dans la section "Variables provenant d'autres sources". Par exemple, en utilisant $_GET['foo_x'].

Note: Les espaces dans les noms de variables sont �galement converties en un soulign� bas.

Comment cr�er un tableau dans une balise <form> HTML ?

Pour envoyer le r�sultat du <form> comme un tableau de variables � votre script PHP, vous devez nommer, via l'attribut name, les balises <input>, <select> ou <textarea> comme cela :

<input name="MonTableau[]" />
<input name="MonTableau[]" />
<input name="MonTableau[]" />
<input name="MonTableau[]" />

Noter les crochets apr�s le nom de la variable, c'est ce qui fait que celle-ci sera un tableau. Vous pouvez grouper les �l�ments dans diff�rents tableaux de variables en assignant le m�me nom � diff�rents �l�ments :

<input name="MonTableau[]" />
<input name="MonTableau[]" />
<input name="MonAutreTableau[]" />
<input name="MonAutreTableau[]" />

Cela produira deux tableaux de variables, MonTableau et MonAutreTableau, qui seront envoy�s au script PHP. Il est �galement possible d'assigner des cl�s sp�cifiques � votre tableau :

<input name="UnAutreTableau[]" />
<input name="UnAutreTableau[]" />
<input name="UnAutreTableau[email]" />
<input name="UnAutreTableau[telephone]" />

Le tableau UnAutreTableau contiendra les cl�s 0, 1, email et telephone.

Note: Le fait de sp�cifier une cl� � un tableau est optionnel en HTML. Si vous ne le faites pas, les cl�s du tableau suiveront l'ordre d'apparition des �l�ments dans le formulaire. Dans notre premier exemple, le tableau contient les cl�s 0, 1, 2 et 3.

Voir aussi les fonctions sur les tableaux de variables et la section sur les variables provenant d'autres sources.

Comment puis-je r�cup�rer le r�sultat d'un champ HTML SELECT multiple ?

Le champ SELECT multiple en HTML permet � l'utilisateur de s�lectionner plusieurs �l�ments d'une liste. Ces �l�ments seront transmis � la page point�e par l'attribut action de la balise form. Le probl�me est que ces �l�ments sont tous pass�s avec le m�me nom de variable.

<select name="var" multiple="yes">

Chaque option s�lectionn�e arrivera au m�canisme de traitement sous la forme :


var=option1
var=option2
var=option3

Chaque option effacera donc le contenu de la pr�c�dente variable $var. La solution consiste � utiliser un tableau de variables dans cet �l�ment de formulaire HTML, par exemple :

<select name="var[]" multiple="yes">

Cela fera que PHP traitera $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[0], la suivante sera mise dans $var[1], etc. La fonction count() peut �tre utilis�e pour d�terminer combien d'options ont �t� s�lectionn�es, et la fonction sort() peut �tre utilis�e pour trier le tableau, si n�cessaire.

Notez que si vous utilisez Javascript, [] dans le nom de l'�l�ment peut vous poser probl�me lorsque vous tenterez d'acc�der � celui-ci par son nom. Utilisez plut�t l'indice num�rique de l'�l�ment dans ce cas, ou bien utilisez les simples guillemets pour entourer cet �l�ment, comme :


variable = documents.forms[0].elements['var[]'];

Comment puis-je passer une variable de Javascript vers PHP ?

Javascript est (habituellement) une technologie c�t� client et PHP est (habituellement) une technologie c�t� serveur et sachant que HTTP est un protocole statique, les deux langages ne peuvent pas directement partager des variables.

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'aide de PHP et de faire rafra�chir le navigateur tout seul, passant ainsi des variables sp�cifiques au script PHP. L'exemple suivant montre pr�cis�ment comme r�aliser cela -- il permet � PHP de r�cup�rer les dimensions de l'�cran du client, ce qui est normalement possible qu'en technologie cot� client.

Exemple #4 G�n�ration de Javascript avec PHP

<?php
if (isset($_GET['largeur']) AND isset($_GET['hauteur'])) {
  
// Affichage des variables
  
echo 'La largeur de l\'�cran est : ' $_GET['largeur'] ."<br />\n";
  echo 
'La hauteur de l\'�cran est : ' $_GET['hauteur'] . "<br />\n";
} else {
  
// passage des variables de dimensions
  // (pr�servation de la requ�te d'origine
  //   -- les variables par m�thode POST doivent �tre trait�es diff�remment)

  
echo "<script type=\"text/javascript\">\n";
  echo 
"  location.href=\"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}"
            
"&largeur=\" + screen.width + \"&hauteur=\" + screen.height;\n";
  echo 
"</script>\n";
  exit();
}
?>