Erreur formulaire php

Résolu/Fermé
et24 Messages postés 5 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 15 mars 2011 - 14 mars 2011 à 08:47
et24 Messages postés 5 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 15 mars 2011 - 15 mars 2011 à 02:37
Bonjour,

je créé un site internet où j'ai ajouté un script php d'un formulaire protégé par captcha. Tout à l'air de bien fonctionner, jusqu'à ce que je remplisse les champs qui le compose pour le tester. Là, il me retourne à chaque fois "erreur, veuillez réessayer s'il vous plait". Pourtant je pense avoir bien rempli les champs comme indiqué (mes connaissances en php sont encore faible, je suis en plein apprentissage ^^).
Merci de votre attention, je vous poste le code source:
(je précise qu'à la base j'ai bien rempli les champs comme indiqué. J'ai juste modifié preg_match à la place de ereg parce que sinon il me ressortait une erreur de champs).
Merci d'avance!

<?php
// Dans la ligne qui suit, remplacer ## par l'adresse email du webmaster, à laquelle les messages devront être envoyés
$email_webmaster = "##";
// === traitement des données du formulaire ============================================================
if (isset($_POST["envoyer"])){
// le formulaire a été soumis
$etat = "erreur";
// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
// --- mise en forme des champs saisis dans le formulaire lors de sa soumission ---
if (isset($_POST["email_expediteur"])) {
$_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));
}
if (isset($_POST["titre"])) {
$_POST["titre"]=trim(stripslashes($_POST["titre"]));
}
if (isset($_POST["message"])) {
$_POST["message"]=trim(stripslashes($_POST["message"]));
}
// --- test de la validité des champs saisis ---
if (empty($_POST["email_expediteur"])) {
// il manque l'email de l'expéditeur
$erreur="Saisissez votre adresse email";
}
elseif (!preg_match("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$^",$_POST["email_expediteur"])){
// l'adresse e-mail n'est pas valide
$erreur="Votre adresse e-mail n'est pas valide, merci de réessayer.";
}
elseif (empty($_POST["message"])) {
// le message est vide
$erreur="Saisissez un message svp";
}
elseif (empty($_POST["code"])) {
// le code n'est pas saisi
$erreur="Saisissez le code de verification s'il vous plait.";
}

else {
// --- Vérification de la validité du code captcha ---
if (chk_crypt($_POST['code']))
// --- tous les champs sont correctement remplis: on pourra envoyer le mail ---
$etat="ok";
// --- Le code captcha n'est pas valide ---
else $erreur="Code de verification non valide, merci de réessayer.";
}
}

else {
// --- le formulaire n'a pas été soumis ---
$etat="attente";
}
// === fin de traitement des données du formulaire =======================================================
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Formulaire de contact</title>
</head>
<body>
<?php
if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur
if ($etat=="erreur"){
//le formulaire a été soumis avec une erreur
echo "<p><strong>".$erreur."</strong></p>\n";
// afficher le message d'erreur
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<p><label for="email_expediteur">Votre adresse e-mail (obligatoire):</label><br />
<input type="text" size="40" name="email_expediteur" id="email_expediteur" value="<?php
if (!empty($_POST["email_expediteur"])) {
// l'adresse email de l'expéditeur a été saisie: la réafficher
echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);
}
?>" />
</p>
<p><label for="titre">Type de bug (facultatif):</label><br />
<input type="text" size="40" name="titre" id="titre" value="<?php
if (!empty($_POST["titre"])) {
// le titre du message a été saisi: le réafficher
echo htmlspecialchars($_POST["titre"],ENT_QUOTES);
}
?>" />
</p>
<p><label for="message">Message (obligatoire):</label><br />
<textarea name="message" id="message" cols="40" rows="5"><?php
if (isset($_POST["message"])) {
// le message a été saisi: le réafficher
echo htmlspecialchars($_POST["message"],ENT_QUOTES);
}
?></textarea>
</p>
Veuillez entrez le code ci-dessous:
<?php dsp_crypt(0,1); ?>
<p><input type="text" name="code" /></p>
<p><input type="submit" name="envoyer" value="Envoyer" />
</p>
</form>
<?php
}
else {
// le formulaire a été soumis sans erreur, on envoie le mail
$entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";
$entete .= "MIME-Version: 1.0";
if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){
// mail envoyé
echo "Votre message a été envoyé.<br />\n";
echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Envoyer un autre message</a>\n";
}
else {
// erreur lors de l'envoi du mail
echo "Un problème s'est produit lors de l'envoi du message.\n";
echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez s'il vous plait.</a>\n";
}
}
?>	   </div>


7 réponses

et24 Messages postés 5 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 15 mars 2011
14 mars 2011 à 11:17
up ^^
0
Tu travaille en local?
0
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 14/03/2011 à 16:44
Salut, essaye ça pour voir, j'ai modifier quelques trucs ...dont...
1 - L'imbrication des if else, parce que s'était un peut louche ... :)
2 - Le filtre de validation des emails ...
3 - L'affichage des erreurs, car avant, si il y avait plusieurs erreurs, il ne s'afficherai qu'une seule, et ça sera toujours la dernière ...
4 - et a présent $etat est un booléen, si vrai, le formulaire est envoyé, si faux, il affiche les erreurs ...

