formulaire php incomplet envoyé vers bdd

Petit nouveau ! | 2 Messages

13 févr. 2013, 14:22

bonjour à tous

j'ai un problème avec un formulaire qui envoie les données vers ma bdd malgré que certains champs obligatoires ne soient pas remplis

ce qu fait que j'ai des entrées qui ne sont pas complètes!! merci d'avance

je vous joins mon code:
<?php

// D'abord, on se connecte à MySQL
mysql_connect("", "", "");
mysql_select_db("");


// On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
$nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
$telephone = mysql_real_escape_string(htmlspecialchars($_POST['telephone']));
$email = mysql_real_escape_string(htmlspecialchars($_POST['email']));
$repas_a = mysql_real_escape_string(htmlspecialchars($_POST['repas_a']));
$repas_e = mysql_real_escape_string(htmlspecialchars($_POST['repas_e']));




if (isset($_POST["envoyer"])){ // Si le formulaire a été soumis
$etat = "erreur"; // On initialise notre etat à erreur, il sera changé à "ok" si la vérification du formulaire est un succès, sinon il reste à erreur

// On récupère les champs du formulaire, et on arrange leur mise en forme
if (isset($_POST["nom"])) $_POST["nom"]=trim(stripslashes($_POST["nom"])); // trim() enlève les espaces en début et fin de chaine

// On récupère les champs du formulaire, et on arrange leur mise en forme
if (isset($_POST["telephone"])) $_POST["telephone"]=trim(stripslashes($_POST["telephone"])); // trim() enlève les espaces en début et fin de chaine

if (isset($_POST["email"])) $_POST["email"]=trim(stripslashes($_POST["email"])); // stripslashes() retire les backslashes ==> \' devient '

// On récupère les champs du formulaire, et on arrange leur mise en forme
if (isset($_POST["repas_a"])) $_POST["repas_a"]=trim(stripslashes($_POST["repas_a"])); // trim() enlève les espaces en début et fin de chaine

// On récupère les champs du formulaire, et on arrange leur mise en forme
if (isset($_POST["repas_e"])) $_POST["repas_e"]=trim(stripslashes($_POST["repas_e"])); // trim() enlève les espaces en début et fin de chaine

// Après la mise en forme, on vérifie la validité des champs
if (empty($_POST["nom"])) { // L'utilisateur n'a pas rempli le champ nom d'équipe
$erreur="Vous n'avez pas entré votre nom et prénom..."; // On met dans erreur le message qui sera affiché
}
elseif (empty($_POST["telephone"])) { // L'utilisateur n'a pas rempli le champ telephone
$erreur="Vous n'avez pas entré de n° de téléphone..."; // On met dans erreur le message qui sera affiché
}
elseif (empty($_POST["email"])) { // L'utilisateur n'a pas rempli le champ email
$erreur="Nous avons besoin de votre e-mail pour vous répondre...";
}
elseif (!preg_match("$[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email"])){ // On vérifie si l'email est bien de la forme [email protected]
$erreur="Votre adresse e-mail n'est pas valide...";
}

else { // Si tous les champs sont valides, on change l'état à ok
$etat="ok";
}

// Ensuite on enregistre le message
mysql_query("INSERT INTO inscription_marche VALUES('', '".$nom."', '".$telephone."', '".$email."', '".$repas_a."', '".$repas_e."')") or die(mysql_error());

// On se déconnecte de MySQL
mysql_close();

}
else { // Sinon le formulaire n'a pas été soumis
$etat="attente"; // On passe donc dans l'état attente
}

