Créer de l’interactivité avec l'utilisateur

Comment fonctionne l'envoi de données ?

Échange de données HTTP
Le protocole HTTP prévois deux moyen d'échanger des données entre le client et le serveur.
Via le protocole POST et via le protocole GET. Tous les échanges entre client et serveur se feront donc via POST et GET.
Tous les échanges entre client et serveur passent par HTTP.
Envoi des données GET
La méthode GET permet d'envoyer très facilement des données qui passeront directement via l'URL.
Lors de l'envoi de données en GET, elles seront ajoutées à l'adresse de la ressource, après un "?", sous la forme "clef=valeur" et séparées par des "&".
https://example.com/afficher.php?texte=Bonjour%20le%20monde%20%21Envoi des données POST
La méthode POST permet d'envoyer des données plus complexes et qui passeront via le corps de la requête POST.
Lors de l'envoi de données en POST, elles seront transmise via le corps de POST dans un format relativement équivalent à GET.
POST / HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
say=Hi&to=MomEncodage des données
Pour transmettre les données, elles doivent d’abord être encodé dans un format qui garantisse leur intégrité.
90% du temps, le navigateur le fait pour nous. Mais si on forge nous même une URL, on doit le faire manuellement.
<?php
echo rawurlencode('Bonjour le monde !');
//print : Bonjour%20le%20monde%20%21Pour cela, il existe la fonction rawurlencode.
Décodage des données
Lors de la réception des données, elles seront décodées automatiquement par PHP.
Cependant, si jamais vous avez besoin de le faire vous même pour une raison ou une autre, c'est possible.
<?php
echo rawurldecode('Bonjour%20le%20monde%20%21');
//print : Bonjour le monde !Pour cela, il existe la fonction rawurldecode.
Envoyer des données

Envoyer des données via l'URL
La première façon d'envoyer des données, et souvent la plus simple, est de le faire directement via l'URL.
Pour cela, on va simplement fabriquer l'URL nous même. Les données seront transmises en mode GET.
C'est surtout utile pour transmettre des identifiants, par exemple un nom de page, ou un id de ressource.
On s'en sert surtout pour faire des liens.
Par exemple, imaginons une page qui liste des produits. Chaque produit à un identifiant unique, et nous voulons faire un lien vers sa fiche produit.
<?php
$products = [
['id' => 1, 'name' => 'Filament 3D PLA - 500g', 'price' => 10.33, 'desc' => '...'],
['id' => 2, 'name' => 'Filament 3D ABS - 500g', 'price' => 15.00, 'desc' => '...'],
['id' => 3, 'name' => 'Filament 3D PETG - 500g', 'price' => 12.19, 'desc' => '...'],
];
?>
<h1>Nos filaments 3D</h1>
<ul>
<?php
foreach ($products as $product)
{
?>
<li><a href="/fiche_produit.php?id=<?php echo $product['id']; ?>"><?php echo $product['name'] . ' - ' . $product['price'] . '€'; ?></a></li>
<?php
}
?>
</ul>Envoyer des données via formulaire
La seconde façon d'envoyer des données, c'est via un formulaire.
Pour cela, on va devoir créer un formulaire HTML. Les données peuvent être envoyées en POST ou GET, le plus souvent en POST.
Généralement les données via formulaires sont plutôt utilisées pour créer des ressources, les modifier, demander des traitements sur les données, etc.
<form method="POST" action="/traitement_contact.php">
<label for="input_email">Votre adresse e-mail</label><br/>
<input type="email" name="email" id="input_email" /><br/>
<label for="textarea_message">Votre message</label><br/>
<textarea name="message" id="textarea_message"></textarea>
</form>Imaginons une page de contact avec un formulaire pour envoyer un mail.
L'argument "method" permet de définir si on utilisera POST ou GET. La partie "action" permet de définir la page vers laquelle les données seront envoyées.
La Same Origin Policy
Pour des raisons de sécurité, il est uniquement possible d'envoyer des données POST vers des pages avec le même nom de domaine.
Il est possible de contourner cette limitation via l'ajout d'un header HTTP Access-Control-Allow-Origin.
Les données GET n'ont pas la même limitation.
Récupérer les données

Récupérer des données GET
Une fois qu'un utilisateur a transmis des données au serveur, nous devons les récupérer au sein de PHP.
Pour cela, PHP met à disposition toutes les données GET transmises via une variable "superglobale", càd toujours accessible.
Dans le cas des données GET, il s'agit de la variable $_GET, qui contient toutes les données transmises sous forme d'un tableau nom : valeure.
Imaginons une page qui affiche un message passé en GET.
Votre message : <?php echo $_GET['message']; ?>/show.php?message=Bonjour%20le%20monde%20%21
Cette page affichera donc "Bonjour le monde !".
Récupérer des données POST
Pour récupérer des données POST, c'est comme pour GET, mais avec la variable $_POST.
Votre message : <?php echo $_POST['message']; ?>Pour la requête HTTP suivante :
Cette page affichera donc "Bonjour le monde !".
POST / HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
message=Bonjour%20le%20monde%20%21On aura donc :
Si les données n'existent pas ?
Il peut arriver qu'une page s'attende à recevoir des données et n'en reçoive finalement pas.
Reprenons notre page GET qui affiche un message. Que se passe-t-il si un client essaie d'accéder à la page sans transmettre de message ?
PHP affichera une erreur de type notice et n'affichera pas de message :
PHP Notice: Undefined index: message in .../show.php on line 1Vérifier que les données existent.
Traditionnellement, on utilise la fonction isset, qui vérifie qu'une variable existe.
On utilise aussi la fonction empty, qui retourne vrai si une variable n'existe pas OU est vide.
<?php
if (empty($_GET['message']))
{
?>
Vous devez fournir un message à afficher.
<?php
}
else
{
?>
Votre message : <?php echo $_GET['message']; ?>
<?php
}Depuis PHP 7
Depuis PHP 7, l'opérateur ?? (nommé Null Coalescent) a été ajouté.
<?php
$toto = 'toto';
$null_var = null;
$toto ?? 'titi'; //toto
$titi ?? 'tata'; //tata
$null_var ?? false; //falseIl retourne la première opérande définie et non null.
Appliqué aux variables GET ou POST, cela permet de vérifier facilement si la variable a bien été passée par l'utilisateur.
<?php
$message = $_GET['message'] ?? false;
if ($message === false)
{
?>
Vous devez fournir un message à afficher.
<?php
}
else
{
?>
Votre message : <?php echo $message; ?>
<?php
}Échanger des données avec l'utilisateur
By plebweb
Échanger des données avec l'utilisateur
- 599