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. Il y a peu de façon pour récupérer ces informations,
par exemple :
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>
Depuis PHP 5.4.0, il n'y a plus que deux façons d'accéder aux données
provenant d'un formulaire HTML. Les voici :
Exemple #2 Accéder simplement à des variables de formulaires POST
<?php
echo $_POST['username'];
echo $_REQUEST['username'];
?>
Il existait d'autres façons d'accéder à ces données dans les anciennes
versions de PHP. Les voici : (reportez-vous à l'historique en fin de page
pour plus de détais)
Exemple #3 Anciennes méthodes pour accéder aux entrées utilisateur
<?php
// Attention : ces méthodes NE SONT PLUS SUPPORTEES.
// Les méthodes valides sont décrites ci-dessus.
// Utilisation de import_request_variables() - cette fonction a été supprimée en PHP 5.4.0
import_request_variables('p', 'p_');
echo $p_username;
// Ces variables pré-définies ont été supprimées en PHP 5.4.0
echo $HTTP_POST_VARS['username'];
// L'utilisation de register_globals. Cette fonctionalité a été supprimée en PHP 5.4.0.
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.
Note:
Les points et les espaces dans les noms de variables
sont convertis en underscores. Par exemple,
<input name="a.b" /> deviendra
$_REQUEST["a_b"].
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 #4 Variables de formulaires complexes
<?php
if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
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>
Cookies HTTP
PHP supporte les cookies HTTP de manière totalement
transparente, comme défini dans la
» RFC 6265. 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 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, vous devez l'assigner sous forme de tableau.
Par exemple :
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 #5 Exemple avec setcookie()
<?php
if (isset($_COOKIE['compte'])) {
$compte = $_COOKIE['compte'] + 1;
} else {
$compte = 1;
}
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 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.