if ($etat!="ok"){ // Le formulaire a été soumis mais il y a des erreurs (etat=erreur) OU le formulaire n'a pas été soumis (etat=attente)
if ($etat=="erreur"){ // Cas où le formulaire a été soumis mais il y a des erreurs
echo "<span style=\"color:red\">".$erreur."</span><br /><br />\n"; // On affiche le message correspondant à l'erreur
}
?>

<!-- Formulaire HTML qu'on affiche dans l'état attente ou erreur -->
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>" enctype="multipart/form-data"> <!-- Les données du formulaire seront récupérée avec la méthode POST, et action correspond à la page contenant le formulaire -->
<p style="text-align:left">
<label for="nom">Nom et prénom *</label> <!-- Intitulé du champ nom -->
<input type="text" style="margin-right:160px; position:relative;float:right" size="40" name="nom" id="nom" value="<?php
if (!empty($_POST["nom"])) {
// le nom a été saisi --> le réafficher
echo htmlspecialchars($_POST["nom"],ENT_QUOTES); // htmlspecialchars() convertit les caractères spéciaux en leurs code html, exemple : & devient &
}
?>" />
<br><br>

<label for="email">E-mail *</label><!-- Intitulé du champ e-mail -->
<input type="text" style="margin-right:160px; position:relative;float:right" size="40" name="email" id="email" value="<?php
if (!empty($_POST["email"])) {
// l'e-mail de l'expéditeur a été saisi --> le réafficher
echo htmlspecialchars($_POST["email"],ENT_QUOTES);
}
?>" />
<br><br>

<label for="telephone">N° de téléphone*</label> <!-- Intitulé du champ telephone-->
<input type="text" style="margin-right:160px; position:relative;float:right" size="40" name="telephone" id="telephone" value="<?php
if (!empty($_POST["telephone"])) {
// le nom du 3ème équipier a été saisi --> le réafficher
echo htmlspecialchars($_POST["telephone"],ENT_QUOTES);// htmlspecialchars() convertit les caractères spéciaux en leurs code html, exemple : & devient &
}
?>" />
<br><br>

<label for="repas_a">Nombre de repas adulte (11 Euros)</label> <!-- Intitulé du champ repas adulte-->
<input type="text" style="margin-right:160px; position:relative;float:right" size="40" name="repas_a" id="repas_a" value="<?php
if (!empty($_POST["repas_a"])) {
// le nom du 3ème équipier a été saisi --> le réafficher
echo htmlspecialchars($_POST["repas_a"],ENT_QUOTES);// htmlspecialchars() convertit les caractères spéciaux en leurs code html, exemple : & devient &
}
?>" />
<br><br>

<label for="repas_e">Nombre de repas enfants (7 Euros)</label><!-- Intitulé du champ repas enfant-->
<input type="text" style="margin-right:160px; position:relative;float:right" size="40" name="repas_e" id="repas_e" value="<?php
if (!empty($_POST["repas_e"])) {
// le nom du 3ème équipier a été saisi --> le réafficher
echo htmlspecialchars($_POST["repas_e"],ENT_QUOTES);// htmlspecialchars() convertit les caractères spéciaux en leurs code html, exemple : & devient &
}
?>" />
<br><br>

<input type="submit" name="envoyer" value="Envoyer" /><input type="reset" name="reset" value="Effacer" />
</p>
</form>
<!-- FIN du formulaire HTML -->

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 févr. 2013, 23:49

salut,

conditionne ton mysql_query avec la valeur de $etat_ok.


Évite ce type de chose
// On utilise les fonctions PHP mysql_real_escape_string et htmlspecialchars pour la sécurité
$nom = mysql_real_escape_string(htmlspecialchars($_POST['nom']));
$telephone = mysql_real_escape_string(htmlspecialchars($_POST['telephone']));
$email = mysql_real_escape_string(htmlspecialchars($_POST['email']));
$repas_a = mysql_real_escape_string(htmlspecialchars($_POST['repas_a']));
$repas_e = mysql_real_escape_string(htmlspecialchars($_POST['repas_e']));

- Parce que tu ne sais pas si tous les index existe a ce moment. A la limite avant le mysql_query lorsque tu est certain que le formulaire est complet.
- le htmlspecialchars est à réserver a l'affichage. insère les données brutes dans la base.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 2 Messages

15 févr. 2013, 12:12

bonjour je reviens vers vous
je n'y arrive toujours pas!!
ma bdd s'incréménte toujours même si les champs ne sont pas remplis!!
j'ai essayé de triturer un peu mon code mais ça marche toujours pas!
j'ai pas trop compris non plus "conditionne ton mysql_query avec la valeur de $etat_ok."
et une chose bizarre aussi, c'est que j'ai un mail de confirmation qui m'arrive si quelqu'un s'est inscrit,
mais si le formulaire n'est pas complet, là je ne reçoit pas le mail , la bdd elle s'incrémente toujours!!