Vérifications et enregistrements des données

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.

Si vous êtes débutant, prévoyez un bon tube d'aspirine et un thermos de café. Nous allons, dans cette partie et en plusieurs étape, voir comment vérifier les données transmit par formulaire, comment préparer les données à l'enregistrement et enfin, comment enregistrer celles-ci dans votre base de données.

Pour commencer, on reprend notre fichier "commentaire.php" que nous avons créé et qui contient notre formulaire. Nous allons écrire notre code PHP/SQL au dessus de notre formulaire.

Dans un premier temps, nous allons vérifier si l'action de validation de notre formulaire à été éffectué. Si telle est le cas, on se connecte à la base de données puis on récupère les données des champs du formulaire dans des variables que l'ont préparent à l'enregistrement.

<?php
//Si l'action de validation a été faite
if(isset($_POST["Valider"]))
{
// on se connecte à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base 
de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es de
connections.'
);   //On attribue une variable pour chaque champ du formulaire //pseudo $lechamp0 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["pseudo"]))); //email $lechamp1 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["email"]))); //commentaire $lechamp2 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["commentaire"
]
)));   //Ici le reste du code   //on ferme if(isset($_POST["Valider"])) } ?>

Comme vous le constatez, on attribue une variable pour chaque champ du formulaire

$ma_variable = $_POST["nom_du_champ_du_formulaire"];

stripcslashes()

Lorsque vous postez une phrase comportant des apostrophes, votre serveur va automatiquement ajouter ce que l'on appelle un antislashs (\) devant chaque apostrophe. Ainsi la phrase : " L'arbre à l'ombre de la citadelle." va s'afficher : "L\'arbre à l\'ombre de la citadelle.". La fonction stripcslashes() permet donc de supprimer tous les antislashs de notre chaîne.

htmlspecialchars()

Vous n'êtes pas à l'abri qu'un petit malin tente d'introduire du code XHTML ou  pire, du Javascript dans votre base de données et ainsi détourne celui-ci à des fin personnelle. htmlspecialchars() permet donc d'éviter que les données fournies par les utilisateurs contiennent des balises XHTML en transformant celles-ci par des entités HTML.

mysql_real_escape_string()

mysql_real_escape_string() doit toujours être utilisée pour protéger vos données avant d'envoyer une requête à MySQL. mysql_real_escape_string() sert principalement à protéger les données récupérées depuis un formulaire avant de les entrer dans la BDD et donc d'éviter les attaques par injection MYSQL.

Vérification des champs

Nous allons maintenant vérifier que les champs du formulaire sont bien remplient et retourner une erreur dans le cas contraire. Pour ce faire, on utilise les conditions en PHP.

<?php
//Si l'action de validation a été faite
if(isset($_POST["Valider"]))
{
// on se connecte à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base 
de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es de
connections.'
);   //On attribue une variable pour chaque champ du formulaire //pseudo $lechamp0 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["pseudo"]))); //email $lechamp1 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["email"]))); //commentaire $lechamp2 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["commentaire" ])));   //on vérifie les champs 1 par 1 pour voir si ils ne sont pas vides if (empty($lechamp0)){ $alerte0 ='Vous n\'avez pas saisie votre pseudo.'; } else if(empty($lechamp1)){ $alerte1 ='Vous n\'avez pas saisie votre email.'; } else if(empty($lechamp2)){ $alerte2 ='Vous n\'avez pas saisie votre commentaire.'; } //Si tout est ok else {   //Ici le reste du code     //on ferme else } //on ferme if(isset($_POST["Valider"])) } ?>

J'utilise ici la fonction empty() qui permet tout simplement de voir si la valeur de mes variables ne sont pas vides. Pour chaque variable vide, je créé une autre variable qui contient un message d'erreur. J'aurais très bien pu faire de la façon suivant également:

//Si le champ est strictement égal à rien (donc vide)
if ($lechamp0 == ''){echo 'Vous n\'avez pas saisie votre pseudo.';}
else {
...

Insertion des données

Maintenant que tout à été vérifié, nous procédons à l'enregistrement de nos données grâce à la fonction mysql_query() qui permet l'envoie d'une requête au serveur MySQL et à la commande INSERT INTO.

<?php
//Si l'action de validation a été faite
if(isset($_POST["Valider"]))
{
// on se connecte à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base 
de donn&eacute;e. Assurez vous d\'avoir correctement remplit les donn&eacute;es de
connections.'
);   //On attribue une variable pour chaque champ du formulaire //pseudo $lechamp0 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["pseudo"]))); //email $lechamp1 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["email"]))); //commentaire $lechamp2 = mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["commentaire" ])));   //on vérifie les champs 1 par 1 pour voir si ils ne sont pas vides if (empty($lechamp0)){ $alerte0 ='Vous n\'avez pas saisie votre pseudo.'; } else if(empty($lechamp1)){ $alerte1 ='Vous n\'avez pas saisie votre email.'; } else if(empty($lechamp2)){ $alerte2 ='Vous n\'avez pas saisie votre commentaire.'; } //Si tout est ok else { // on enregistre les données $result = mysql_query(" INSERT INTO COMMENTAIRES VALUES
(
'',
'$lechamp0',
'$lechamp1',
'$lechamp2'
)
"
); // Fermeture de la connexion à la base de données mysql_close(); //on informe que le message est enregistré echo 'Votre commentaire a été enregistré avec succès!'; //on ferme else } //on ferme if(isset($_POST["Valider"])) } ?>

Si on décortique un peut la chose, on se rend compte que notre commande SQL est contenu dans une simple variable $result (variable de votre choix).

$ma_variable = mysql_query("notre_commande_sql('valeur1','valeur2','valeur3','valeur4')");

Mais pourquoi la requête SQL est dans une variable?

La raison la plus simple, est que ça permet d'afficher une erreur si il y a.
Par exemple:

// on enregistre les données
$result = mysql_query(" INSERT INTO COMMENTAIRES VALUES
(
'',
'$lechamp0',
'$lechamp1',
'$lechamp2'
)
"
); //Si il y a une erreur, on crie ^^ if (!$result) { die('Requête invalide : ' . mysql_error()); } else { echo 'Votre commentaire à été enregistré avec succès!'; }

Vous pouvez, ou pas, ajouter ce petit bout de code. C'est vous qui voyez!

Voilà, la partie PHP/SQL permettant l'enregistrement dans notre base de données est finit , pas trop mal à la tête ? Non ..., bha ça tombe bien car on à oublié un petit truc ...

Dans la partie du code PHP ou on contrôle les champs du formulaire, on affiche également un message d'erreur si un des champs n'est pas remplit ... va peut être falloir les afficher ces erreurs !!!

Pour ce faire, rien de plus simple, on va tout simplement afficher nos erreurs grâce à un simple "echo" et là ou on le souhaite.

<form action="commentaire.php" method="post">
    <?php echo $alerte0;?>
   <p>Pseudo:<br/>
    <input name="pseudo" size="22" value="" type="text"/>
   </p>
    <?php echo $alerte1;?>
   <p>Email:<br/>
    <input name="email" size="22" value="" type="text"/>
   </p>
    <?php echo $alerte2;?>
  <p>Commentaire:<br/>
   <textarea name="commentaire" rows="10" cols="50" ></textarea>
  </p>
 
   <input name="Valider" value="Valider" type="submit"/>
   <input name="Effacer" value="Effacer" type="reset"/>
 
</form>

Quoi ... c'est tout, juste 3 lignes?
  Bhaaaa ... ouaiiii et là, c'est vraiment finit !

Le prochaine tuto. vous montreras comment afficher les données de notre table "COMMENTAIRES".

Voir/déposer un commentaire (0) | Signaler un problème