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>
Note: Si le nom d'une variable externe commence par une syntaxe valide pour un tableau, les charactères qui suivent sont silencieusement ignorés. Par example : <input name="foo[bar]baz"> deviens $_REQUEST['foo']['bar'].
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 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 :
<?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 #5 Exemple avec setcookie()
<?php
if (isset($_COOKIE['compte'])) {
$compte = $_COOKIE['compte'] + 1;
} else {
$compte = 1;
}
setcookie('compte', $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 */
?>
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.
HTTP étant un protocole texte, la plupart, sinon tous, le contenu qui vient dans les tableaux Superglobaux, comme $_POST et $_GET restera en tant que chaînes. PHP n'essaiera pas de convertir des valeurs en un type spécifique. Dans l'exemple ci-dessous, $_GET["var1"] contiendra la chaîne "null" et $_GET["var2"], la chaîne "123".
/index.php?var1=null&var2=123
Historique
Version | Description |
---|---|
5.4.0 | Register Globals, Magic Quotes et register_long_arrays ont été supprimés. |
5.3.0 | Register Globals, Magic Quotes et register_long_arrays sont devenus obsolètes. |
4.2.0 | La directive register_globals vaut par défaut off. |
4.1.0 | Les tableaux super-globaux, comme $_POST et $_GET deviennent disponibles. |
Version en cache
21/11/2024 22:36:27 Cette version de la page est en cache (à la date du 21/11/2024 22:36:27) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-language.variables.external.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.