Leçons PHP - leçon 1 - Travail avec les formulaires
Dans la vie courante, nous recevons des informations via la télévision, la radio, internet, ou par des échanges en direct. Les sites web reçoivent aussi des informations des utilisateurs, mais sous une forme particulière : via des formulaires. Les formulaires peuvent être comparés à des questionnaires ou des formulaires officiels à remplir pour des demandes administratives. Même si le nombre d’éléments de formulaire est limité, ils permettent de collecter toutes les informations nécessaires auprès de l’utilisateur pour le bon fonctionnement du site.
Pour que cette leçon soit plus productive, il est conseillé de lire des leçons HTML sur la création de formulaires.
Avant de commencer la première leçon, créons la structure de notre application, notamment une classe qui gèrera notre site.
Créons un dossier class
dans lequel on placera le fichier simpleCMS.php
contenant la classe de gestion du site. Créons également un fichier index.php
qui lancera cette gestion. Enfin, créons un dossier vide messages/
pour nos messages, ainsi qu’un fichier de styles style.css
. Voici l’arborescence des fichiers et dossiers :
class/simpleCMS.php
messages/
index.php
style.css
Contenu du fichier simpleCMS.php
:
<?php class simpleCMS { // classe de gestion public function display_public() { // méthode d’affichage des messages } public function display_admin() { // méthode d’entrée de message } public function write($p) { // méthode d’écriture de message } } ?>
Pour l’instant, laissons les méthodes vides, nous y ajouterons du code plus tard.
Contenu du fichier style.css
:
*{ margin: 0; padding: 0; } body{ font: 12px "Lucida Grande", Sans-Serif; background: #ccc; } #page-wrap{ width: 500px; margin: 50px auto; padding: 20px; background: white; } h1, h2, h3{ font: 28px Georgia, Serif; border-bottom: 1px dotted #ccc; margin: 0 0 10px 0; } .clear{ clear: both; } input[type="text"], textarea{ padding: 3px; border: 1px solid #666; width: 350px; margin: 0 0 15px 0; } input[type="text"]{ font: 28px Georgia, Serif; } textarea { height: 100px; font: 12px "Lucida Grande", Sans-Serif; } label { background: #666; color: white; padding: 2px 6px; } .post{ margin: 0 0 20px 0; }
Contenu du fichier index.php
:
<!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="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Apprenons PHP</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="page-wrap"> <?php include_once('class/simpleCMS.php'); // inclure la classe $obj = new simpleCMS(); // créer un objet de gestion ?> </div> </body> </html>
Voici comment cela fonctionne. À chaque chargement du site, le fichier index.php
est chargé. Pour l’instant il est vide, mais nous avons inclus la classe et créé un objet. Cet objet dispose de méthodes que nous appellerons selon les besoins, déterminés par des conditions if.
Avant de continuer, intéressons-nous aux variables globales $_GET
et $_POST
.
Variable globale $_GET
Les formulaires HTML ont un attribut method
(valeur 'get' ou 'post') qui détermine si les données sont passées dans la variable globale $_GET
ou $_POST
. Exemple :
<form action="welcome.php" method="get"> Nom : <input type="text" name="fname" /> Âge : <input type="text" name="age" /> <input type="submit" /> </form>
En cliquant sur le bouton, on accède à l’URL :
http://sitename/welcome.php?fname=Peter&age=37
C’est la formation de la variable $_GET
, c’est-à-dire tout ce qui suit le point d’interrogation :
<?php print $_GET['fname']; print $_GET['age']; ?>
$_GET
est un tableau issu de l’URL. On peut ainsi transmettre des données d’une page à une autre sans utiliser un formulaire, par exemple :
http://sitename/example.php?number=45
avec ce script :
<?php print $_GET['number']; ?>
affichera le nombre depuis l’URL.
Variable globale $_POST
$_POST
est utilisée de la même manière que $_GET
pour les formulaires. Exemple similaire :
Une simple forme avec nom et message :
<form action="welcome.php" method="post"> Nom : <input type="text" name="fname" /> Âge : <input type="text" name="age" /> <input type="submit" /> </form>
En soumettant, on arrive à :
http://sitename/welcome.php
On récupère alors :
<?php print $_POST['fname']; print $_POST['age']; ?>
Contrairement à $_GET
, les données $_POST
ne sont pas visibles dans l’URL.
Créons un formulaire d’ajout de message. L’envoi se fera en POST, la gestion du site via GET :
public function display_admin() { // méthode d’entrée de message $content = ''; $content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">'; // $_SERVER['PHP_SELF'] retourne le fichier en cours $content .= '<label for="title">Nom:</label><br />'; $content .= '<input name="title" id="title" type="text" maxlength="150" />'; $content .= '<div class="clear"></div>'; $content .= '<label for="bodytext">Message:</label><br />'; $content .= '<textarea name="bodytext" id="bodytext"></textarea>'; $content .= '<div class="clear"></div>'; $content .= '<input type="submit" value="Ajouter un message" />'; $content .= '</form>'; $content .= '<p><a href="/index.php">Retour à l’accueil</a></p>'; return $content; }
Modifiez la méthode display_admin()
avec ce code. Ce formulaire sera affiché quand on souhaite ajouter un message. Par défaut, on affiche les messages. Convenons que le formulaire s’affiche quand l’URL contient admin=1
:
http://test/index.php?admin=1
Modifions donc index.php
:
<!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="ru" lang="ru" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Apprenons PHP</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <div id="page-wrap"> <?php include_once('class/simpleCMS.php'); // inclure la classe $obj = new simpleCMS(); // créer l’objet if( $_GET['admin'] == 1 ){ // si variable admin dans l’URL print $obj->display_admin(); // afficher le formulaire }else{ print $obj->display_public(); // sinon afficher les messages } ?> </div> </body> </html>
Modifions la méthode d’affichage des messages (pour index.php
sans paramètre) :
public function display_public() { // méthode d’affichage $content = ''; $content .= '<p><a href="/index.php?admin=1">Ajouter un message</a></p>'; return $content; }
On ajoute un lien vers la page avec paramètre admin=1 pour afficher le formulaire.
Si vous avez des problèmes d’affichage de caractères, créez un fichier .htaccess
(sur Windows, copiez un fichier existant et videz-le) avec :
AddDefaultCharset utf-8
Cela force le serveur à utiliser l’encodage UTF-8.
Le formulaire est prêt et envoie les données vers une autre page. Vous pouvez tester en changeant la méthode en get :
$content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="get">';
Les paramètres passeront alors via l’URL. Nous verrons leur traitement dans la leçon suivante, lors de l’apprentissage du travail avec les fichiers pour enregistrer les données.