Atelier PHP Livre d'or.
Réponse AJAX

A la découverte des livres d'or

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é :

Votre réponse n°1

Cherchez une définition pour livre d'or et inscrivez-là ici :

Votre réponse n°2

Choix des champs

Les types de données MySQL dont vous allez avoir besoin pour cette question sont :
INTValeur 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.)
TEXTPour les textes longs jusqu'à 65 536 octets (commentaires, résumés, descriptions, etc.)
DATETIMEAnné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) :

Votre réponse n°3

Créez sous MySQL/PHPMyAdmin la base de données, puis la table qui contiendra votre livre d'or.

Création du formulaire
pour ajouter un message dans le 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 :

Votre réponse n°4

Javascript : contrôles de validité sur les champs de saisi

Remarque sur...La vérification des formulaires

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.

Votre réponse n°5

Code PHP pour ajouter les messages

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.

Collez ici le code PHP correspondant à l'insertion :

Votre réponse n°6

Code PHP + CSS pour afficher la liste des messages

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 :

Votre réponse n°7

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 :

Votre réponse n°8

Blinder le code pour qu'il ne plante en aucune circonstance

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é :

Votre réponse n°9

Alerter l'administrateur du site lorsqu'un message vient d'être ajouté

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 :

Votre réponse n°10

modifiez le paramètres :
SMTP = smtp.numericable.fr
sendmail_from = votre-login@bts-sio.com
(version testée OK en janvier 2020)

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 :

Votre réponse n°11

Ajouter un outil de suppression de commentaires

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).

Votre réponse n°12

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).

Votre réponse n°13

Faire en sorte qu'on ne puisse pas reposter le formulaire

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 ?

Votre réponse n°14

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 :

Votre réponse n°15

Faire une pagination,
par exemple n'afficher que 10 commentaires par page

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 :

Si $_GET["page"] n'existe pas, alors $page = 0
Sinon, $page = $_GET["page"]

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 :

<a href="livre d'or.php?page=4">Page précédente</a>
<a href="livre d'or.php?page=6">Page suivante</a>

Eventuellement, ajoutez les tests qui n'affichent pas les liens inutile lorsqu'on est sur la première ou sur la dernière page.

Copiez ici votre nouveau code qui affiche les commentaires :

Votre réponse n°16

Ajouter un captcha pour éviter les spams