Vérification des champs vides [Résolu/Fermé]

Signaler
-
 Ogden -
Bonjour,

Je viens de crée un formulaire.html pour mon site, mais j'ai un soucis avec le .php
Etant un débutant dans la matiere, j'ai trouvé la partie php sur google et j'ai réussi a la transformer pour mon formulaire.
Tout fonctionne excepter la vérification des champs vides.
Le probleme c'est que si je ne remplis pas les cases et que je fais quand meme Envoyer, il m'envois quand meme sur la page merci.html mais je ne recois pas l'email.

Or ce que je souhaiterai c'est que si je click sur Envoyer sans remplire le formulaire, qu'une fenetre apparaisse et dise: Veuillez mettre votre Nom (Prénom, Email etc)

Si vous arrivez a corriger l'erreur, je vous en serai toujours reconnaissant lol.

Voici le code php.
Merci d'avance.


<?php
/*
********************************************************************************************
CONFIGURATION
********************************************************************************************
*/
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
$destinataire = 'mon@email';

// copie ? (envoie une copie au visiteur)
$copie = 'oui'; // 'oui' ou 'non'

// Messages de confirmation du mail
header('Location: merci.html');

// Messages d'erreur du formulaire
$message_erreur_formulaire = "Vous devez d'abord envoyer le formulaire.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/


// on teste si le formulaire a été soumis
if (!isset($_POST['envoi']))
{
// formulaire non envoyé
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{
/*
* cette fonction sert à nettoyer et enregistrer un texte
*/
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}

// magic quotes ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
$text = nl2br($text);
return $text;
};

/*
* Cette fonction sert à vérifier la syntaxe d'un email
*/
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};

// formulaire envoyé, on récupère tous les champs.
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
$telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : '';
$prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
$paiement = (isset($_POST['paiement'])) ? Rec($_POST['paiement']) : '';
$modele = (isset($_POST['modele'])) ? Rec($_POST['modele']) : '';
$prix = (isset($_POST['prix'])) ? Rec($_POST['prix']) : '';

// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré

