PHP et HTMLPHP 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.
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.
Un élément de formulaire HTML caché
'."\n";
?>
]]>
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.
Données éditables par l'utilisateur
\n";
echo htmlspecialchars($data)."\n";
echo '';
?>
]]>
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.
Dans une URL
'."\n";
?>
]]>
En fait, vous simulez une requête GET HTML, il est nécessaire
d'utiliser manuellement la fonction urlencode sur vos données.
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
&. Bien que la plupart 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 :
]]>
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'].
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 :
]]>
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 :
]]>
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 :
]]>
Le tableau UnAutreTableau contiendra les clés 0, 1, email et telephone.
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.
]]>
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 :
]]>
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 = document.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.
Génération de Javascript avec PHP
\n";
echo 'La hauteur de l\'écran est : ' . $_GET['hauteur'] . " \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 "\n";
exit();
}
?>
]]>