Médiaforma

All posts tagged get

Par définition, les propriétés de type private ne peuvent être accédées que par les méthodes de la classe dans laquelle elles ont été définies. Pour cela, on utilise des fonctions publiques appelées getter et setter. Leur nom commence toujours par get pour le getter et par set pour le setter.

Supposons que la propriété suivante soit définie dans la classe :

private $fyeo = "For Your Eyes Only";

Pour pouvoir lire et modifier cette propriété depuis une instanciation de la classe, vous définirez les fonctions getFyeo() et setFyeo() comme ceci :

public function getFyeo(){
  return $this -> fyeo;
}
public setFyeo($nouveau){
  $this -> fyeo = $nouveau;
}

La fonction publique getFyeo() lit le contenu de la propriété private $fyeo et la retourne à l’appelant.

La fonction publique setFyeo() affecte la valeur qui lui est passée en paramètre à la propriété private $fyeo.


<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Requête get $.ajax()</title>
    <style>
      #zone {
        width: 300px;
        height: 315px;
        border-style: solid;
        border-width: 3px;
        border-color: black;
      }
    </style>
  </head>
  <body>
    <script src="jquery.js"></script>
    <h2>Les lois de la robotique, selon Isaac Asimov</h2>
    <button id="loi1">Loi N° 1</button>
    <button id="loi2">Loi N° 2</button>
    <button id="loi3">Loi N° 3</button><br><br>
    <div id="zone"></div>
    <script>
      $(function() {
        $('#loi1').on('click', function(){
          $.ajax({
            type: 'GET',
            url: 'donnees.php?l=1',
            timeout: 3000,
            success: function(data){
              $('#zone').html(data);
            },
            error: function(){
              $('#zone').html('Cette requête AJAX n\'a pas abouti');
            }
          });
        });
        $('#loi2').on('click', function(){
          $.ajax({
            type: 'GET',
            url: 'donnees.php?l=2',
            timeout: 3000,
            success: function(data){
              $('#zone').html(data);
            },
            error: function(){
              $('#zone').html('Cette requête AJAX n\'a pas abouti');
            }
          });
        });
        $('#loi3').on('click', function(){
          $.ajax({
            type: 'GET',
            url: 'donnees.php?l=3',
            timeout: 3000,
            success: function(data){
              $('#zone').html(data);
            },
            error: function(){
              $('#zone').html('Cette requête AJAX n\'a pas abouti');
            }
          });
        });
      });
    </script>
  </body>
</html>

Le code est bien plus “verbeux” qu’avec la fonction $.get(), mais il est aussi très simple à comprendre, facile à maintenir et plus complet. Ici, nous avons introduit un message d’erreur si la requête n’aboutit pas :

error: function(){
  $('#zone').html('Cette requête AJAX n\'a pas abouti');
}

Ce code est accessible ici : https://www.mediaforma.com/encours/getAjax.htm


La méthode load() n’est pas la seule à pouvoir récupérer des données via AJAX. Vous pouvez également utiliser :

  • la fonction jQuery $.get() pour obtenir des données envoyées par le serveur en utilisant une requête HTTP GET.
  • la fonction jQuery $.post() pour obtenir des données envoyées par le serveur en utilisant une requête HTTP POST.

Vous utiliserez la fonction $.get() si les données envoyées au serveur sont de petite taille. Vous utiliserez la fonction $.post() si les données envoyées au serveur sont de grande taille ou contiennent des informations confidentielles (des mots de passe par exemple).

 

Voici la syntaxe de la fonction $.get() :

$.get(URL, function() {
  // Une ou plusieurs instructions exécutées lorsque les données ont été rapatriées
});

 

A titre d’exemple, nous allons exécuter un fichier PHP afin d’extraire les données qui y sont stockées. Ces données correspondent aux trois lois de la robotique d’Isaac Asimov. L’URL passée sera du type suivant :

donnees?l=1 // pour obtenir la première loi
donnees?l=2 // pour obtenir la deuxième loi
donnees?l=3 // pour obtenir la troisième loi

 

Voici le code du fichier PHP :

<?php
  $loi = array("Un robot ne peut porter atteinte à un être humain, ni, restant passif, permettre qu'un être humain soit exposé au danger.",
               "Un robot doit obéir aux ordres que lui donne un être humain, sauf si de tels ordres entrent en conflit avec la Première loi.",
               "Un robot doit protéger son existence tant que cette protection n'entre pas en conflit avec la Première ou la Deuxième loi.");
  $l=$_GET["l"];
  echo "<u>Loi de la robotique N° ".$l."</u><br><br>";
  echo "<b>".$loi[$l-1]."</b>";
?>

 

Les premières lignes définissent le tableau $loi et y mémorisent les trois lois de la robotique.

La valeur passée dans l’URL est récupérée et stockée dans la variable $l :

$l=$_GET["l"];

 

L’instruction suivante affiche un texte souligné :

echo "<u>Loi de la robotique N° ".$l."</u><br><br>";

 

Et la dernière instruction affiche la loi extraite du tableau $loi :

echo "<b>".$loi[$l-1]."</b>";

 

 

 

Voici le résultat obtenu lorsque l’utilisateur clique sur le premier bouton :

 

 