<?php      
$email_webmaster = "##";      
if (isset($_POST["envoyer"])) {      
    $etat = true;      
          
    if (isset($_POST["email_expediteur"])) $email_expediteur = trim(stripslashes($_POST["email_expediteur"]));      
          
    elseif (empty($_POST["email_expediteur"])) {      
        $erreur1 = "Saisissez votre adresse email";      
        $etat = false;      
    }      
    elseif ((filter_var($_POST["email_expediteur"], FILTER_VALIDATE_EMAIL) === FALSE)){      
        $erreur1 = "Votre adresse e-mail n'est pas valide, merci de réessayer.";      
        $etat = false;      
    }      
          
    if (isset($_POST["titre"])) $titre = trim(stripslashes($_POST["titre"]));      
          
    if (isset($_POST["message"])) $message = trim(stripslashes($_POST["message"]));      
          
    elseif (empty($_POST["message"])) {      
        $erreur2 = "Saisissez un message svp";      
        $etat = false;      
    }          

    if (empty($_POST["code"])) {      
        $erreur3 = "Saisissez le code de verification s'il vous plait.";      
        $etat = false;      
    }      
    elseif (!empty($_POST["code"]) AND !chk_crypt($_POST['code'])) {      
        $etat = false;      
        $erreur3 = "Code de verification non valide, merci de réessayer.";      
    }      
}      
else $etat = false;           

if($etat) {      
    $entete = "From: ".$email_expediteur." <".$email_expediteur.">\n";      
    $entete .= "MIME-Version: 1.0";      
          
    if (mail($email_webmaster,$titre,$message,$entete)){      
        echo "Votre message a été envoyé.<br />\n";      
        echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Envoyer un autre message</a>\n";      
    }      
    else {      
        echo "Un problème s'est produit lors de l'envoi du message.\n";      
        echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez s'il vous plait.</a>\n";      
    }      
}      
?>      
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">      
<html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml">      
<head>      
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />      
    <title>Formulaire de contact</title>      
</head>      

<body>      
<?php      
if ($etat == false AND (isset($erreur1))){      
    echo "<p><strong>".$erreur1."</strong></p>\n";      
}      
elseif ($etat == false AND (isset($erreur2))){      
    echo "<p><strong>".$erreur2."</strong></p>\n";      
}      
elseif ($etat == false AND (isset($erreur3))){      
    echo "<p><strong>".$erreur3."</strong></p>\n";      
}      
?>      
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">      
        <p><label for="email_expediteur">Votre adresse e-mail (obligatoire):</label><br />      
            <input type="text" size="40" name="email_expediteur" id="email_expediteur" value="<?php if (!empty($_POST["email_expediteur"])) echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES); ?>" />      
        </p>      
          
        <p><label for="titre">Type de bug (facultatif):</label><br />      
            <input type="text" size="40" name="titre" id="titre" value="<?php if (!empty($_POST["titre"])) echo htmlspecialchars($_POST["titre"],ENT_QUOTES); ?>" />      
        </p>      
          
        <p><label for="message">Message (obligatoire):</label><br />      
            <textarea name="message" id="message" cols="40" rows="5"><?php if (isset($_POST["message"])) echo htmlspecialchars($_POST["message"],ENT_QUOTES); ?></textarea>      
        </p>      

        Veuillez entrez le code ci-dessous:      
        <?php dsp_crypt(0,1); ?>      

        <p><input type="text" name="code" /></p>      
        <p><input type="submit" name="envoyer" value="Envoyer" /></p>      
    </form>      
0
et24 Messages postés 5 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 15 mars 2011
14 mars 2011 à 12:20
merci JooS, je teste ça tout de suite et je reposte!
en tout cas merci

tito23, je travaillais en local mais je fais les tests directement sur mon hébergeur, ça m'évite ainsi de config apache et de voir directement le résultat (si mon hébergeur le tolère)
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
Modifié par tito23 le 14/03/2011 à 16:24
en local il faut configurer la variable SMTP et smtp_port et eventuellement sendmail_from dans php.ini.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
et24 Messages postés 5 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 15 mars 2011
14 mars 2011 à 13:38
malheureusement, le code que tu a arrangé n'as pas marché :s
j'ai opté pour un code sans captcha, mais je me heurte à un nouveau problème:
le message s'envoie niquel quand on remplit les champs mais je ne reçois rien dans ma boite mail. Je l'ai testé sur mon hébergeur. Se pourrait-il que ça soit en rapport avec mon hébergeur?
0
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 14/03/2011 à 17:02
ça dépend du système de captcha (dsp_crypt) que ta installer ??

Note : J'ai oublier quelque parenthèses :) ... c'est réglé, reste plus qu'a voir le système de captcha
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
14 mars 2011 à 16:50
essaie de changer ça
$entete = "From: ".$email_expediteur." <".$email_expediteur.">\n"; 
par
$entete = "From: ".$email_expediteur; 
0
et24 Messages postés 5 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 15 mars 2011
15 mars 2011 à 02:37
Alors après avoir testé vos solutions, j'ai opté pour une solution plus radicale .. ^^
j'ai changé d'hébergeur, et il se trouve que ça venait bien de lui. Pourtant, la fonction mail () était soi disant activée. J'ai retesté mon code de départ, et il marche parfaitement bien malgré quelques bizarreries que tu as souligné JooS ^^
merci beaucoup à vous deux en tous cas!
bonne soirée
0