Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !  
CONCOURS
 
 
PLUS DE PHP
 
 
PLUS DE JAVASCRIPT
 
COMMENT CA MARCHE
 
 
EXPLIQUE-MOI
 
 
NEWS LETTER
 

 
PARTENAIRES
 
Découvrez scriptsphp.org
Découvrez phpteam.net
Tout sur les expressions régulières
IE sucks :-)
 
DESIGN DU SITE
 
Variables globales à OFF
Tuto écrit par Flyingcow, revu en août 2004 par Raf et Molokai

Travailler avec les variables globales à OFF

Depuis peu, peut être avez vous rencontré certains problèmes avec les versions récentes de PHP pour la manipulation de variables.
Avant, pour récupérer vos variables, vous pouviez le faire directement par leur nom, quel que soit le type de variables (passées par la méthode POST/GET, cookie, session, ...)
Cela nous permettait de faire ceci :

Récupération directe de variables
un appel au script : 
http://www.mondomaine.fr/monscript.php
?truc=coucou
<?php
echo 'Ma variable passée par url =>'.$truc;
?>
affichant :
Ma variable passée par url =>coucou

La variable $truc, passée par URL est directement accessible depuis le script PHP. Cette façon de travailler a l'air, certes, bien pratique, elle laisse néanmoins la porte ouverte à des trous de sécurité.

Ce qui nous permettait d'utiliser nos variables de cette façon-là est en fait une option se trouvant dans le fichier PHP.ini qui s'appelle : register_globals et qui est par défaut initialisée à ON dans ce fichier.
Depuis la version 4.2.0 de PHP, cette option est par défaut initialisée à OFF.

C'est pourquoi il est important de prendre dès maintenant l'habitude de travailler avec register_globals à OFF. De plus, beaucoup d'hébergeurs ayant upgradé PHP avec la nouvelle version laissent register_globals à OFF... Et puis, cette méthode permet de résoudre pas mal de trous de sécurité dans les scripts.

Une autre option importante de la configuration PHP : track_vars, positionnée à ON, celle ci nous permet de récupérer les variables passées par formulaire, url et cookies dans des tableaux prédéfinis.
Avec ces 2 options configurées telles que décrites ci-dessus, nous pouvons utiliser les tableaux associatifs suivants pour récupérer nos variables :

Tableaux associatifs
$HTTP_GET_VARS (désormais $_GET) Permet de récupérer les variables passées par url ou par la méthode GET d'un formulaire
$HTTP_POST_VARS
(désormais $_POST)
Permet de récupérer les variables envoyées par la méthode POST d'un formulaire
$HTTP_POST_FILES
(désormais $_FILES)
Permet de récupérer les variables de fichiers envoyés par un formulaire
$HTTP_COOKIE_VARS
(désormais $_COOKIE)
Permet de récupérer les cookies
$HTTP_SESSION_VARS
(désormais $_SESSION)
Permet de récupérer les variables de session
$HTTP_ENV_VARS
(désormais $_ENV)
Permet de récupérer les variables d'environnement données par PHP
$HTTP_SERVER_VARS
(désormais $_SERVER)
Permet de récupérer les variables serveur envoyées par le serveur HTTP


A partir de PHP 4.1.0, ces variables changent de nom pour prendre des noms plus courts (et plus facile à retenir :p).


Avant 4.1.0A partir de 4.1.0
$HTTP_GET_VARS$_GET
$HTTP_POST_VARS$_POST
$HTTP_POST_FILES$_FILES
$HTTP_COOKIE_VARS$_COOKIE
$HTTP_SESSION_VARS$_SESSION
$HTTP_ENV_VARS$_ENV
$HTTP_SERVER_VARS$_SERVER

Mise en pratique

Ok..ok, mais comment ça marche? Nous allons voir quelques petits exemples dans lesquels nous allons manipuler ces tableaux magiques...

1. Formulaires

Récupération d'informations provenant d'un formulaire utilisant la méthode POST.

Récupération d'un formulaire exemple1.php
<?php
$bouton = $_POST['send'];
if(!empty($bouton)) {
$nom = trim($_POST['nom']);
$prenom = trim($_POST['prenom']);
if(!empty($nom) && !empty($prenom)) {
echo 'Bonjour, '.$prenom.' '.$nom;
}
else {
echo 'vous n\'avez pas rempli tous
les champs';
}
}
?>
Formulaire utilisé form.html
 <form action="exemple1.php" method="post">
<table>
<tr>
<td>Nom :</td>
<td>
<input type="text" name="nom"
value="">
</td>
</tr>
<tr>
<td>Prénom :</td>
<td>
<input type="text" name="prenom"
value="">
</td>
</tr>
</table>
<input type="submit" value="envoyer"
name="send">
</form>

Comme vous le voyez, nous récupérons la valeur des variables grâce au tableau associatif $_POST dans lequel une entrée à été créée avec le nom de chaque variable du formulaire.

