Identification

Identifiant
Mot de passe
Mot de passe oublié ?

Partage de documents

Cours



Sondage

Quelle est votre profession ?
Etudiant / Elève
Enseignant / Pédagogue
Webmestre / Développeur
Journaliste / Blogueur
Autre
 
Comment trouvez-vous le système Manhali ?
Très utile
Utile
Peu utile
Inutile

  
 

Chapitre précédent
Chapitre suivant
Les variables superglobales
Informations sur le chapitre :
Cours : Langage PHP
 
elhaddioui_ismail
  • Auteur : elhaddioui_ismail
  • Créé le : 18/05/2014 - 10:31
  • E-mail : ismail.elhaddioui
  • Modifié le : 19/05/2014 - 11:37
  • Lu : 2422 fois
  • Réponses correctes d'auto-évaluation : 61.82 %
  • Licence : BY(Paternité) - NC(Pas d'Utilisation Commerciale) - ND(Pas de Modification)
  • Note : 1/62/63/64/65/66/6 (2 Votes : 6/6)
  •  
    • Introduction

    • Les Superglobales sont des variables internes qui sont toujours disponibles, quelque soit le contexte du script.

      Les variables superglobales sont :

      • $_GET : Les valeurs provenant de l'URL ;
      • $_POST : Les valeurs envoyées par formulaire ;
      • $_FILE : Les fichiers envoyés par formulaire ;
      • $_REQUEST : Variables de requête HTTP ($_GET, $_POST et $_COOKIE) ;
      • $_COOKIE : Les valeurs transmises au moyen de cookies par le navigateur ;
      • $_SESSION : Les variables des sessions ;
      • $_SERVER : Les valeurs mises en place par le serveur Web ;
      • $GLOBALS : L'ensemble des variables du script ;
      • $_ENV : Les variables d'environnement (système d'exploitation).

       

    • L'URL et les formulaires : GET, POST, File et REQUEST

      • $_GET

      Un tableau qui contient les variables passées à la page courante par la méthode GET, c'est-à-dire via l'URL (Uniform Resource Locator, en français localisateur uniforme de ressource. Tout simplement, c'est l'adresse Web de la page), exemple:

      http://www.votre-site-web.com/index.php?recherche=informatique

      Dans cet exemple, la page php va rechercher la valeur de la variable "recherche", c'est-à-dire "informatique".

      En général, pour envoyer des variables par la méthode GET à la page : http://www.site-web.com/page.php on les ajoute à l'URL de la page après le point d'interrogation "?" en séparant les variables par le signe "&":

      http://www.site-web.com/page.php?var1=valeur1&var2=valeur2&var3=valeur3

      On peut récupérer les valeurs de ces variables par : $_GET['var1'], $_GET['var2'] et $_GET['var3'].

      Exemple : Testez l'exemple suivant qui contient deux pages web : "choisir_page.php" pour envoyer les données par GET et "afficher_page.php" pour afficher ces données :

      - Source de : choisir_page.php

      <a href="afficher_page.php?cours=langage php&page=3">Cliquer pour afficher la page 3</a>
      

      - Source de : afficher_page.php

      <a href="choisir_page.php">Retour</a><hr />
      <?php
      if (!empty($_GET['cours']) && !empty($_GET['page'])){
          echo "La page demandée est : ".$_GET['page']." du cours : ".$_GET['cours'];
      	// Affichage de la page
      } else echo "Aucune page demandée !";
      ?>

      Pour afficher les liens de plusieurs pages en utilisant la boucle "for", modifiez la page "choisir_page.php" de la façon suivante :

      <?php
      for ($i=1;$i<=10;$i++){
          echo "<a href=\"afficher_page.php?cours=langage php&page=$i\">Page $i</a><br />";
      }
      ?>
      • $_POST

      Un tableau qui contient les variables passées par la méthode POST. Cette méthode est utilisée souvent pour les formulaires. Pour récupérer les données envoyées par POST, on utilise la variable superglobale "$_POST" :

      $_POST['var1'], $_POST['var2'], $_POST['var3']...

      Pour tester l'exemple précédent avec la méthode POST, on va créer un formulaire dan la page "choisir_page.php" qui envoie le nom du cours et la page demandée. Puis, on va modifier tous les "$_GET" par "$_POST" dans la page "afficher_page.php".

      - Source de : choisir_page.php

      <form action="afficher_page.php" method="POST">
          Cours : <input type="text" name="cours" />
      <select name="page">
      		<?php
      		for ($i=1;$i<=10;$i++){
      			echo "<option value=\"$i\">Page $i</option>";
      		}
      		?>
      </select>
      <input type="submit" value="OK" />
      </form>

      - Source de : afficher_page.php

      <a href="choisir_page.php">Retour</a><hr />
      <?php
      if (!empty($_POST['cours']) && !empty($_POST['page'])){
          echo "La page demandée est : ".$_POST['page']." du cours : ".$_POST['cours'];
      	// Affichage de la page
      } else echo "Aucune page demandée !";
      ?>

      Remarque : On peut envoyer un formulaire par la méthode GET en remplaçant "POST" par "GET" dans l'attribut "method" :

      <form action="afficher_page.php" method="POST">

      Par :

      <form action="afficher_page.php" method="GET">

      Cependant, toutes les données envoyées par GET sont affichées dans l'URL dans la barre d'adresse du navigateur. Ainsi, chaque navigateur a une longueur maximale de l'URL (Pour Internet Explorer, c'est seulement 2083 caractères !), alors on ne peut envoyer un grand texte par la méthode GET. Pour ces deux raisons, il est recommandé d'utiliser la méthode POST pour les formulaires.

      Remarque 2 : Pour envoyer les données à la même page, on peut tout simplement laisser l'attribut "action" vide : <form action="" method="POST">

      • $_FILES

      Ce tableau devrait contenir toutes les informations d'un fichier téléversé par un formulaire, ses informations sont :

      • $_FILES['mon_fichier']['name'] : Le nom original du fichier, tel que sur la machine de l'utilisateur.
      • $_FILES['mon_fichier']['type'] : Le type MIME du fichier, si le navigateur a fourni cette information. Par exemple, cela pourra être "image/gif".
      • $_FILES['mon_fichier']['size'] : La taille en octets du fichier téléchargé.
      • $_FILES['mon_fichier']['tmp_name'] : Le nom temporaire du fichier qui sera chargé sur la machine serveur.
      • $_FILES['mon_fichier']['error'] : Le code d'erreur associé au téléchargement de fichier (Un numéro entre 0 et 8 , mais la valeur 5 n'existe pas !) :
      • 0 : Aucune erreur, le téléchargement est correct.
      • 1 : Le fichier téléchargé excède la taille de upload_max_filesize, configurée dans le php.ini.
      • 2 : Le fichier téléchargé excède la taille de MAX_FILE_SIZE, qui a été spécifiée dans le formulaire HTML.
      • 3 : Le fichier n'a été que partiellement téléchargé.
      • 4 : Aucun fichier n'a été téléchargé.
      • 6 : Un dossier temporaire est manquant.
      • 7 : Echec de l'écriture du fichier sur le disque.
      • 8 : L'envoi de fichier est arrêté par l'extension.

      Exemple d'envoie d'une image :

      <?php
      if (!empty($_FILES['mon_fichier'])){
          echo $_FILES['mon_fichier']['name']."<br />"; // ex : photo5.jpg
      	echo $_FILES['mon_fichier']['type']."<br />"; // ex : image/jpeg
      	echo $_FILES['mon_fichier']['size']."<br />"; // ex : 72384 octets
      	echo $_FILES['mon_fichier']['tmp_name']."<br />"; // ex : E:\wamp\tmp\php12E4.tmp
      	echo $_FILES['mon_fichier']['error']."<br />"; // ex : 0 - Aucune erreur
      	if ($_FILES['mon_fichier']['error'] == 0) { // Si aucune erreur n'est détectée
      		// Déplacer le fichier dans le dossier courant
      		move_uploaded_file($_FILES['mon_fichier']['tmp_name'],$_FILES['mon_fichier']['name']);
      		echo "<img src=\"".$_FILES['mon_fichier']['name']."\">"; // Afficher l'image
      	}
      }
      else {
      	echo "<form action=\"\" method=\"POST\" enctype=\"multipart/form-data\">";
      	echo "<input name=\"mon_fichier\" type=\"file\" />";
      	echo "<input type=\"submit\" value=\"OK\" /></form>";
      }
      ?>

      Attention : Cet exemple ne contient que le code minimal pour envoyer un fichier, il n'est pas sécurisé contre les attaques web. On va voir comment le sécuriser après dans les chapitres qui suivent.

      Remarque : On doit impérativement ajouter l'attribut enctype="multipart/form-data" à la balise "form" pour envoyer un fichier.

      • $_REQUEST

      Un tableau qui contient par défaut le contenu des variables $_GET, $_POST et $_COOKIE, on l'utilise quand on ne sait pas exactement est ce que la variable provenant d'un URL (GET), d'un formulaire (POST) ou d'un cookie.

      <?php
      echo $_GET['var'] ."<br />";
      echo $_REQUEST['var'] ."<br />"; //équivalent à la ligne précédente
      ?>

      Ouvrir depuis le navigateur l'url : http://localhost/Projet1/request.php?var=coucou

      Remarque : Pour utiliser les variables superglobales d'une façon dynamique, on fait : $_GET[$var1], $_POST[$var1]...

      A tester depuis : http://localhost/Projet1/get_dynamiques.php?var2=Bonjour

      <?php
      $var1 = "var2";
      echo $_GET[$var1]; //Bonjour
      echo $_GET['var2']; //Bonjour (identique à la ligne précédente)
      ?>
    • Les cookies : $_COOKIE

    • Un cookie est une suite d'informations envoyée par un serveur web au navigateur de la machine client. Les cookies sont utilisés pour stocker des informations spécifiques sur l'utilisateur, comme les préférences du site (Langue préférée pour les sites multilingues, thème préféré, mode d'affichage selon la résolution d'écran…).

      Pour lire le contenu d'un cookie stocké sur l'ordinateur de l'utilisateur, on utilise la variable superglobale $_COOKIE : $_COOKIE["nom"]), et pour stocker un nouveau cookie, on utilise la fonction PHP setcookie() : setcookie("nom","valeur",date_d'expiration).

      La date d'expiration doit être en timestamp. C'est le nombre de secondes écoulées depuis le début de l'année 1970, c'était l'époque UNIX (1er janvier 1970 00:00:00 GMT).

      Pour connaitre le timestamp actuel, on appelle la fonction time(), et pour définir la date d'expiration, on fait : time() + nombre de secondes dans la durée d'expiration : un jour = 24*60*60 secondes.

      setcookie("prenom","ismail",time()+60*60*24*7) : expiré après une semaine d'aujoud'hui

      setcookie("prenom","ismail",time()+60*60*24*30) : expiré après un mois

      setcookie("prenom","ismail",time()+60*60*24*365) : expiré après une année

      Exemple complet de choix de langue en utilisant les cookies :

      <?php
      if (!empty($_GET['modifier'])){ // Si l'utilisateur a choisit de modifier la langue
          if (!empty($_GET['langue'])){ // s'il a choisit une autre langue
      		setcookie("langue",$_GET['langue'],time()+60*60*24*30); //envoie cookie langue exp: 1 mois 
      		echo "Langue : ".$_GET['langue']." - C'est enregistré !<br />";
      		echo "<a href=\"?\">Actualiser la page</a><br />";
      	}
      	else { // affichage des langues disponibles
      		echo "Choisissez une autre langue : <br />";
      		echo "<a href=\"?modifier=oui&langue=Français\">- Français</a><br />";
      		echo "<a href=\"?modifier=oui&langue=Arabe\">- Arabe</a><br />";
      		echo "<a href=\"?modifier=oui&langue=Anglais\">- Anglais</a><br />";
      	}
      }
      else if (!empty($_COOKIE['langue'])){ // on teste est ce qu'il existe le cookie langue
      	echo "Vous avez choisit la langue : ".$_COOKIE['langue']; //Afficher la valeur du cookie langue
      	echo " - <a href=\"?modifier=oui\">Modifier</a><hr />";
      }
      ?>
    • Les sessions : $_SESSION

    • La session est un moyen pour conserver une variable entre plusieurs pages, c'est l'équivalent d'un cookie en plus sécurisé, parce que les informations sont stockées sur le serveur et non chez le client. Les sessions sont utilisées principalement pour la procédure de connexion à un site web.

      La variable superglobale $_SESSION est utilisée pour conserver ou afficher les variables de sessions :

      $_SESSION['pseudo'] = "john"; //créer une nouvelle variable de session.

      echo $_SESSION['pseudo']; //afficher "John"

      Il existe deux fonctions indispensables pour utiliser les sessions :

      session_start() : pour démarrer une nouvelle session ou appeler la session existante. On doit appeler cette fonction au début de toutes les pages du site avant tout code HTML et avant tout affichage PHP par la fonction echo().

      session_destroy() : Pour détruire la session en cours. On l'appelle seulement pour se déconnecter du site.

      Exemple concret d'un site web protégé par l'authentification via les sessions :

      - Source de : login.php

      <form action="verifier_login.php" method="POST"> //formulaire d'authentification
          Nom d'utilisateur : <input type="text" name="login" />
      	Mot de passe : <input type="password" name="motdepasse" />
        <input type="submit" value="OK" />
      </form>
      <br />Nom d'utilisateur correct est : admin
      <br />Mot de passe correct est : agent007

      - Source de : verifier_login.php

      <?php
      session_start(); //On démarre la session
      $login_correct = "admin"; //En réalité, on doit tirer ces informations de la base de données
      $pass_correct = "agent007";
      if (!empty($_POST['login']) && !empty($_POST['motdepasse'])){
          if ($_POST['login'] == $login_correct && $_POST['motdepasse'] == $pass_correct){
      		$_SESSION['pseudo'] = $login_correct; //Création d'une variable de session
      		echo "<br />Bienvenue Monsieur : ".$login_correct;
      		echo "<br /><a href=\"page_protegee.php\">Entrez au site</a>";
      	}
      	else {
      		echo "<br />Nom d'utilisateur ou mot de passe incorrect !";
      		echo "<br /><a href=\"login.php\">Retour</a>";
      	}
      }
      else {
      	echo "<br />Vous devez s'authentifier d'abord !";
      	echo "<br /><a href=\"login.php\">Retour</a>";
      }
      ?>

      - Source de : page_protegee.php

      <?php
      session_start(); //On appelle la session
      if (isset($_SESSION['pseudo']) && !empty($_SESSION['pseudo'])){ //On teste si la session est ouverte
          echo "<br />Utilisateur connecté : ".$_SESSION['pseudo']; //Affichage de la variable de session
      	echo "<br /><a href=\"deconnexion.php\">Déconnexion</a>";
      }
      else {
      	echo "<br />Page protégée !";
      	echo "<br /><a href=\"login.php\">Retour</a>";
      }
      ?>

      - Source de : deconnexion.php

      <?php
      session_start(); //On appelle la session
      session_destroy(); // On détruit la session
      echo "<br />Au revoir !";
      echo "<br /><a href=\"login.php\">Connexion</a>";
      ?>

      Essayez d'ouvrir la page protégée avant que vous effectuez la connexion et vous remarquerez que ça ne marche pas : http://localhost/Projet1/page_protegee.php

    • Autres variables superglobales

      • $GLOBALS

      C'est un tableau contenant l'ensemble des variables globales du script. Pour afficher la valeur d'une variable, on note : $GLOBALS['nom_variable'].

      <?php
      $var1 = 46 ;
      function test(){
          $var2 = 10 ;
      }
      echo $GLOBALS['var1']." - ".$GLOBALS['var2']; // affiche : 46
      // Affiche la valeur de $var1 seulement
      // $var2 est une variable locale à la fonction "test" (n'est pas globale).
      ?>
      • $_SERVER

      C'est un tableau contenant des informations sur le serveur web, la page courante et la machine client, exemples:

      • $_SERVER['PHP_SELF'] : Le nom du fichier du script en cours d'exécution, par rapport à la racine web (ex : /Projet1/page1.php).
      • $_SERVER['SERVER_ADDR'] : L'adresse IP du serveur.
      • $_SERVER['REMOTE_ADDR'] : L'adresse IP du client qui demande la page courante.
      • $_SERVER['HTTP_USER_AGENT'] : Contient les informations sur la machine client comme le navigateur utilisé et le système d'exploitation (ex : Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0).
      • $_SERVER['HTTP_REFERER'] : L'adresse de la page qui a conduit le client à la page courante.

      Pour voir la liste complète des variables $_SERVER et leurs contenus, exécutez ce petit script :

      <?php
      foreach ($_SERVER as $header => $value)
          echo "$header : $value <br />\n";
      ?>
      • $_ENV

      Un tableau de variable passé au script courant, via la méthode d'environnement. Cette variable est importée dans l'espace de nom global de PHP, depuis l'environnement dans lequel l'exécutable PHP fonctionne. De nombreuses valeurs sont fournies par le shell qui exécute PHP, et différents systèmes pouvant disposer de différents shell.

      Utilisation : $_ENV["variable_d'environnement"]


    1. Quel est le nombre de variables envoyées par l'url : index.php?titre=langage_php&page=34&ligne=14

    2. 1
      2
      3
      4

    3. Le cookie suivant expire après combien des jours : setcookie("prenom","ismail",time()+259200)

    4. 1 jour
      3 jours
      7 jours

    5. Quand doit on appeler la fonction session_start() ?

    6. Lorsqu'on veut démarrer ou détruire une session
      Lorsqu'on veut utiliser les variables d'une session existante
      Dans les deux cas

    Chapitre précédent
    Chapitre suivant

     
    InfoNuls 2010-2015 - Powered by Manhali