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

<?php
// Disponibles depuis PHP 4.1.0

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

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

// 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.

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"].

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!\"). Il a été jugé que cette mesure était nécessaire pour échapper les caractères lors de l'insertion en base de données depuis dix ans mais cette fonction patrimoniale doit maintenant être désactivée. 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($_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>

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 :

<?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', $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.

LoadingChargement en cours