Trackin
php019
Voici le tutorial concernant les variables globales.Ceci n'est pas vraiment un tutorial, mais plutôt une note d'information.
En effet, depuis la version 4.2.0 de PHP, un paramètre de la configuration de PHP (celui concernant les variables globales) est initialisé par défaut à la valeur OFF lors de l'installation (ce qui implique que les variables globales ne sont pas activées) alors qu'auparavant, il était initialisé à ON (là, les variables globales sont activées).
En conséquence, suivant votre hébergeur, et donc de sa configuration de PHP, il se pourrait très bien que tout ce que vous avez vu jusque là ne fonctionne pas sur votre site.
Cependant, cette différence d'initialisation de paramètre n'influence que sur la méthode permettant de récupérer les variables, que ce soit :
- des variables provenant de formulaires POST ou GET
- la valeur des cookies
- des variables de sessions
- des variables d'environnement
- des variables de serveurs
Comme vous le savez, auparavant, pour récupérer nos variables, on les appelait simplement avec un $ suivi de leur nom.
Dans le cas où les variables globales ne sont activées, vous ne pouvez plus utiliser cette méthode afin de récupérer vos variables.
En effet, maintenant, nous récupérerons toutes cas variables et toutes ces valeurs par le biais de tableaux associatifs, que l'on résumer ainsi :
:: Tableaux associatifs :: | :: Description :: |
$_GET | Récupération des variables d'un formulaire GET ou des variables passées par une URL |
$_POST | Récupération des variables passées par un formulaire POST |
$_FILES | Récupération des variables de fichiers envoyés par un formulaire |
$_COOKIE | Récupération des valeurs des cookies |
$_SESSION | Récupération des variables de session |
$_ENV | Récupération des variables d'environnement |
$_SERVER | Récupération des variables serveur |
Voyons alors maintenant, cas par cas, comment récupérer ces variables et ces valeurs.
Le cas des formulaires GET (ou des variables passées par une URL) :
Supposons que l'on a une page index.htm contenant un formulaire permettant de saisir un login ainsi qu'un mot de passe.
On pourrait alors très bien avoir une page ressemblant à :
exemple1
- <html>
- <head>
- <title>Formulaire d'identification</title>
- </head>
- <body>
- <form action="login.php" method="get">
- Votre identifiant : <input type="text" name="login">
- <br />
- Votre mot de passe : <input type="password" name="pwd"><br />
- <input type="submit" value="Connexion">
- </form>
- </body>
- </html>
Pour récupérer nos variables correspondant aux champs login et pwd, nous allons utiliser le tableau associatif $_GET.
On aura lors, par exemple, la page login.php suivante :
exemple2
- <html>
- <head>
- <title>Page de récupération des variables</title>
- </head>
- <body>
- <?php
- // On teste si nos variables sont déclarées
- if (isset($_GET['login']) && isset($_GET['pwd'])) {
- // On fait ce que l'on veut ensuite
- echo 'Votre login est '.$_GET['login'].' Et votre mot de passe est '.$_GET['pwd'];
- }
- else {
- echo 'Les variables du formulaire ne sont pas déclarées.';
- }
- ?>
- </body>
- </html>
Simple, non ?
Précisons également, que lorsque l'on passe des variables par une URL, la méthode ne change absolument pas.
En effet, imaginons la page index.htm suivante :
exemple3
- <html>
- <head>
- <title>Juste un lien </title>
- </head>
- <body>
- <a href="./login.php?login=GLOBULE&pwd=haha">Notre lien</a>
- </body>
- </html>
Et bien en gardant la même page login.php que précédemment, l'affichage de la page login.php serait strictement identique que dans le cas du formulaire GET.
Le cas des formulaires POST :
La méthode et strictement identique que le cas des formulaires GET, sauf, naturellement, au lieu d'utiliser le tableau associatif $_GET, nous allons ici utiliser le tableau associatif $_POST.
En reprenant les mêmes exemples que précédemment, on aurait alors :
- la page index.htm
exemple4
- <html>
- <head>
- <title>Formulaire d'identification</title>
- </head>
- <body>
- <form action="login.php" method="post">
- Votre identifiant : <input type="text" name="login">
- <br />
- Votre mot de passe : <input type="password" name="pwd"><br />
- <input type="submit" value="Connexion">
- </form>
- </body>
- </html>
- la page login.php
exemple5
- <html>
- <head>
- <title>Page de récupération des variables</title>
- </head>
- <body>
- <?php
- // On teste nos deux variables
- if (isset($_POST['login']) && isset($_POST['pwd'])) {
- // On fait ce que l'on veut ensuite
- echo 'Votre login est '.$_POST['login'].' Et votre mot de passe est '.$_POST['pwd'];
- }
- else {
- 'Les variables du formulaire ne sont pas déclarées.';
- }
- ?>
- </body>
- </html>
Supposons que l'on dispose d'un formulaire nous permettant d'envoyer un fichier.
On pourrait alors très bien avoir une page index.htm ressemblant à :
exemple6
- <html>
- <head>
- <title>Formulaire permettant d'envoyer un fichier</title>
- </head>
- <body>
- <form action="send_fichier.php" method="post" ENCTYPE="multipart/form-data">
- Votre fichier : <input type="file" name="mon_fichier">
- <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="20000">
- <input type="submit" value="Envoyer">
- </form>
- </body>
- </html>
Dans la page send_fichier.php, on a alors accès aux différentes valeurs (suivant les indices) prises par le tableau associatif $_FILES.
Voici les valeurs que contient ce tableau (suivant les différents indices) :
:: Valeur du tableau :: | :: Description :: |
$_FILES['nom_de_la_variable']['name'] | Le nom original du fichier qui provient de la machine du client |
$_FILES['nom_de_la_variable']['type'] | Le type MIME du fichier |
$_FILES['nom_de_la_variable']['size'] | La taille du fichier en bytes (soit 8 bits ou un octet) |
$_FILES['nom_de_la_variable']['tmp_name'] | Le nom temporaire du fichier stocké sur le serveur |
$_FILES['nom_de_la_variable']['error'] | Le code erreur associé à l'upload |
Pour afficher ces valeurs, on pourrait très bien le code de la page send_fichier.php qui ressemble à :
exemple7
- <html>
- <head>
- <title>Page de récupération du fichier</title>
- </head>
- <body>
- <?php
- // On teste les différentes valeurs
- if (isset($_FILES['mon_fichier']['name']) && isset($_FILES['mon_fichier']['size']) && isset($_FILES['mon_fichier']['tmp_name']) && isset($_FILES['mon_fichier']['type']) && isset($_FILES['mon_fichier']['error'])) {
- // On affiche ces différentes valeurs
- echo 'Nom d'origine : '.$_FILES['mon_fichier']['name'].'<br />';
- echo 'Taille : '.$_FILES['mon_fichier']['size'].'<br />';
- echo 'Nom sur le serveur : '.$_FILES['mon_fichier']['tmp_name'].'<br />';
- echo 'Type de fichier : '.$_FILES['mon_fichier']['type'].'<br />';
- echo 'Code erreur : '.$_FILES['mon_fichier']['error'].'<br />';
- }
- else {
- echo 'Nos variables ne sont pas déclarées.';
- }
- ?>
- </body>
- </html>
Supposons que nous disposons d'une page send_cookie.php qui nous permet d'envoyer un cookie contenant le nom d'un visiteur.
On aurait alors par exemple :
exemple8
- <?php
- $temps = 365*24*5500;
- setcookie ("pseudo", "LA GLOBULE", time() + $temps);
- header ('Location : index.php');
- ?>
On pourrait alors avoir le code suivant :
exemple9
- <html>
- <head>
- <title>Page de récupération du cookie</title>
- </head>
- <body>
- <?
- // On teste notre cookie
- if (isset($_COOKIE['pseudo'])) {
- echo 'Votre nom est '.$_COOKIE['pseudo'];
- }
- else {
- echo 'Cookie non déclaré';
- }
- ?>
- </body>
- </html>
Les variables de sessions :
Supposons que l'on a le même formulaire d'identification que dans le tutorial consacré aux sessions.
On aura alors :
- la page index.htm
exemple10
- <html>
- <head>
- <title>Formulaire d'identification</title>
- </head>
- <body>
- <form action="login.php" method="post">
- Votre login : <input type="text" name="login">
- <br />
- Votre mot de passé : <input type="password" name="pwd"><br />
- <input type="submit" value="Connexion">
- </form>
- </body>
- </html>
Là, on remarque aucun changement.
- la page login.php
exemple11
- <?php
- // On teste nos variables du formulaire d'authentification par le biais du tableau associatif $_POST
- if (isset($_POST['login']) && isset($_POST['pwd'])) {
- // On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site
- $login_valide = "moi";
- $pwd_valide = "lemien";
- // on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe
- if ($login == $_POST['login'] && $pwd == $_POST['pwd']) {
- // dans ce cas, tout est ok, on peut démarrer notre session
- // on la démarre
- session_start ();
- // on enregistre les paramètres de notre visiteur comme variables de session ($_POST['login'] et $_POST['pwd'])
- $_SESSION['login'] = $_POST['login'];
- $_SESSION['pwd'] = $_POST['pwd'];
- // on redirige notre visiteur vers une page de notre section membre
- header ('location : page_membre.php');
- }
- else {
- // Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait
- echo '<body onLoad="alert('Membre non reconnu...')">';
- // puis on le redirige vers la page d'accueil
- header ('location : index.htm');
- }
- }
- else {
- echo 'Les variables du formulaire ne sont pas déclarées.';
- }
- ?>
- la page page_membre.php
exemple12
- <?php
- // On démarre la session (ceci est indispensable dans toutes les pages de notre section membre)
- session_start ();
- // On teste pour voir si nos variables ont bien été enregistrées
- echo '<html>';
- echo '<head>';
- echo '<title>Page de notre section member</title>';
- echo '</head>';
- echo '<body>';
- // On teste nos variables de session
- if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) {
- // On gère notre affichage
- echo 'Votre login est '.$_SESSION['login'].' et votre mot de passe est '.$_SESSION['pwd'].'.';
- echo '<br />';
- // On affiche un lien pour fermer notre session
- echo '<a href="./logout.php">Déconnection</a>';
- }
- else {
- echo 'Les variables de sessions ne sont pas déclarées.';
- }
- echo '</body>';
- echo '</html>';
- ?>
Les variables d'environnement :
Dans ce cas, rien de plus simple, puisque pour afficher le contenu d'une variable d'environnement, il suffit d'écrire $_ENV puis le nom de la variable que l'on désire afficher entre crochet.
Exemples :
exemple13
- <?php
- echo 'Système d'exploitation : '.$_ENV['OS'];
- echo '<br /><br />';
- echo 'Chemin du profil utilisateur : '.$_ENV['USERPROFILE'];
- ?>
On procède de la même manière que pour les variables d'environnement.
Exemples :
exemple14
- <?php
- echo 'Chemin du script courant : '.$_SERVER['PHP_SELF'];
- echo '<br /><br />';
- echo 'Adresse IP du client : '.$_SERVER['REMOTE_ADDR'];
- ?>
Pour récupérer plus rapidement ces variables :
Afin de récupérer facilement et rapidement vos variables, vous pouvez utiliser la fonction extract.
En effet, cette fonction exporte vos tableaux associatifs en créant une variable pour chaque indice de vos tableaux.
Par exemple, si on a une page index.htm contenant un formulaire à méthode POST, et que dans votre page login.php (ciblée par le champ ACTION du formulaire) vous traitez ces variables, vous pouvez écrire la ligne suivante (dans la page login.php, en tout début de page) :
exemple15
- <?php
- extract ($_POST, EXTR, OVERWRITE);
- ?>
Variables qui auront comme nom, la valeur de chacun des indices du tableau associatif $_POST.
Ceci implique que si l'on a un formulaire de type POST, avec, mettons un champ de name login et un autre de name pwd, et bien au lieu de récupérer à chaque fois la valeur des variables à la main, par le biais du tableau associatif $_POST, cette fonction nous permet d'obtenir directement des variables $login et $pwd (au lieu des valeurs de tableau $_POST['login'] et $_POST['pwd']).
Exemple :
- la page index.htm
exemple16
- <html>
- <head>
- <title>Formulaire d'identification</title>
- </head>
- <body>
- <form action="login.php" method="post">
- Votre identifiant : <input type="text" name="login">
- <br />
- Votre mot de passe : <input type="password" name="pwd"><br />
- <input type="submit" value="Connexion">
- </form>
- </body>
- </html>
- la page login.php
exemple17
- <html>
- <head>
- <title>Page de récupération des variables</title>
- </head>
- <body>
- <?php
- // On récupère nos deux variables
- extract ($_POST, EXTR, OVERWRITE);
- // On fait ce que l'on veut ensuite
- echo 'Votre login est '.$login.' Et votre mot de passe est '.$pwd;
- ?>
- </body>
- </html>
En clair, extract à créer :
- une variable $login comprenant la valeur de tableau $_POST['login']
- une variable $pwd comprenant la valeur de tableau $_POST['pwd']
Le second argument de la fonction sert à gérer les collisions de variables.
Voici les valeurs possibles du second argument de extract :
:: Valeurs :: | :: Description :: |
EXTR_OVERWRITE | Ecrase les variables déjà existantes |
EXTR_SKIP | N'écrase pas les variables déjà existantes |
EXTR_PREFIX_SAME | Si une variable de même nom existe déjà, une nouvelle variable sera créée avec un préfixe donné en troisième argument à extract |
EXTR_PREFIX_ALL | Cela crée de nouvelles variables avec le préfixe passé en troisième argument pour toutes les indices du tableau |
EXTR_PREFIX_INVALID | Cela crée de nouvelles variables avec le préfixe passé en troisième argument pour les noms de variables invalides (voir le tutorial sur les déclarations de variables) |