Et voici le code HTML5/jQuery utilisé :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Requête AJAX $.get()</title>
    <style>
      #zone {
        width: 300px;
        height: 315px;
        border-style: solid;
        border-width: 3px;
        border-color: black;
      }
    </style>
  </head>
  <body>
    <script src="jquery.js"></script>
    <h2>Les lois de la robotique, selon Isaac Asimov</h2>
    <button id="loi1">Loi N° 1</button>
    <button id="loi2">Loi N° 2</button>
    <button id="loi3">Loi N° 3</button><br/>
    <div id="zone"></div>
    <script>
      $(function() {
        $('#loi1').on('click', function(){
          $.get('donnees.php?l=1',function(data){
            $('#zone').html(data);
          });
        });
        $('#loi2').on('click', function(){
          $.get('donnees.php?l=2',function(data){
            $('#zone').html(data);
          });
        });
        $('#loi3').on('click', function(){
          $.get('donnees.php?l=3',function(data){
            $('#zone').html(data);
          });
        });
      });
    </script>
  </body>
</html>

 

Le corps du document définit un titre H2, trois boutons et un élément div d’id #zone.

<h2>Les lois de la robotique, selon Isaac Asimov</h2>
<button id="loi1">Loi N° 1</button>
<button id="loi2">Loi N° 2</button>
<button id="loi3">Loi N° 3</button><br/>
<div id="zone"></div>

 

Lorsque le premier bouton est cliqué, une requête GET est effectuée sur l’URL https://www.mediaforma.com/encours/donnees.php?l=1 :

$('#loi1').on('click', function(){
  $.get('donnees.php?l=1',function(data){

 

Lorsque les données ont été rapatriées, la fonction callback s’exécute. Les données récupérées sont affichées dans l’élément div #zone :

$('#zone').html(data);

 

Les deux autres boutons ont un comportement similaire, à ceci près qu’ils envoient (respectivement) les paramètres l=2 et l=3 au programme PHP. Ceci afin d’afficher la deuxième et la troisième loi de la robotique.

Cet exemple est accessible à partir de l’URL suivante : https://www.mediaforma.com/encours/get.htm


La façon la plus simple de transmettre des données à une page PHP consiste à les insérer dans l’URL :

http://www.adressedusite.com/unepage.php?param1=valeur1&param2=14

Ici par exemple, deux données sont transmises à la page unepage.php : param1 et param2. Ces deux données ont pour valeur “valeur1” et “14”.

Remarque

Vous pouvez transmettre autant de données que vous voulez, mais la taille des URL doit être inférieure à 256 caractères, sans quoi, certains navigateurs risquent de tronquer les URL trop longues.

Pour récupérer les données, vous utiliserez le tableau superglobal $_GET[] en l’interrogeant sur le nom de la donnée dont vous voulez récupérer la valeur :

<?php
  echo "La donnée param1 a pour valeur ".$_GET["param1"]."<br>";
  echo "La donnée param2 a pour valeur ".$_GET["param2"]."<br>";
?>

Exécutons ce code en entrant son adresse dans la barre d’adresses du navigateur. Les deux données ont bien été récupérées dans le tableau superglobal $_GET :

Si vous affichez la même page en supprimant les données de l’URL, deux erreurs sont générées :

Pour éviter ces problèmes, utilisez la fonction isset() pour tester si les données qui sont supposées être transmises dans l’URL sont effectivement présentes :

<?php
  if (isset($_GET["param1"]))
    echo "La donnée param1 a pour valeur ".$_GET["param1"]."<br>";
  if (isset($_GET["param2"]))
    echo "La donnée param2 a pour valeur ".$_GET["param2"]."<br>";
  if (!isset($_GET["param1"]) && !isset($_GET["param2"]))
    echo "Aucune donnée n'a été transmise à ce script PHP";
?>

Si le paramètre param1 est défini, on affiche sa valeur.

Si le paramètre param2 est défini, on affiche sa valeur.

Si aucun des paramètres param1 et param2 ne sont définis, on affiche un message pour l’indiquer à l’utilisateur.

Essayons ces trois configurations.

Nous transmettons le paramètre param1 mais pas le paramètre param2. Aucune erreur n’est détectée et la valeur du paramètre param1 est affichée.

Nous transmettons le paramètre param2 mais pas le paramètre param1. Aucune erreur n’est détectée et la valeur du paramètre param2 est affichée.

Nous omettons les paramètres param1 et param2 de l’URL. Un message indiquant que ces paramètres n’ont pas été transmis est affiché.

 

Etant donné que l’utilisateur peut modifier l’URL affiché dans la barre d’adresses du navigateur, il est vital d’échapper les données reçues pour éviter les problèmes d’injection de type Cross-Site Scripting. Pour cela, vous appliquerez la fonction htmlspecialchars() à chacune des données récupérées. Le code à utiliser est le suivant :

<?php
  if (isset($_GET["param1"]))
    echo "La donnée param1 a pour valeur ".htmlspecialchars($_GET["param1"])."<br>";
  if (isset($_GET["param2"]))
    echo "La donnée param2 a pour valeur ".htmlspecialchars($_GET["param2"])."<br>";
  if (!isset($_GET["param1"]) && !isset($_GET["param2"]))
    echo "Aucune donnée n'a été transmise à ce script PHP";
?>

Dans ce code, nous avons juste protégé l’affichage en appliquant la fonction htmlspecialchars aux deux paramètres qui auraient pu être altérés par l’utilisateur.