Grâce à Google, cherchez des livres d'or sur Internet (non pas des outils pour créer des livres d'or, mais des livres d'or opérationnels). Collez ici l'URL d'un livre d'or que vous avez trouvé :
Cherchez une définition pour livre d'or et inscrivez-là ici :
Les types de données MySQL dont vous allez avoir besoin pour cette question sont :
INT | Valeur numérique entre -2 147 483 648 et +-2 147 483 647 |
---|---|
VARCHAR(255) | Pour les textes courts jusqu'à 255 caractères (login, courriel, password, etc.) |
TEXT | Pour les textes longs jusqu'à 65 536 octets (commentaires, résumés, descriptions, etc.) |
DATETIME | Année, mois, jour, heure, minute, seconde. |
A partir des livres d'or que vous voyez sur Internet, choisissez les champs qui vont constituer la table de votre livre d'or. Listez ces champs ici (avec le type de données correspondant) :
Créez sous MySQL/PHPMyAdmin la base de données, puis la table qui contiendra votre livre d'or.
Ouvrez un nouveau document dans NotePad++ que vous sauvegardez dans la racine Internet (avec l'extension .php), ça sera votre page pour gérer le livre d'or.
Dans cette page, commencez par créer le formulaire HTML qui permettra de saisir un nouveau message dans le livre d'or. Collez ici le code correspondant :
Le contenu du formulaire risque d'être envoyé au serveur Internet avant que son contenu soit vérifié. Si celui-ci n'est pas valide, un réponse est envoyée du serveur Internet vers le navigateur. Tout ceci prend du temps inutilement.
Pour accélérer le processus, on peut effectuer la validation grâce au Javascript, directement sur le navigateur. Ainsi, le contenu du formulaire peut être vérifié avant même d'être transmis au serveur Internet. Consultez l'atelier Javascript pour la réalisation pratique.
Rajouter des vérifications de saisie en Javascript, pour annuler la soumission du formulaire si jamais les champs ne sont pas remplis. Collez ici le code (HTML + Javascript) de votre page à ce stade :
Obsolète : cette méthode en Javascript peut maintenant être remplacée par l'attribut REQUIRED des balises INPUT et TEXTAREA (depuis HTML 5). Votre réponse sera juste si vous répondez avec l'attributs REQUIRED.
Dans le même fichier, écrivez le code PHP qui gère l'ajout du commentaire dans la base de données.
Pour éviter un message d'erreur, n'oubliez pas de tester si on a validé le formulaire :
Pour vous aidez, référez-vous au TP d'initiation PHP.
Définissez et codez en CSS les différents styles pour vos affichages (commentaire, auteur, date, etc.). Collez ici la définition de vos styles CSS :
Réalisez le code PHP qui affiche l'ensemble des commentaires, triés par ordre chrolonogiques inversé (commentaires les plus récents en premier). Utilisez les styles CSS créés ci-dessus.
Collez ici le code PHP correspondant à l'affichage :
Essayez de saisir les choses suivantes dans vos commentaires, vérifier qu'elles ne perturbent pas l'affichage des commentaires ni l'exécution de la requête d'insertion :
Pour éliminer ces perturbations, utilisez : mysqli_real_escape_string (avant d'insérer les textes dans la base de données), htmlspecialchars (avant de réafficher les textes dans le navigateur).
Collez ici votre code PHP (insertion dans la base + affichage des commentaires) blindé :
En php, grâce à la fonction mail, on peut facilement envoyer un courrier électronique. Il faut toutefois configurer un bon serveur d'envoi de courrier dans le PHP.INI.
Trouvez le fichier php.ini (si vous ne le trouvez pas, exécutez phpinfo(); en PHP et trouvez, dans la rubrique Loaded Configuration File, l'emplacement du php.ini utilisé).
Ecrivez ici le chemin vers le bon php.ini :
modifiez le paramètres :
SMTP = smtp.numericable.fr
(version testée OK en janvier 2020)
sendmail_from = votre-login@bts-sio.com
Ecrivez le code PHP qui informe l'administrateur (vous) de la présence d'un nouveau commentaire dans le livre d'or. Lorsque c'est testé, collez ici le code PHP correspondant :
Dans le courrier envoyé à l'administrateur, ajouter un outil (un simple lien hypertexte) pour supprimer le commentaire facilement si l'administrateur estime qu'il n'est pas convenable. Vous devez ajouter dans le courrier un lien du genre :
http://127.0.0.1/livre-d-or.php?supp=51
(où 51 est la clé primaire du commentaire à supprimer).
Vous devez ajouter, dans votre page, le code PHP permettant de gérer ce lien : si $_GET["supp"]
existe, alors on efface de la base de données le commentaire dont la clé primaire vaut $_GET["supp"]
(grâce à la commande SQL DELETE
).
Pour vous rendre compte d'un problème très courant dans les formulaires sur Internet :
Quelle a été la conséquence problématique de cette manipulation ? Comment l'expliquez-vous ?
Réglez le problème en effectuant une redirection, après que le commentaire a été inséré dans la base de données :
Ecrivez ici votre insertion PHP réparée :
Lorsqu'il y a trop de commentaires dans le livre d'or, on ajoute une "pagination" pour n'afficher que 10 commentaires par page, avec des boutons suivants et précédents.
Ajoutez, dans la requête SQL qui sélectionne les commentaires à afficher, une limitation (grâce à la clause SQL LIMIT) basée sur une variable $page :
Avant la requête, gérez la variable $page
ainsi :
En bas de la page, ajoutez les liens Page suivante
et Page précédente. Ces
liens appellent la page .php courante,
mais en lui passant en paramètre page,
décrémenté (pour précédent) ou incrémenté
(pour suivant). Par exemple, si je suis sur la page n°5 ($page=5), alors
on doit envoyer au navigateur :
Eventuellement, ajoutez les tests qui n'affichent pas les liens inutile lorsqu'on est sur la première ou sur la dernière page.