LOGO Lionel Groulx

Site Web du cours « Programmation de Systèmes »

PHP Chapitre 6 : Transmission de données

 6.1    Transmission de données par l'URL

 6.1.1     Envoi des paramètres par URL

Cette technique nous permettra de passer des paramètres entre 2 pages PHP. C'est cette technique qui est la source d'URL « exotiques » que l’on croise souvent dans notre navigateur internet.

Ex :

Pour cela, nous exploiterons les propriétés des liens HTML :

Ex : si on considère l’URL suivante :

http://www.blahblahblah.com/mapage.php?prenom=Nicolas&college=LionelGroulx

 

·                    http://www.blahblahblah.com/mapage.php : constitue l’adresse de la page

·                    prenom, college : sont les paramètres

·                    Nicolas, LionelGroulx : sont les valeurs attribuées aux paramètres ci-dessus.

 

Par exemple, admettons que la page d'accueil de notre site veut passer des paramètres à une sous-page :

La syntaxe à adopter dans l'envoi par la balise <a> dans le fichier Index.php est la suivante :

<a href="article.php?prenom=Nicolas&amp;college=LionelGroulx"> voici votre article :

</a>

Bien noter ici « &amp; » pour signifier le caractère « & » et vérifier les règles du W3C.

(+ de détails : (Caractères spéciaux HTML))

 

 6.1.2     Réception des paramètres dans la page PHP

Les paramètres a l'arrivée, dans notre page sont récupérés dans un tableau particulier, une variable superglobale (davantage de détails au chapitre suivant) appelée $_GET

Dans notre exemple, on obtiendrait :

Variable

Valeur

$_GET['prenom']

Nicolas

$_GET['college']

LionelGroulx


 

 6.1.3     Vérification de l'intégrité des données récupérées

La fonction isset () nous permet de vérifier qu'un paramètre de type $_GET a été renseigné par passage de paramètre. Cette fonction renvoie TRUE dans ce cas, et FALSE si le paramètre est encore vide.

Ex :

<?php

if (isset($_GET['prenom']) AND isset($_GET['college']))

echo 'On va trouver votre article,' . $_GET['prenom'];

else // Il manque des paramètres, on avertit le visiteur

echo 'Il faut renseigner un prénom et un collège !';

?>

On peut suite à cela, imposer d'autres exigences de tests, autres que la simple présence du paramètre, libre à vous, mais c'est un minimum.

(Voir : (How can I prevent SQL-injection in PHP?), et (Injection SQL))

 

 6.2    Transmission de données par formulaires

Voici enfin le temps de découvrir l'interactivité attendue depuis longtemps, ou comment transmettre des données entre les pages. Exemples :

·                    Cliquer sur des boutons,

·                    Faire un choix avec des radio boutons, des ascenseurs,

·                    rentrer du texte,

·                    renseigner des valeurs,

·                    remplir des champs, etc...

Ici, HTML et PHP vont se retrouver intimement connectés : le HTML nous permettra d'assurer la construction de formulaires, et le PHP s'occupera de la gestion des données en résultant.

 

 6.2.1      <form> pour créer un formulaire HTML qui interagit avec le PHP

La balise de type paire <form>, déjà vue en HTML, permet de signaler un formulaire dans une page HTML.

Celle-ci possède 2 attributs essentiels lorsqu’on désire la faire interagir avec le PHP :

·                    method :

Cet attribut décrit la méthode utilisée par le formulaire pour envoyer les données.

2 méthodes sont possibles :

                    get : les données vont passer par l'URL, elles vont donc aboutir dans la variable superglobale (le tableau) $_GET comme vu précédemment. C'est une méthode peu employée.

                    post : les données resteront invisibles aux utilisateurs, et n'ont pas de limite de taille (8 Mo par défaut) (Source (PHP $_Post function)). C’est la méthode la plus couramment utilisée. On récupère les données dans la variable superglobale (le tableau) $_POST.

·                    action :

Cet attribut permet de définir la cible qui recevra les données du formulaire pour être traités. Ainsi, si on imagine que notre formulaire contient un bouton « valider » à la fin de la saisie, alors toutes les données seront envoyées vers cette cible (un fichier PHP) pour traitement.

Exemple de syntaxe :

<form method="post" action="cible.php">

<p>

On insèrera ici les éléments de notre formulaire.

</p>

</form>

Dans cet exemple, le formulaire (éléments à insérer) transmettra ses données à la page cible.php en utilisant la méthode post.

Donc les données seront exploitables sur la page cible.php en lisant le tableau $_POST (voir plus bas les variables superglobales)

 

Détails des éléments de formulaires possibles : voir chapitre xxx dans le référentiel HTML/CSS

 

 6.3    Transmission de fichier par formulaire

Avec cette technique, l'on peut téléverser un fichier dans une autre page php.

Un attribut supplémentaire est à spécifier pour l'envoi de fichier par formulaire :

·                    enctype = "multipart/form-data"

 6.3.1     <input> pour un envoi de fichier

Cette balise est à employer avec type = "file" pour la transmission de fichiers.

On obtient :

<form action = "cible_envoi.php" method="post" enctype = "multipart/form-data">

<p>

Formulaire d'envoi de fichier :<br />

<input type="file" name="monfichier" /><br />

<input type="submit" value="Envoyer le fichier" />

</p>

</form>

Résultat dans la page :

 6.3.2     La structure $_FILES

Suite à cela, on reçoit les données dans une variable superglobale (tableau) $_FILES ['monfichier'] (dans notre cas) les renseignements suivants :

Variable

Contenu

$_FILES['monfichier']['name']

Le nom du fichier a l'envoi

$_FILES['monfichier']['type']

Le type ET l'extension du fichier.

$_FILES['monfichier']['tmp_name']

Le nom et l'emplacement temporaires du fichier en attente de validation.

$_FILES['monfichier']['size']

La taille du fichier, limitee a 8 Mo.

$_FILES['monfichier']['error']

Code ET texte d'erreur. 0 si tout est OK.

 

 6.3.3     Les validations d'un téléversement

Une fois le fichier transféré, un minimum de validations s'impose avant envoi final :

                    Le fichier est-il bien parti?

                    L'extension est-elle celle attendue?

                    La taille est-elle adéquate?

Suite à cela, l'on peut déplacer le fichier de son emplacement temporaire vers un emplacement définitif (un sous-répertoire « uploads » est tout indiqué).

Pour cela, l'on fait appel a deux fonctions :

                    la fonction move_uploaded_file qui déplace un fichier transféré.

                    La fonction basename qui renvoie le nom du fichier

Exemple :

move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/' . basename($_FILES['monfichier']['name']));