Les chaînes de requêtes (QueryStrings) correspondent à des informations associées à l'adresse URL avec un point d'interrrogation comme séparateur.
http://www.laltruiste.com/page.php?chaine_de_requete
Une chaîne de requête doit être constituée d'un ou plusieurs éléments dont chacun est associé à une valeur.Si la chaîne de requête contient plusieurs éléments, alors chaque couple élément/valeur doit être séparé par un caractère esperluette (&).
?element=valeur&element2=valeur2&...&elementN=valeurN
L'inconvénient principal des chaînes de requêtes réside dans le fait que les données transmises au serveur par ce biais sont visibles par les utilisateurs dans le champ Adresse de leur navigateur.
De plus, une chaîne de requêtes ne peut dépasser le maximum de 255 caractères.
Ainsi, l'utilisation de cette technique peut générer des problèmes de sécurité et des limitations quant à la taille des données à transmettre à une application Web.
Il existe deux méthodes pour l'utilisation des chaînes de requêtes :
<form action="page.php?element=valeur" method="post"> <input type="text" name="nom" value="DUPUIS"> <input type="text" name="prenom" value="Michel"> <input type="submit" name="Soumettre" value="Soumission"> </form> |
<form action="page.php" method="get"> <input type="text" name="nom" value="DUPUIS"> <input type="text" name="prenom" value="Michel"> <input type="submit" name="Soumettre" value="Soumission"> </form> |
Dans le premier cas, seules les informations contenues dans l'adresse indiquée par l'attribut action, seront envoyées par l'intermédiaire de la collection QueryString.
element=valeur
Dans le second cas, tous les éléments du formulaire seront transmis au moyen de la collection QueryString, à la page destinataire soit page.php.
nom=DUPUIS&prenom=Michel
En conséquence, l'expression method="get" provoque la transmission complète et automatique d'un formulaire à partir d'une chaîne de requête.
La variable d'environnement QUERY_STRING permet d'extraire une chaîne de requêtes contenu dans l'adresse URL transmise, l'ensemble des éléments et leur valeur y compris celle du bouton de soumission.
<? echo $QUERY_STRING; ?> // Retourne nom=DUPUIS&prenom=Michel&Soumettre=Soumission
Plus précisément, en spécifiant simplement une variable portant l'identificateur d'un élément, il devient possible de récupérer la valeur liée.
<? echo $nom . " " . $prenom; // Retourne DUPUIS Michel
La variable prédéfinie HTTP $_GET permet également de récupérer la valeur d'un élément d'une chaîne de requête. La variable $_GET est en fait un tableau associatif dont les clés sont les identificateurs et les d'une chaîne de requêtes associé aux valeurs liées.
<? echo $_GET["nom"] . " " . $_GET["prenom"]; // Retourne DUPUIS Michel
Une boucle peut être utilisée pour parcourir automatiquement l'ensemble des éléments d'une chaîne de requête.
<? echo "<ol>"; while (list($cle, $valeur) = each($_GET)) { echo "<li>".$cle." : ".$valeur."</li>"; } echo "</ol>" ?> // affiche <ol> <li>nom : DUPUIS</li> <li>prenom : Michel</li> <li>Soumettre : Soumission</li> </ol>
La boucle foreach plus compacte produit le même effet.
foreach($HTTP_GET_VARS as $cle => $valeur) { echo $cle." : ".$valeur."\n"; }
Le tableau associatif $_GET étant définie dans la version PHP 4.1.0, il faudra utiliser la variable $HTTP_GET_VARS pour assurer la compatibilité avec des versions plus anciennes.
Un autre tableau associatif $_POST ou $HTTP_POST_VARS contient toutes les variables passées au script courant par l'intermédiaire d'une requête HTTP POST (voir les formulaires).
Exemple [voir]<!-- Formulaire --> <html> <body> <form action="traitement.php" method="get" name="formGet"> <u>Saisir un titre :</u><br> <input type="text" name="Titre" value="Fatrasie" size="20"><br> <textarea name="Paragraphe" cols="30" rows="4"> La chose va très mal Où point n'a de justice La chose va très mal Dit un veau de métal </textarea> <input type="submit" name="Soumettre" value="Soumission"> </form> </body> </html> <html> <body> <h2>La chaîne de requête</h2> <h3> <? echo $QUERY_STRING; ?> </h3> <table> <tr> <th>Elément</th> <th>Valeur</th> </tr> <? $index = 0; foreach($HTTP_GET_VARS as $cle => $valeur) { $index++; echo "<tr><td><u>" . $cle . "(" . $index . ") </u></td><td><b>" . $valeur . "</b></td></tr>"; } ?> </table> </body> </html> |