if (($nom != '') && ($email != '') && ($adresse != '') && ($telephone != '') && ($prenom != '') && ($paiement != '') && ($modele != '') && ($prix != ''))
{
// les variables sont remplies, on génère puis envoie le mail
$headers = 'From: '.$email.'' . "\r\n";

// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};

// Remplacement de certains caractères spéciaux
$message = str_replace("'","'",$message);
$message = str_replace("'","'",$message);
$message = str_replace(""",'"',$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("<","<",$message);
$message = str_replace(">",">",$message);
$message = str_replace("&","&",$message);
$message = str_replace("é","é",$message);
$message = str_replace("è","è",$message);
$message = str_replace("€","€",$message);



$message = 'Nom : '.$nom."\r\n\r\n";
$message .= 'Prénom : '.$prenom."\r\n\r\n";
$message .= 'Adresse : '.$adresse."\r\n\r\n";
$message .= 'Téléphone : '.$telephone."\r\n\r\n";
$message .= 'Modèle : '.$modele."\r\n\r\n";
$message .= 'Prix : '.$prix."\r\n\r\n";
$message .= 'Type De Paiement : '.$paiement."\r\n";



// Envoi du mail
if (mail($cible, 'Nouvelle Commande', $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au formulaire</a></p>'."\n";
};
}; // fin du if (!isset($_POST['envoi']))
?>

7 réponses

Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
Des erreurs de positionnement de parties de codes, les fonctions ne doivent pas être dans la partie condition

voir aussi mes commentaires

<?php
/*
********************************************************************************************
CONFIGURATION
********************************************************************************************
*/
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
$destinataire = 'mon@email';

// copie ? (envoie une copie au visiteur)
$copie = 'oui'; // 'oui' ou 'non'

// Messages de confirmation du mail
header('Location: merci.html');

// Messages d'erreur du formulaire
$message_erreur_formulaire = "Vous devez d'abord envoyer le formulaire.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/
////FONCTIONS //////
/*
* cette fonction sert à nettoyer et enregistrer un texte
*/

function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}

// magic quotes ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
$text = nl2br($text);
return $text;
}
/*
* Cette fonction sert à vérifier la syntaxe d'un email
*/
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};
///fin des fonctions
		//recup des champs postés sinon initialisation à vide
// formulaire envoyé, on récupère tous les champs.
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
$telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : '';
$prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
$paiement = (isset($_POST['paiement'])) ? Rec($_POST['paiement']) : '';
$modele = (isset($_POST['modele'])) ? Rec($_POST['modele']) : '';
$prix = (isset($_POST['prix'])) ? Rec($_POST['prix']) : '';

// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré

// on teste si le formulaire a été soumis
if (!isset($_POST['envoi']))
{
// formulaire non envoyé
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{
if (($nom != '') && ($email != '') && ($adresse != '') && ($telephone != '') && ($prenom != '') && ($paiement != '') && ($modele != '') && ($prix != ''))
{
// les variables sont remplies, on génère puis envoie le mail
$headers = 'From: '.$email.'' . "\r\n";

// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};

// Remplacement de certains caractères spéciaux
$message = str_replace("'","'",$message);
$message = str_replace("'","'",$message);
$message = str_replace("\"",'"',$message); //déja une erreur a cette ligne il faut échapper le "
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("<","<",$message);
$message = str_replace(">",">",$message);
$message = str_replace("&","&",$message);
$message = str_replace("é","é",$message);
$message = str_replace("è","è",$message);
$message = str_replace("€","€",$message);



$message = 'Nom : '.$nom."\r\n\r\n";
$message .= 'Prénom : '.$prenom."\r\n\r\n";
$message .= 'Adresse : '.$adresse."\r\n\r\n";
$message .= 'Téléphone : '.$telephone."\r\n\r\n";
$message .= 'Modèle : '.$modele."\r\n\r\n";
$message .= 'Prix : '.$prix."\r\n\r\n";
$message .= 'Type De Paiement : '.$paiement."\r\n";



// Envoi du mail
if (mail($cible, 'Nouvelle Commande', $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au formulaire</a></p>'."\n";
};
}; // fin du if (!isset($_POST['envoi']))
?> 
Merci pour ta réponse.

J'ai vu que t'avais restructuré le mail, et remarqué une erreur, j'ai corrigé cela, mais ca ne fonctionne toujours pas, ca m'envois encore a la page de remerciement alors que j'ai rien remplis.

Et pour ce commentaire que tu as mis : //recup des champs postés sinon initialisation à vide

Cela veut dire que j'ai oublié d'initier ou c'est ce que fait cette fonction?
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
avec cette methode:

$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';

cela veut dire:

si le mon est posté alors $nom= valeur postée : sinon $nom= vide

mais comme tu vait mis cette partie de code dans une condition if(!isset

une des deux condition n'était jamais possible

Cela veut dire que j'ai oublié d'initier ou c'est ce que fait cette fonction? cette methode test initialise à vide si pas postée donc tu avait bien initialisé mais pas au bon endroit
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
concernant ton pb, tu as dès le début de ta page appelée par la soumission du formulaire:

// Messages de confirmation du mail
header('Location: merci.html');



donc automatiquement le header redirige vers la page merci.html sans aller plus loin dans le script
Donc si je comprend bien, je dois mettre le


// Messages de confirmation du mail
header('Location: merci.html');

plus bas dans le script?
Est ce qu'il doit etre a une place bien précise?
Ou est ce que je peu le mettre tout en bas?

Merci pour tes conseils en tout cas, c'est sympas :)
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
886
a la place de

if (mail($cible, 'Nouvelle Commande', $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}


tu mets ton header

if (mail($cible, 'Nouvelle Commande', $message, $headers))
{
// Messages de confirmation du mail
header('Location: merci.html'); 
}
Merci beaucoup Alain_42
Cela fonctionne.
C'est parfait!

Mon calvere est enfin terminé.

Je ne te remercierai jamais asser pour ton aide.

Au revoir.