PHP et HTML sont très intéractifs : 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 comme récupérer des variables externes à PHP. La page du manuel correspondante contient beaucoup d'exemples. Faîtes particulièrement attention à ce que signifie register_globals.
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().
Note : Il n'est pas correct d'utilliser 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 (i.e 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.
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.
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 &. 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.
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 ?
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" /> |
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 externes à PHP". Par exemple, en utilisant $_GET['foo_x'].
Note : Les espaces dans les noms de variables sont également converties en un souligné bas.
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[]" /> |
<input name="MonTableau[]" /> <input name="MonTableau[]" /> <input name="MonAutreTableau[]" /> <input name="MonAutreTableau[]" /> |
<input name="UnAutreTableau[]" /> <input name="UnAutreTableau[]" /> <input name="UnAutreTableau[email]" /> <input name="UnAutreTableau[telephone]" /> |
Note : Le fait de spécifier une clé à un tableau est optionnel en HTML. Si vous ne le faîtes pas, les clés du tableaux suiveront l'ordre d'apparition des éléments dans le formulaire. Dans notre premier exemple, le tableau contiend les clés 0, 1, 2 et 3.
Voir aussi les fonctions sur les tableaux de variables et la section sur les variables externes à PHP.
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"> |
var=option1 var=option2 var=option3 |
<select name="var[]" multiple="yes"> |
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[]']; |
Javascript est (habituellement) une technologie coté client et PHP est (habituellement) une technologie coté 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 ansi des variables spécifiques au script PHP. L'exemple suivant montre précisemment 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.
<?php |
Précédent | Sommaire | Suivant |
Utiliser PHP | Niveau supérieur | PHP et COM |