Lorsqu'un formulaire est envoyé Ã un script PHP,
toutes les variables du formulaire seront automatiquement disponibles
dans le script. Par exemple, considérons le formulaire suivant :
Suivant votre configuration particulière et vos préférences,
vous avez plusieurs méthodes pour accéder aux variables du formulaires.
Voici quelques exemples :
Exemple 12-21. Accéder simplement à des variables de formulaires POST
<?php
// Disponibles depuis &php; 4.1.0
echo $_POST['username'];
echo $_REQUEST['username'];
import_request_variables('p', 'p_');
echo $p_username;
// Disponibles depuis &php; 3.
echo $HTTP_POST_VARS['username'];
// Disponibles si la directive register_globals = on. Depuis
// &php; 4.2.0 la valeur par défaut de cette directive est register_globals = off.
// Utiliser ou présumer cette méthode est découragé.
echo $username;
?>
Utiliser un formulaire de type GET est similaire, hormis le fait que
vous deviez utiliser les variables pré-définies de GET Ã la place.
GET s'applique aussi à la QUERY_STRING
(les informations disponibles après le '?' dans une URL).
De ce fait, par exemple,
http://www.example.com/test.php?id=3
contient les données de GET, qui sont accessibles via $_GET['id'].
Voyez aussi
$_REQUEST et
import_request_variables().
Comme nous l'avons déjà dis, avant PHP 4.2.0, la valeur par défaut de
register_globals était
on. Dans PHP 3, elle était toujours à On.
La communauté PHP
n'encourage personne à utiliser cette directive et privilégie la valeur
off et un code accordé.
Note :
La directive de configuration magic_quotes_gpc
affecte les valeurs de GET, POST et cookies. Si elle est activée,
une valeur comme celle de (C'est "PHP!") sera magiquement transformée en (C\'est \"PHP!\").
La protection des caractères est nécessaire pour l'insertion dans les bases de données.
Voyez aussi les fonctions addslashes(),
stripslashes() et
magic_quotes_sybase.
PHP comprend aussi les tableaux dans le contexte des formulaires.
(voir aussi la FAQ). Vous pouvez,
par exemple, grouper des variables ensembles ou bien utiliser cette
fonctionnalité pour lire des valeurs multiples d'un menu déroulant.
Par exemple, voici un formulaire qui se poste lui-même des données,
et les affiche :
Exemple 12-22. Variables de formulaires complexes
<?php if ($_POST['action'] == 'submitted') { echo '<pre>';
Lors de la soumission d'un formulaire, il est possible d'utiliser
une image au lieu d'un bouton standard, comme ceci :
Exemple 12-23. Utilisation d'une image pour soumettre un formulaire
<input type="image" src="image.gif" name="sub" />
Lorsque l'utilisateur clique sur cette image, le formulaire
associé est envoyé au serveur, avec deux données supplémentaires,
sub_x et sub_y. Elles contiennent
les coordonnées du clic de l'utilisateur dans l'image. Vous noterez
que ces variables sont envoyées par le navigateur avec un point dans leur
nom, mais PHP convertit ces points en soulignés.
PHP supporte les cookies HTTP de manière totalement
transparente, comme défini dans les
spécifications de Netscape. Les cookies
sont un mécanisme permettant de stocker des données
sur la machine cliente à des fins d'identification de
l'utilisateur. Vous pouvez établir un cookie grâce Ã
la fonction setcookie(). Les cookies
font partie intégrante des en-têtes HTTP et donc
la fonction setcookie() doit être
appelée avant que le moindre affichage ne soit envoyé
au navigateur. C'est la même restriction que pour la fonction
header(). Les données contenus dans les cookies
sont alors disponibles dans les tableaux de cookies appopriés, comme
$_COOKIE, $HTTP_COOKIE_VARS
mais aussi $_REQUEST. Lisez la page de la documentation
sur la fonction setcookie() pour plus de détails ainsi que des exemples.
Si vous souhaitez assigner plusieurs valeurs à un seul
cookie, il vous faut ajouter les caractères
[] au nom de votre cookie.
Par exemple :
Exemple 12-24. Utilisation de tableaux avec les cookies
Cela va créer deux cookies distinctes bien que MyCookie
est maintenant un simple tableau dans votre script. Si vous voulez définir
seulement un cookie avec plusieurs valeurs, utilisez la fonction
serialize() ou explode()
sur la première valeur.
Il est à noter qu'un cookie remplace le cookie
précédent par un cookie de même nom tant que
le "path" ou le domaine sont identiques.
Donc, pour une application de panier, vous devez implémenter
un compteur et l'incrémenter au fur et à mesure. C'est-à -dire :
Typiquement, PHP ne modifie pas les noms des variables lorsqu'elles
sont passées à un script. Cependant, il faut noter que
les points (.) ne sont pas autorisés dans les noms de variables
PHP. Pour cette raison, jetez un oeil sur :
<?php $varname.ext; /* nom de variable invalide */ ?>
Dans ce cas, l'analyseur croit voir la variable nommée
$varname, suivie par l'opérateur de concaténation,
et suivie encore par la chaîne sans guillemets
(une chaîne sans guillemets et qui n'a pas de signification
particulière). Visiblement, ce n'est pas ce qu'on attendait...
Pour cette raison, il est important de noter que PHP remplacera
automatiquement les points des noms de variables entrantes par
des soulignés (underscore).
Parce que PHP détermine le type des variables et
les convertit (généralement) comme il faut,
ce n'est pas toujours le type de variable que vous souhaîtez.
PHP inclut des fonctions permettant de déterminer le
type d'une variable :
gettype(),
is_array(),
is_float(),
is_int(),
is_object() et
is_string().
Lisez également le chapître sur les
types.