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 #1 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="Envoie!" />
</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 #2 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;

// Plus disponible depuis PHP 6. Depuis PHP 5.0.0, ce type de variable peut �tre d�sactiv�
// avec la directive de configuration register_long_arrays.

   
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().

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. 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 ensemble 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 #3 Variables de formulaires complexes

<?php
if ($_POST) {
    echo 
'<pre>';
    echo 
htmlspecialchars(print_r($_POSTtrue));
    echo 
'</pre>';
}
?>
<form action="" method="post">
    Name:  <input type="text" name="personal[name]" /><br />
    Email: <input type="text" name="personal[email]" /><br />
    Beer: <br />
    <select multiple name="beer[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbr�u</option>
    </select><br />
    <input type="submit" value="Validez moi !" />
</form>

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 :

<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'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 appropri�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 devait l'assigner sous forme de tableau. Par exemple :

<?php
setcookie
("MyCookie[foo]"'Test 1'time()+3600);
setcookie("MyCookie[bar]"'Test 2'time()+3600);
?>

Cela va cr�er deux cookies distincts 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 chemin 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 #4 Exemple avec setcookie()

<?php
if (isset($_COOKIE['compte'])) {
    
$compte $_COOKIE['compte'] + 1;
} else {
    
$compte 1;
}
setcookie('Panier'$comptetime()+3600);
setcookie("Panier[$compte]"$itemtime()+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 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.

D�termination du type des variables

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 souhaitez. 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 chapitre sur les types.