Site Web avec PHP et MySQL
Transmettre des donn?es de page en page
Envoyer des donn?es dans l'URL
Envoie des donn?es
Soit deux pages index.php et bonjour.php. La page index.php envoie les variables nom et pr?nom ? la page bonjour.php. Cette derni?re les r?cup?re et affiche bonjour ? la personne.
Il suffit de cr?er un lien avec des param?tres qui m?ne vers la page bonjour de la forme suivante :
page.php?param1=valeur1?m2=valeur2?m3=valeur3?m4=valeur4?
Il n'est pas conseill? de d?passer les 256 caract?res
Ouvrez index.php et ins?rez-y par exemple le code suivant :
Code HTML :
R?cup?ration des donn?es
La commande $_GET permet de r?cup?rer les donn?es. On va d'abord tester l?existence des param?tres avant de les r?cup?rer au cas o? le visiteur aurait trafiquer l'URL
Code PHP :
<?php //La commande isset teste l'existence des param?tres if (isset($_GET['prenom']) AND isset($_GET['nom'])) // On a le nom et le pr?nom { echo 'Bonjour ' . $_GET['prenom'] . ' ' . $_GET['nom'] . ' !'; } else // Il manque des param?tres, on avertit le visiteur { echo 'Il faut renseigner un nom et un pr?nom !'; } ?>
Envoyer des donn?es via un formulaire
Base du formulaire
Code HTML :
<form method="post" action="page_cible.php"> <p> On ins?rera ici les ?l?ments de notre formulaire. </p> </form>
Les donn?es seront r?cup?r?es gr?ce ? la fonction $_POST.
Les ?l?ments du formulaire
Code HTML :
<!--//********************************************************************************************** //champ de texte //name(obligatoire) : La valeur du champ r?cup?r?e via $_POST['pseudo'] //value(facultatif) : valeur par d?faut du champ //**********************************************************************************************--> <input type="text" name="pseudo" value="pearson"/> <!--//********************************************************************************************** //Les grandes zones de texte //R?cup?ration du contenu via $_POST['message'] //**********************************************************************************************--> <textarea name="message" rows="8" cols="45"> Votre message ici. </textarea> <!--//********************************************************************************************** //La liste d?roulante //Une variable $_POST['choix'] contenant le choix de l'utilisateur est cr??. //S'il a choisi ? Choix 3 ?, la variable $_POST['choix'] sera ?gale au value correspondant, c'est-?-dire choix3. //**********************************************************************************************--> <select name="choix"> <option value="choix1">Choix 1</option> <option value="choix2" selected="selected">Choix 2</option>//choix par d?faut gr?ce ? l'option selected <option value="choix3">Choix 3</option> </select> <!--//********************************************************************************************** //Case ? cocher //la variable $_POST['case'] est cr??e dans la page cible. Si elle est coch?e, sa valeur est ?gale "on"; sinon elle n'existe pas //Pour cocher une case par d?faut : mettre l'attribut checked="checked" // Faire un test avec isset($_POST['case']) pour v?rifier si la case a ?t? coch?e ou non. **********************************************************************************************--> <input type="checkbox" name="case" id="case" /> <label for="case">case</label> <!--********************************************************************************************** //Bouton d?options //Pour pr?-cocher une case par d?faut : mettre l'attribut checked="checked" //Variable cr??e $_POST['frites']. Elle aura la valeur du bouton d'option choisi par le visiteur, issue de l'attribut value. //Si on aime les frites, alors on aura $_POST['frites'] = 'oui'. //**********************************************************************************************--> Aimez-vous les frites ? <input type="radio" name="frites" value="oui" id="oui" checked="checked" /> <label for="oui">Oui</label> <input type="radio" name="frites" value="non" id="non" /> <label for="non">Non</label> <!--********************************************************************************************** //Les champs cach?s //Le champ n'est pas affich? aux visiteurs mais il est envoy? ? la page cible lors de la validation du formulaire //**********************************************************************************************--> <input type="hidden" name="pseudo" value="pearson" /> <!--********************************************************************************************** //Bouton d?envois du formulaire //**********************************************************************************************--> <input type="submit" value="Valider" />
champ de texte
Les grandes zones de texte
La liste d?roulante
Case ? cocher
Bouton d'options Aimez-vous les frites ?
Bouton valider
Les grandes zones de texte
La liste d?roulante
Case ? cocher
Bouton d'options Aimez-vous les frites ?
Bouton valider
R?cup?ration des donn?es
Code PHP :
<?php //?chappement des balises html echo htmlspecialchars($_POST['prenom']); //suppression des balises html echo strip_tags($_POST['prenom']); ?>
Notez l'utilisation de la fonction htmlspecialchars. Elle permet d'?chapper les balises HTML ins?r?es par le visiteurs prot?geant ainsi votre site d'?ventuelles attaques. Les balises HTML seront affich?es mais non ex?cut?es.
Si vous pr?f?rez retirer les balises HTML que le visiteur a tent? d'envoyer plut?t que de les afficher, utilisez la fonction strip_tags.
Envoyer un fichier
Formulaire d'envois
Si le formulaire propose aux visiteurs d'envoyer un fichier, il faut ajouter l'attribut enctype="multipart/form-data" ? la balise <form>.
Code HTML :
<form action="page_cible.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>
Traitement de l'envoi
Code PHP :
<?php // Testons si le fichier a bien ?t? envoy? et s'il n'y a pas d'erreur if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0) { // Testons si le fichier n'est pas trop gros if ($_FILES['monfichier']['size'] <= 1000000) // en octet; 1 MO = 1000 000 octets { // Testons si l'extension est autoris?e $infosfichier = pathinfo($_FILES['monfichier']['name']); $extension_upload = $infosfichier['extension']; $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png'); if (in_array($extension_upload, $extensions_autorisees)) { // On peut valider le fichier et le stocker d?finitivement move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/' . basename($_FILES['monfichier']['name'])); echo "L'envoi a bien ?t? effectu? !"; } } } ?>
Le fichier est plac? dans le dossier uploads. V?rifiez que le dossier upload existe sur le serveur et qu'il a les droits d'?criture (CHMOD 733)
Ce script est encore ? am?liorer. Par exemple, si le nom du fichier contient des espaces ou des accents, ?a posera un probl?me une fois envoy? sur le Web. D'autre part, si quelqu'un envoie un fichier qui a le m?me nom que celui d'une autre personne, l'ancien sera ?cras? !
La solution consiste en g?n?ral ? ? choisir ? nous-m?mes le nom du fichier stock? sur le serveur plut?t que de se servir du nom d'origine. Vous pouvez faire un compteur qui s'incr?mente : 1.png, 2.png, 3.jpg, etc.
Les variables superglobales, sessions et cookie
Les variables superglobales sont accessibles sur toutes les pages de votre site.
Les sessions
Pour chaque visiteur, un num?ro de session unique est cr?? automatiquement par PHP. PHP transmet cet ID de page en page en utilisant g?n?ralement un cookie.
- session_start() : d?marre le syst?me de sessions.
- session_destroy() : ferme la session du visiteur. Cette fonction est automatiquement appel?e lorsque le visiteur ne charge plus de page de votre site pendant plusieurs minutes (c'est le timeout), mais elle peut ?tre utilis?e pour la d?connexion manuelle du visiteur.
Il faut appeler session_start() sur chacune de vos pages AVANT d'?crire le moindre code HTML (avant m?me la balise <!DOCTYPE> ). Si vous oubliez de lancer session_start(), vous ne pourrez pas acc?der aux variables superglobales $_SESSION
Exemple
Code HTML :
<?php // On d?marre la session AVANT d'?crire du code HTML session_start(); // On s'amuse ? cr?er quelques variables de session dans $_SESSION $_SESSION['prenom'] = 'Jean'; $_SESSION['nom'] = 'Dupont'; $_SESSION['age'] = 24; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Titre de ma page</title> </head> <body> <p> Salut <?php echo $_SESSION['prenom']; ?> !<br /> Tu es ? l'accueil de mon site (index.php). Tu veux aller sur une autre page ? </p> </body> </html>
Les cookies
Un cookie, c'est un petit fichier que l'on enregistre sur l'ordinateur du visiteur. Ce fichier contient du texte permettant de ? retenir ? des informations sur le visiteur.
Ecrire un cookie
On utilise la fonction PHP setcookie en lui donnant, en g?n?ral trois param?tres, dans l'ordre suivant :
le nom du cookie (ex. : pseudo) ;
la valeur du cookie (ex. : M@teo21) ;
la date d'expiration du cookie, sous forme de timestamp (ex. : 1090521508).
Si vous voulez supprimer le cookie dans un an, il vous faudra donc ?crire : time() + 365*24*3600. Cela veut dire : timestamp actuel $+$ nombre de secondes dans une ann?e.
La commande est la suivante pour cr?er un cookie:
Code PHP :
<?php setcookie('pseudo', 'M@teo21', time() + 365*24*3600); //S?curiser son cookie avec le mode httpOnly; le dernier true active le httpOnly setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true); ?>
Comme pour session_start, setcookie ne marche QUE si vous l'appelez avant tout code HTML (donc avant la balise <!DOCTYPE>

Code PHP :
<?php setcookie('pseudo', 'M@teo21', time() + 365*24*3600, null, null, false, true); // On ?crit un cookie setcookie('pays', 'France', time() + 365*24*3600, null, null, false, true); // On ?crit un autre cookie... // Et SEULEMENT MAINTENANT, on peut commencer ? ?crire du code html ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <title>Ma super page PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> etc.
Afficher un cookie
Il faut faire un isset pour v?rifier si le cookie existe ou non.
Code PHP :
<p> H? ! Je me souviens de toi !<br /> Tu t'appelles <?php echo $_COOKIE['pseudo']; ?> et tu viens de <?php echo $_COOKIE['pays']; ?> c'est bien ?a ? </p>
Les cookies viennent du visiteur. Il peut les avoir modifi?s, donc soyez prudents et n'ayez pas une confiance aveugle en leur contenu !
Modifier un cookie existant
Code PHP :