Pour ceux qui se demandent à quoi sert la fonction trim(), elle retire les espaces en début et fin de chaîne, cela nous permet de ne pas traiter des informations vides (un utilisateur pourrait très bien n'entrer que des espaces dans le formulaire)



Récupération d'un fichier.

Bien, maintenant voyons comment récupérer les informations concernant l'envoi de fichiers par une formulaire


Voici comment récupérer toutes les informations du fichier envoyé avec le tableau associatif $_FILES

EntréeExplications
$_FILES['variable']['name'] Le nom original du fichier qui provient de la machine de l'utilisateur
$_FILES['variable']['type'] Le type mime du fichier
$_FILES['variable']['size'] Le taille du fichier en bytes
$_FILES['variable']['tmp_name'] Le nom temporaire du fichier stocké sur le serveur
$_FILES['variable']['error'] le code erreur associé à l'upload (attention cette option à été ajoutée en PHP 4.2.0)

Cet exemple ne fait qu'afficher les informations concernant le fichier que l'on a uploadé.

Récupération de fichiers
<?php
$bouton = $_POST['bouton'];
if(!empty($bouton)) {
$fichier = $_FILES['fichier']['name'];
$size = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];
$type = $_FILES['fichier']['type'];
$error = $_FILES['fichier']['error'];
$max = 10000;
Récupération de fichiers
if(isset($fichier)) {
if($size <= $max) {
echo 'Nom d\'origine =>'.$fichier.'<br />';
echo 'Taille =>'.$size.'<br />';
echo 'Nom sur le serveur =>'.$tmp.'<br />';
echo 'Type de fichier =>'.$type.'<br />';
echo 'Code erreur =>'.$error.'<br />';
}
else {
echo 'Le fichier est trop volumineux';
}
}
else {
echo 'aucun fichier envoyé';
}
}
?>
<form enctype="multipart/form-data"
action="exemple2.php"
method="post">
<input name="fichier" type="file">
<input type="submit" value="send" name="bouton">
</form>
Récupérer les informations d'un formulaire facilement.

Imaginons que vous vouliez simplement afficher les informations entrées dans un formulaire. Vous pouvez parcourir le tableau $_POST afin d'afficher tout ce qu'il contient.

La variable $key contient le nom de la variable formulaire et la variable $val contient la valeur entrée dans le formulaire.

Afficher toutes les infos d'un formulaire
<?php 
if(isset($_POST)) {
foreach($_POST as $key=>$val) {
echo $key.'=>'.$val.'<p>';
}
}
else {
echo 'le formulaire n\'a pas été envoyé';
}
?>
<form action="exemple3.php" method="post">
Nom :<input type="text" name="nom"
value="">
<br />
Prénom:<input type="text" name="prenom"
value="">
<br />
Adresse:<input type="text" name="adresse"
value="">
<br />
Ville:<input type="text" name="ville"
value="">
<br />
Pays:<input type="text" name="pays"
value="">
<br />
<input type="submit" value="envoyer">
</form>

2. La méthode get et le passage par URL

Rien de bien compliqué, il suffit de récupérer les variables passées en get par le tableau $_GET.Un petit exemple pour illustrer quand même.

Passage par URL
http://www.monsite.fr/exemple4.php?nom=cow&prenom=flying
<?php
$nom = $_GET['nom'];
$prenom = $_GET['prenom'];
echo 'Bonjour, '.$prenom.' '.$nom;
?>

3. Les cookies

là nom plus rien de particulier

Récupération d'un cookie
<?php
$cookie = $_COOKIE['moncookie'];
if(!empty($cookie)){
echo 'Valeur du cookie=>'.$cookie;
}
?>

4. Les variables session

En récupérant vos variables sessions par le tableau associatif $_SESSION vous êtes sûrs que la valeur est bien une variable session. Voyons un exemple ou nous récupérons une variable session directement.

Le fichier session.php, débute une session si il n'en existe pas encore pour l'utilisateur.

Fichier ou l'on crée une entrée en session si le login et mot de passe entrés sont corrects, auquel cas, on initialise la variable $_SESSION['login'], avec la chaîne 'ok'.

Variables session
<?php
include 'session.php';
$bouton = $_POST['bouton'];
if(!empty($bouton)) {
$log = trim($_POST['log']);
$pass = trim($_POST['pass']);
if ($log=='jenny' && $pass == 'foo') {
$_SESSION['login'] = 'ok';
echo '<a href="exemple7.php"> >> suite >></a>';
}
else {
echo 'mauvais login/pass';
}
}
?>
<form action="exemple6.php" method="post">
Login :<input type="text" name="log"
value=""><br />
Pass :<input type="text" name="pass"
value=""><br />
<input type="submit" value="envoyer"
name="bouton">
</form>

Voici comment récupérer les variables session par le bon tableau.

