Validation formulaire et base de données
fab1105
Messages postés
118
Statut
Membre
-
fab1105 -
fab1105 -
Bonjour,
J'ai un petit problème que je n'arrive pas a résoudre :
J'ai un formulaire de contact, dont je voudrai vérifier la validité des données entrer par l'utilisateur, et si les données sont valides,
insérer ces données dans une base de données.
Je précise que je souhaite afficher les éventuels "Vous devez renseigner votre nom" ou "cette adresse mail n'est pas valide"
au dessus du formulaire, c'est à dire que ce soit la même page qui soit recharger pour dire à l'utilisateur que sa demande a bien été envoyée,
ou qu'il doit remplir correctement tel ou tel champ.
Voici le code du formulaire :
<h2>Formulaire de contact</h2>
<form name="demande" method="post" action="traitement.php">
<fieldset>
<legend>Vos informations</legend><br />
<label for="nom">Nom : </label><input type="text" name="nom" id="nom" />
<label for="prenom">Prénom : </label><input type="text" name="prenom" id="prenom" /><br /><br />
<label for="naissance" id="naissance">Date de naissance (JJ/MM/AAAA) :</label> <input type="text" size="2" name="jour" id="jour" /> / <input type="text" size="2" name="mois" id="mois" /> / <input type="text" size="4" name="annee" id="annee" /><br /><br />
<label for="mail">Adresse Email * : </label><input type="text" name="mail" id="mail" />
<label for="confirm">Confirm Email * : </label><input type="text" name="mail2" id="mail2" />
</fieldset><br /><br />
<fieldset>
<legend>Votre question</legend>
<br />
<br />
<label for="question">Question :</label><br />
<textarea name="question" id="question" rows="20" cols="70">Posez votre question ici...
</textarea>
</fieldset>
<input type="submit" name="valider" value="Envoyer" />
</form>
Je souhaite donc vérifier que :
-le nom , le prenom, la date de naissance, le mail, la confirmation du mail et la question ne sont pas vide.
-le mail est une adresse valide et que mail et mail2 sont identiques.
-la date de naissance est un format de date valide.
Si tout ça est vérifié, alors on insère les données dans une base dont la table contient 6 champs :
-id
-Nom
-Prénom
-mail
-date de naissance
-question
et on indique à l'utilisateur que sa demande a bien été prise en compte en haut du formulaire en rechargeant la même page.
Sinon, on indique à l'utilisateur que tel ou tel champs n'a pas été bien rempli, toujours en rechargeant la même page.
Quelqu'un aurait-il un script complet, même avec des expressions rationnelles, pour résoudre mon petit problème?
Merci d'avance à tous ceux qui auront une idée à me proposer.
J'ai un petit problème que je n'arrive pas a résoudre :
J'ai un formulaire de contact, dont je voudrai vérifier la validité des données entrer par l'utilisateur, et si les données sont valides,
insérer ces données dans une base de données.
Je précise que je souhaite afficher les éventuels "Vous devez renseigner votre nom" ou "cette adresse mail n'est pas valide"
au dessus du formulaire, c'est à dire que ce soit la même page qui soit recharger pour dire à l'utilisateur que sa demande a bien été envoyée,
ou qu'il doit remplir correctement tel ou tel champ.
Voici le code du formulaire :
<h2>Formulaire de contact</h2>
<form name="demande" method="post" action="traitement.php">
<fieldset>
<legend>Vos informations</legend><br />
<label for="nom">Nom : </label><input type="text" name="nom" id="nom" />
<label for="prenom">Prénom : </label><input type="text" name="prenom" id="prenom" /><br /><br />
<label for="naissance" id="naissance">Date de naissance (JJ/MM/AAAA) :</label> <input type="text" size="2" name="jour" id="jour" /> / <input type="text" size="2" name="mois" id="mois" /> / <input type="text" size="4" name="annee" id="annee" /><br /><br />
<label for="mail">Adresse Email * : </label><input type="text" name="mail" id="mail" />
<label for="confirm">Confirm Email * : </label><input type="text" name="mail2" id="mail2" />
</fieldset><br /><br />
<fieldset>
<legend>Votre question</legend>
<br />
<br />
<label for="question">Question :</label><br />
<textarea name="question" id="question" rows="20" cols="70">Posez votre question ici...
</textarea>
</fieldset>
<input type="submit" name="valider" value="Envoyer" />
</form>
Je souhaite donc vérifier que :
-le nom , le prenom, la date de naissance, le mail, la confirmation du mail et la question ne sont pas vide.
-le mail est une adresse valide et que mail et mail2 sont identiques.
-la date de naissance est un format de date valide.
Si tout ça est vérifié, alors on insère les données dans une base dont la table contient 6 champs :
-id
-Nom
-Prénom
-date de naissance
-question
et on indique à l'utilisateur que sa demande a bien été prise en compte en haut du formulaire en rechargeant la même page.
Sinon, on indique à l'utilisateur que tel ou tel champs n'a pas été bien rempli, toujours en rechargeant la même page.
Quelqu'un aurait-il un script complet, même avec des expressions rationnelles, pour résoudre mon petit problème?
Merci d'avance à tous ceux qui auront une idée à me proposer.
A voir également:
- Validation formulaire et base de données
- Whatsapp formulaire opposition - Guide
- Fuite données maif - Guide
- Ethernet n'a pas de configuration ip valide - Guide
- Formulaire de réclamation facebook compte désactivé - Guide
- Base de registre - Guide
2 réponses
un script complet qui soit universel non
mais une piste à toi de compléter pour la partie verif au moins
mais une piste à toi de compléter pour la partie verif au moins
<?php
//on recupere les valeurs si formulaire posté sinon on met à vide
$nom=isset($_POST['nom']) ? $_POST['nom'] : "";
$prenom=isset($_POST['prenom']) ? $_POST['prenom'] : "";
//etc
//on verifie si remplmi quand le form est posté:
if(isset($_POST['valider'])){
if($nom=="") {
echo "<font color=\"red\">Vous devez remplir le champ nom ! </font>";
}elseif($prenom=""){
echo "<font color=\"red\">Vous devez remplir le champ prenom ! </font>";
}elseif( etc...
//pour le mail et date vas voir du coté des regex
}
?>
<h2>Formulaire de contact</h2>
<form name="demande" method="post" action="traitement.php">
<fieldset>
<legend>Vos informations</legend><br />
<label for="nom">Nom : </label><input type="text" name="nom" id="nom" value="<?php echo $nom; ?>"/>
<!-- rajoutes value=... dans tous les autres champs tu gardera ainsi les sasies precedentes si il en manque -->
<label for="prenom">Prénom : </label><input type="text" name="prenom" id="prenom" /><br /><br />
<label for="naissance" id="naissance">Date de naissance (JJ/MM/AAAA) :</label> <input type="text" size="2" name="jour" id="jour" /> / <input type="text" size="2" name="mois" id="mois" /> / <input type="text" size="4" name="annee" id="annee" /><br /><br />
<label for="mail">Adresse Email * : </label><input type="text" name="mail" id="mail" />
<label for="confirm">Confirm Email * : </label><input type="text" name="mail2" id="mail2" />
</fieldset><br /><br />
<fieldset>
<legend>Votre question</legend>
<br />
<br />
<label for="question">Question :</label><br />
<textarea name="question" id="question" rows="20" cols="70">Posez votre question ici...
</textarea>
</fieldset>
<input type="submit" name="valider" value="Envoyer" />
</form>
Bonjour,
Merci Alain pour ta réponse, j'ai écrit le code suivant qui à l'air de fonctionner, sauf pour la vérification de la question :
<?php
if (isset($_POST['nom']) and isset($_POST['prenom']) and isset($_POST['mail']) and isset($_POST['question']))
{
if ($_POST['nom'] != NULL and $_POST['prenom'] != NULL and $_POST['mail'] != NULL and $_POST['question'] != NULL)
{
if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))
{
mysql_connect("localhost","root","");
mysql_select_db("ma_base");
$nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
$prenom = mysql_real_escape_string(htmlspecialchars($_POST['prenom']));
$mail = mysql_real_escape_string(htmlspecialchars($_POST['mail']));
$question = mysql_real_escape_string(htmlspecialchars($_POST['question']));
$question = nl2br($question);
mysql_query("INSERT INTO contact VALUES('', '$nom', '$prenom', '$mail', '$question')");
mysql_close();
}
}
}
if (isset($_POST['mail']))
{
$_POST['mail'] = htmlspecialchars($_POST['mail']);
if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']) == false)
{
echo'<font color="red">-Votre adresse mail n\'est pas valide</font><br />';
}
}
if (isset($_POST['nom']))
{
$_POST['nom'] = htmlspecialchars($_POST['nom']);
if ($_POST['nom'] == NULL)
{
echo'<font color="red">-Vous devez indiquer votre nom</font><br />';
}
}
if (isset($_POST['prenom']))
{
$_POST['prenom'] = htmlspecialchars($_POST['prenom']);
if ($_POST['prenom'] == NULL)
{
echo'<font color="red">-Vous devez indiquer votre prenom</font><br />';
}
}
if (isset($_POST['question']))
{
$_POST['question'] = htmlspecialchars($_POST['question']);
if ($_POST['question'] == NULL)
{
echo'<font color="red">-Vous devez poser votre question</font><br />';
}
}
?>
<form method="post" action="ma_page.php">
<fieldset>
<legend>Vos informations</legend><br /><br />
<label for="nom">Nom : </label><input type="text" name="nom" id="nom" />
<label for="prenom">Prénom : </label><input type="text" name="prenom" id="prenom" /><br /><br />
<label for="naissance" id="naissance">Date de naissance (JJ/MM/AAAA) :</label> <input type="text" size="2" name="jour" id="jour" /> / <input type="text" size="2" name="mois" id="mois" /> / <input type="text" size="4" name="annee" id="annee" /><br /><br />
<label for="mail">Adresse Email * : </label><input type="text" name="mail" id="mail" />
</fieldset><br /><br />
<fieldset>
<legend>Votre question</legend><br /><br />
<br />
<br />
<label for="question">Question :</label><br />
<textarea name="question" id="question" rows="20" cols="70">
</textarea>
</fieldset>
<input type="submit" name="valider" value="Envoyer" />
</form>
Voilà pour le code !
Mais je me demande pourquoi lorsqu'on ne met rien dans le textarea de la question, rien ne s'affiche pour dire à l'utilisateur de remplir le champ comme pour le nom et le prénom.
Est-ce que tu aurais une idée sur la question?
J'avais aussi mis un else { echo"Votre demande a été prise en compte"} mais cela n'a pas l'air de fonctionner non plus.
Merci d'avance pour tes lumières !
Merci Alain pour ta réponse, j'ai écrit le code suivant qui à l'air de fonctionner, sauf pour la vérification de la question :
<?php
if (isset($_POST['nom']) and isset($_POST['prenom']) and isset($_POST['mail']) and isset($_POST['question']))
{
if ($_POST['nom'] != NULL and $_POST['prenom'] != NULL and $_POST['mail'] != NULL and $_POST['question'] != NULL)
{
if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))
{
mysql_connect("localhost","root","");
mysql_select_db("ma_base");
$nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
$prenom = mysql_real_escape_string(htmlspecialchars($_POST['prenom']));
$mail = mysql_real_escape_string(htmlspecialchars($_POST['mail']));
$question = mysql_real_escape_string(htmlspecialchars($_POST['question']));
$question = nl2br($question);
mysql_query("INSERT INTO contact VALUES('', '$nom', '$prenom', '$mail', '$question')");
mysql_close();
}
}
}
if (isset($_POST['mail']))
{
$_POST['mail'] = htmlspecialchars($_POST['mail']);
if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']) == false)
{
echo'<font color="red">-Votre adresse mail n\'est pas valide</font><br />';
}
}
if (isset($_POST['nom']))
{
$_POST['nom'] = htmlspecialchars($_POST['nom']);
if ($_POST['nom'] == NULL)
{
echo'<font color="red">-Vous devez indiquer votre nom</font><br />';
}
}
if (isset($_POST['prenom']))
{
$_POST['prenom'] = htmlspecialchars($_POST['prenom']);
if ($_POST['prenom'] == NULL)
{
echo'<font color="red">-Vous devez indiquer votre prenom</font><br />';
}
}
if (isset($_POST['question']))
{
$_POST['question'] = htmlspecialchars($_POST['question']);
if ($_POST['question'] == NULL)
{
echo'<font color="red">-Vous devez poser votre question</font><br />';
}
}
?>
<form method="post" action="ma_page.php">
<fieldset>
<legend>Vos informations</legend><br /><br />
<label for="nom">Nom : </label><input type="text" name="nom" id="nom" />
<label for="prenom">Prénom : </label><input type="text" name="prenom" id="prenom" /><br /><br />
<label for="naissance" id="naissance">Date de naissance (JJ/MM/AAAA) :</label> <input type="text" size="2" name="jour" id="jour" /> / <input type="text" size="2" name="mois" id="mois" /> / <input type="text" size="4" name="annee" id="annee" /><br /><br />
<label for="mail">Adresse Email * : </label><input type="text" name="mail" id="mail" />
</fieldset><br /><br />
<fieldset>
<legend>Votre question</legend><br /><br />
<br />
<br />
<label for="question">Question :</label><br />
<textarea name="question" id="question" rows="20" cols="70">
</textarea>
</fieldset>
<input type="submit" name="valider" value="Envoyer" />
</form>
Voilà pour le code !
Mais je me demande pourquoi lorsqu'on ne met rien dans le textarea de la question, rien ne s'affiche pour dire à l'utilisateur de remplir le champ comme pour le nom et le prénom.
Est-ce que tu aurais une idée sur la question?
J'avais aussi mis un else { echo"Votre demande a été prise en compte"} mais cela n'a pas l'air de fonctionner non plus.
Merci d'avance pour tes lumières !