Manuel PHP
Précédent | Chapitre 7. Les variables | Suivant

# Variables externes à `PHP`

## Formulaires HTML (GET et POST)

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 :

Exemple 7-19. Exemple avec un formulaire simple

    <form action="foo.php" method="post">
        Nom  :  <input type="text" name="username"><br>
        Email: <input type="text" name="email"><br>
        <input type="submit" name="submit" value="Envoi!">
    </form>

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 7-20. Accéder simplement à des variables de formulaires POST

    <?php
    // Disponibles depuis &php; 4.1.0

       print $_POST['username'];
       print $_REQUEST['username'];

       import_request_variables('p', 'p_');
       print $p_username;

    // Disponibles depuis &php; 3.

       print $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é.

       print $username;
    ?>

Utiliser un formulaire de type GET est similaire, hormis le fait que vous deviez utiliser les variables prédéfinies du 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.exemple.com/test.php?id=3` contient les données de GET, qui sont accessibles via `$_GET['id']`. Voyez aussi `$_REQUEST` et import_request_variables().

> Note : Les tableaux superglobaux, comme `$_POST` et `$_GET`, sont disponibles depuis `PHP` 4.1.0

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 7-21. Variables de formulaires complexes

`<?php
if ($_POST['action'] == 'submitted') {
print '<pre>';
print_r($_POST);
print '<a href="'. $_SERVER['PHP_SELF'] .'">Essayez à nouveau</a>';
print '</pre>';
} else {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Nom : <input type="text" name="personal[name]"><br>
Email : <input type="text" name="personal[email]"><br>
Biere : <br>
<select multiple name="vin[]">
<option value="bordeaux">bordeaux</option>
<option value="beaujolais">beaujolais</option>
<option value="loire">loire</option>
</select><br>
<input type="hidden" name="action" value="submitted">
<input type="submit" name="submit" value="submit me!">
</form>
<?php
}
?>`

En `PHP` 3, la syntaxe des tableaux HTML est limitée aux tableaux uni-dimensionnels. En `PHP` 4, ces limitations ont été levées.

### Nom de variables IMAGE de type `SUBMIT`

Lors de la soumission d'un formulaire, il est possible d'utiliser une image au lieu d'un bouton standard, comme ceci :

Exemple 7-22. 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.

## Cookies HTTP

`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'authentification de l'utilisateur. Vous pouvez établir un cookie grâce à la fonction setcookie(). Les cookies font partie intégrante des entê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(). Tout cookie envoyé depuis le client sur le serveur sera automatiquement stocké sous forme de variable, comme pour la méthode POST ou GET.

Si vous souhaitez assigner plusieurs valeurs à un seul cookie, il vous faut ajouter les caractères [] au nom de votre cookie. Par exemple :

Exemple 7-23. Utilisation de tableaux avec les cookies

`<?php setcookie ("MonCookie[]", "test", time()+3600); ?>`

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 :

Exemple 7-24. Exemple avec setcookie()

`<?php $compte++; SetCookie ("Panier", $compte, time()+3600); SetCookie ("Panier[$compte]", $item, time()+3600); ?>`

## Cas des points dans les noms de variables

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 suivi 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`).

## Détermination du type des variables

Parceque `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 souhaitez. `PHP` inclut des fonctions permettant de déterminer le type d'une variable : gettype(), is_long(), is_double(), is_string(), is_array() et is_object().

Précédent | Sommaire | Suivant
Les variables dynamiques | Niveau supérieur | Les constantes