Récupération d'une session
<?php
include 'session.php';
if($_SESSION['login'] == 'ok') {
echo 'vous êtes bien connecté';
}
else {
die('pas en session');
}

?>

5. Les variables d'environnement

Utilisation du tableau $_ENV pour récupérer les variables d'environnement : en voici quelques unes d'utiles.

Les variables d'environnement
<?php
echo 'Nombre de process actifs=>';
echo $_ENV['NUMBER_OF_PROCESSORS'].'
';
echo 'Système d\'exploitation=>';
echo $_ENV['OS'].'
';
echo 'Chemin du répertoire temporaire=>';
echo $_ENV['TMP'].'
';
echo 'Chemin du profil utilisateur=>';
echo $_ENV['USERPROFILE'].'
';
?>

6. Les variables serveurs

Utilisation du tableau $_SERVER pour récupérer les variables serveur : voici quelques exemples.

Les variables serveur
<?php
echo 'Chemin du script courant=>';
echo $_SERVER['PHP_SELF'].'
';
echo 'Nom du serveur=>';
echo $_SERVER['SERVER_NAME'].'
';
echo 'Variables passées au script=>';
echo $_SERVER['QUERY_STRING'].'
';
echo 'Document root=>';
echo $_SERVER['DOCUMENT_ROOT'].'
';
echo 'Référant=>';
echo $_SERVER['HTTP_REFERER'].'
';
echo 'Adresse ip de l\'utilisateur=>';
echo $_SERVER['REMOTE_ADDR'].'
';
?>

Vous pouvez avoir la liste des variables serveurs et d'environnement en créant le petit fichier PHP ci-dessous et en l'exécutant.

<?php
phpinfo();
?>

7. Récupérer facilement les variables

Pour récupèrer facilement les variables, vous pouvez utiliser la fonction PHP extract. Elle va exporter votre tableau associatif et créer une variable pour chaque clé du tableau.

extract($_POST,EXTR_OVERWRITE);

Cette fonction va créer une variable pour chaque clé du tableau associatif $_POST.Si on a :

  • $_POST['nom']
  • $_POST['prenom']
  • $_POST['age']

La fonction extract() va créer les variables suivantes :

  • $nom
  • $prenom
  • $age

Le second argument sert à gérer les collision de variables. Donc il sert à dire ce que l'on fait si une variable existe déjà. Par défaut les variables qui existent déjà seront écrasées.

Type signification
EXTR_OVERWRITE Ecrase les variables existantes
EXTR_SKIP N'écrase pas les variables existantes
EXTR_PREFIX_SAME Si une variable existe déjà, une nouvelle variable est créée avec un préfixe donné en 3ème argument à la fonction
EXTR_PREFIX_ALL Crée de nouvelles variables avec le préfixe passé en 3ème argument pour toutes les clés du tableau
EXTR_PREFIX_INVALID Crée de nouvelles variables avec le préfixe passé en 3ème argument pour les noms de variable invalides (par exemple $1)


Voilà un petit exemple qui montre comment fonctionne la fonction extract. La variable "$nom" existant déjà, une nouvelle variable va être créée "$new_nom".

<?php
$nom = 'blabla';
$_POST['nom'] = 'jenny';

extract($_POST,EXTR_PREFIX_SAME,'new');

echo 'variable "nom" =>'.$nom.'<br>';
echo 'variable "new_nom" =>'.$new_nom.'<br>';
?>


Résultat de cet exemple :

variable "nom" =>blabla
variable "new_nom" =>jenny

8. Conclusion

Avec ces quelques petits exemples, l'utilisation des tableaux associatifs ne devrait plus avoir de secrets pour vous !

Gloups... une bouée.. le capitaine se noie... flyingcow


Ajouter une réponse
Nom
Email
Titre

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Mémoriser mon nom et mon email : Oui Non
www.phpdebutant.org © 2016 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement
DEBUTEZ !
 
  0.  Introduction
  1.  Afficher une phrase ou une image
  2.  Afficher la date et l'heure
  3.  PHP dans du code HTML
  4.  La concaténation
  5.  Récupérer les valeurs d'un formulaire
  6.  Les structures de contrôle
  7.  Ecrire et lire dans un fichier texte
  8.  Les fonctions utilisateurs
  9.  Les variables d'environnement
  10.  Quelques fonctions utiles
  11.  SQL/MySQL (Create, Alter & Drop)
  12.  SQL/MySQL (Insert et Select)
  13.  SQL/MySQL (Delete et Update)
  14.  SQL/MySQL (Where)
  15.  Fonctions PHP pour mySQL
  16.  Interroger une table MySQL
  17.  Alimenter une ou plusieurs tables mySQL
  18.  Les pseudos-frames
  19.  Les sessions php4
  20.  Affichage page par page
  21.  Images dynamiques
  22.  Ca marche pas ?
  23.  Variables globales à OFF
  24.  Les variables dynamiques