Problème formulaire

Résolu/Fermé
Neige - 21 déc. 2006 à 01:33
 burkinar - 28 janv. 2012 à 18:50
Bonjour,

J'ai quelques problèmes concernant mon formulaire de contact. D'avance désolée mais je cherche depuis des heures et en vain. Peut-être pouvez-vous m'aider :

1) Comment exercer un contrôle sur les boutons radio ?
Mon script de contôle actuel ne doit pas être bon car quand je coche l'un des 2 boutons et que je valide, j'ai un message d'erreur ("Veuillez répondre par oui ou par non).

2) Comment récupérer la valeur du bouton radio sélectionné ? Le nom du champ s'affiche dans le mail qui m'est envoyé mais il est vide.

3) Comment faire en sorte que mes alertes de contrôle s'affichent au-dessous des champs à renseigner et non dans une nouvelle page (qui est blanche en plus) ?

4) Comment faire en sorte que mon message de confirmation ('Message bien envoyé...) s'affiche sur une page non blanche ? Dois-je lier mon template au formail.php ? Ou créer une page spéciale message-confirm (et si oui comment l'afficher ?).

5) Comment faire en sorte que dans les mails de confirmation et de récupération des données, tout le texte soit ferré à gauche ? J'ai essayé avec \r mais j'ai toujours ces alinéas :

Nom : (valeur)
Prénom : (valeur)
E-mail : (valeur)
Sujet : (valeur)
Message :
(valeur)
News :

6) Le changement de casse dans le champ Prénom ne fonctionne pas, y aurait-il une erreur dans le script ?

Voici mon fichier html :
<form name="contact" action="http://e.guerfi.free.fr/PREPROD/formail.php" method="post">
 <div id="form">
  <h3>Pour nous contacter, merci de compléter ce formulaire.</h3>
  <p><em>(*) : champs obligatoires</em></p>
  <p>
  <label for="nom" title="Saisissez votre NOM">Votre nom *</label><br />
  <input class="txt" type="text" size="40" name="nom" id="nom" title="Saisissez votre NOM" tabindex="1" value="" onChange="javascript:this.value=this.value.toUpperCase();"/>
  <script type="text/javascript" language="JavaScript">document.contact.nom.focus();</script><br />
  <label for="prenom" title="Saisissez votre NOM">Votre prénom *</label><br />
  <input class="txt" type="text" size="40" name="prenom" id="prenom" title="Saisissez votre PRENOM" tabindex="2" value="" onChange="javascript:changeCase(this.form.prenom)"/><br />
  <label for="email" title="Saisissez votre EMAIL">Votre e-mail *</label><br />
  <input class="txt" type="text" size="40" name="email" id="email" title="Saisissez votre adresse EMAIL" tabindex="3" value="" /><br />
  <label for="sujet" title="Saisissez le SUJET de votre message">Sujet de votre message *</label><br />
  <select name="sujet" id="sujet" tabindex="4">
    <option selected="selected" value="choisir">Sélectionnez votre sujet</option>
    <option value="dispo">Je souhaite connaître la disponibilité d'un article **</option>
    <option value="achat">Où puis-je acheter Choï ?</option>
    <option value="presse">Je suis un professionnel de la presse</option>
    <option value="commercial">Je voudrais commercialiser votre marque</option>
    <option value="desabo">Je souhaite me désabonner de votre mailing-list</option>
    <option value="autre">Autre demande</option>
  </select>
  <p class="mentions">** Accessoires uniquement.
  <br />
  Veuillez en préciser la référence dans votre message ci-dessous.</p>
  <label for="message" title="Saisissez votre MESSAGE">Votre message *</label><br />
  <textarea name="text" id="message" title="Saisissez votre MESSAGE" tabindex="5" cols="45" rows="7"></textarea>
  <p>Je souhaite recevoir les news<br />
  <input class="news" type="radio" name="news_ok" id="news_ok" title="Je souhaite recevoir les news" tabindex="6" value="1" />
  <label for="news_ok" title="Je souhaite recevoir les news">Oui</label>
  <br />
  <input class="news" type="radio" name="news_no" id="news_no" title="Je ne souhaite pas recevoir les news" tabindex="7" value="O" />
  <label for="news_no" title="Je ne souhaite pas recevoir les news">Non</label></p>
  <br />
  <input class="sub" type="submit" name="soumettre" value="Envoyer" title="Cliquez sur ce bouton pour envoyer le formulaire" tabindex="8" />
  <input class="sub" type="reset" name="annuler" value="Effacer" title="Cliquez sur ce bouton pour effacer le formulaire" tabindex="9" /></p><br /><br />
<p class="mentions">
  Les informations personnelles recueillies par le biais de ce formulaire sont uniquement destin&eacute;es &agrave; Cho&iuml;. Elles ne font en aucun cas l'objet de communications ext&eacute;rieures.<br />
Vous disposez d'un droit d'acc&egrave;s, de modification, de rectification et de suppression des donn&eacute;es qui vous concernent (art. 34 de la loi &quot;Informatique et Libert&eacute;s&quot;). <br />
Pour l'exercer, adressez-vous &agrave; <a href="mailto:choi@choihj.com">choi@choihj.com</a>.
</p>
</div>
 </form>


Et mon fichier php :
<?php
if (isset($_POST["soumettre"])){ // 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
 	
	if (isset($_POST["prenom"])) $_POST["prenom"]=trim(stripslashes($_POST["prenom"]));
    
	if (isset($_POST["email"])) $_POST["email"]=trim(stripslashes($_POST["email"])); // stripslashes()  retire les backslashes ==> \' devient '

    if (isset($_POST["sujet"])) $_POST["sujet"]=trim(stripslashes($_POST["sujet"]));

    if (isset($_POST["text"])) $_POST["text"]=trim(stripslashes($_POST["text"]));
	
	 if (isset($_POST["news"])) $_POST["news"]=trim(stripslashes($_POST["news"]));

    // 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 pseudo
        $erreur="Veuillez renseigner votre nom."; // On met dans erreur le message qui sera affiché
        }
		elseif (empty($_POST["prenom"])) { // L'utilisateur n'a pas rempli le champ email
            $erreur="Veuillez renseigner votre pr&eacute;nom.";
        }
        elseif (empty($_POST["email"])) { // L'utilisateur n'a pas rempli le champ email
            $erreur="Veuillez renseigner votre e-mail.";
        }
        elseif (!eregi("^[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 messagerie@domaine.tld (cf cours d'expressions régulières)
            $erreur="Veuillez renseigner une adresse e-mail valide.";
        }
        elseif (empty($_POST["sujet"])) { // L'utilisateur n'a pas sélectionné le champ sujet
            $erreur="Veuillez s&eacute;lectionner le sujet de votre message.";
        }
        elseif (empty($_POST["text"])) { // L'utilisateur n'a écrit aucun message
            $erreur="Veuillez saisir votre message.";
        }
		 else { // Si tous les champs sont valides, on change l'état à ok
            $etat="ok";
        }
}
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
    }
?>


<?php
}
else { // Sinon l'état est ok donc on envoie le mail
    $nom = $_POST["nom"]; // On stocke les variables récupérées du formulaire
   	$prenom = $_POST["prenom"];
    $email = $_POST["email"];
    $sujet = $_POST["sujet"];
    $text = $_POST["text"];
	$news = $_POST["news"];
    
    $adresse = "eguerfi@gmail.com"; // Mise en forme du message que vous recevrez
    $exped = "Estelle";
	$mon_objet = "Contact";
    $message = "Nom : $nom \r
	Prénom : $prenom \r
    E-mail : $email \r
    Sujet : $sujet \r
    Message : \r $text
	News : \r $news";
	$mon_url = "http://e.guerfi.free.fr/PREPROD/index.html";

    // Mise en forme de l'accusé réception qu'il recevra
	$son_objet = "Confirmation de votre message";
    $accuse = "Bonjour $prenom $nom,\r
    Votre message nous a bien été envoyé et nous tâcherons de vous répondre le plus rapidement possible.\r
    Votre E-mail : $email \r
    Le sujet de votre message : $sujet \r
    Votre message : \r $text \r
    Merci et à bientôt !";  

    // Envoie du mail
    $entete = "From: " . $exped . " <" . $adresse . ">\n"; // On prépare l'entête du message
    $entete .= "MIME-Version: 1.0";

     if (mail($adresse,$mon_objet,$message,$entete) && mail($email,$son_objet,$accuse,$entete)){ // Si le mail a été envoyé
        echo "<p style=\"text-align:center\">Votre message a &eacute;t&eacute; envoy&eacute;, vous recevrez une confirmation par mail.<br /><br />\n"; // On affiche un message de confirmation
        echo "<a href=\"" . $mon_url . "\">Retour</a></p>\n"; // Avec un lien de retour vers l'accueil du site
    }
    else { // Sinon il y a eu une erreur lors de l'envoi
        echo "<p style=\"text-align:center\">Un problème s'est produit lors de l'envoi du message.\n";
        echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a></p>\n"; // On propose un lien de retour vers le formulaire
     } 
  
}
/* enregistrer les coordonnées de l'envoi dans un fichier texte (chmod 755) dans un répertoire admin que l'on protégera avec un fichier .htacces */

/* on définit la date et l'heure de l'entree */
$datedujour = date('d/m/y/H:i:s');
/* on définit le nom et le lieu du fichier qui sera créé pour stocker les infos */
$filename="./admin/contact.txt";
/*on écrit dans le fichier les infos, séparées par un ; et on termine la ligne par un retour à la ligne */
$fl=fopen($filename,"a+");
fwrite($fl,"$datedujour;$nom;$prenom;$email;$news;\n\r");
/* on ferme le fichier */
fclose($fl);
?> 


Merci beaucoup.

3 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
21 déc. 2006 à 15:20
Bonjour,

Je vais tenter de répondre à tes questions point par point.

1 - Je n'ai pas trouvé dans le code la partie qui vérifie les boutons radio... Essaie quelque chose du genre : if (isset($_POST["radionews"]))
(cf point 2)

2 - Pour que deux boutons radio soient liés entre eux, il faut leur donner le même nom. La valeur qui sortira de l'ensemble des boutons ayant le même nom est déterminée par le champ value du bouton sélectionné.
Tu dois donc modifier ton code comme ceci :
  <p>Je souhaite recevoir les news<br />
  <input class="news" type="radio" name="radionews" value="news_ok" id="news_ok" title="Je souhaite recevoir les news" tabindex="6" value="1" />
  <label for="news_ok" title="Je souhaite recevoir les news">Oui</label>
  <br />
  <input class="news" type="radio" name="radionews" value="news_no" id="news_no" title="Je ne souhaite pas recevoir les news" tabindex="7" value="O" />
  <label for="news_no" title="Je ne souhaite pas recevoir les news">Non</label></p>

3 - Pour ça, il faut réécrire, en php, le formulaire de ta page html. Et, en cas d'erreur, au moment où tu affiches le contrôle concerné, tu rajoutes la petite phrase explicative. Par exemple :
    if ($etat=="erreur"){ // Cas où le formulaire a été soumis mais il y a des erreurs
?>
Placer ici tout le code de la page jusqu'au champ qui contient l'erreur (il faut donc utiliser une variable qui permette de se "souvenir" de quels sont les champs à corriger)
<?
        echo "<span style=\"color:red\">".$erreur."</span>"; // On affiche le message correspondant à l'erreur
?>
continuer le formulaire, et ainsi de suite s'il y a plusieurs erreurs...
<?
    } // et on ferme le "if", quand même

4 - Idem qu'au-dessus... Une page php est en fait en tout point équivalent à une page html, en sortie. Donc, si dans tout ton code php, tu n'affiches que "email envoyé", le résultat sera une page html vierge, sauf pour ce texte. Il faut donc, même sur les pages php, placer les en-têtes "<html>", "<head>", "<body>", etc., ainsi que les feuilles de style et autre. Pour t'aider à comprendre, tu peux essayer d' "afficher la source", dans ton navigateur, de ta page php et de ta page html. Tu verras la différence !

5 - Essaie de préciser ligne à ligne les champs, en fermant les guillemets à chaque fin de ligne et en les rouvrant (car si tu regardes ton code source, les tabulations appartiennent en fait à la chaine de caractère, et non à la présentation du code en lui-même !)
$message = "Nom : $nom \r\n";
$message += "Prénom : $prenom \r\n";
$message += "E-mail : $email \r\n";
$message += "Sujet : $sujet \r\n";
$message += "Message : \r\n";
$message += $text + "\r\n";
$message += "News : \r\n";
$message += $news;

6 - Je n'ai pas trouvé la fonction changeCase() dans le code fourni, mais à mon avis, quand tu l'appelles, tu devrais plutôt mettre javascript:changeCase(this) ou alors javascript:changeCase(this.value) (selon ce que fait ta fonction, ce que je ne peux pas savoir sans la voir ;) )

Voilà ! Dis-moi ce que ça donne... Je suis pas sûr d'avoir été clair partout :-/

Xavier
0
Merci d'avoir pris le temps de me répondre, tes explications sont au contraire limpides.

Et : ça marche !

Pour le point 5),
$message +=
ne fonctionne pas mais ça marche avec
$message.=


Et pour le 6) j'ai fait plus simple en remplaçant le javascript par
style="text-transform:capitalize;"
dans l'input.

Merci encore :-)
0
merci a vous deux
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
21 déc. 2006 à 18:59
Ah oui, désolé pour le .= transformé en +=, vu que je code en même temps en c# à mon boulot, des fois je me mélange un peu ^^'

Enfin, content d'avoir pu être utile :)
0
lefou4 Messages postés 73 Date d'inscription jeudi 21 décembre 2006 Statut Membre Dernière intervention 5 mai 2010 44
22 déc. 2006 à 13:15
Pour la question 1 :

Tu testes $_POST['news'] alors que tes champs input checkbox (qui devraient avoir le même nom) portent les name "news_ok" et "news_no". Mets "news" pour name et là ton champ sera bien tester.

Pour la question 2 :
En partant du principe que tu as corrigé la question 1, tu vérifies. qu'un des champs est bien coché avec isset($_POST['news']). Si $_POST['news'] est bien transmis alors il aura pour valeur celle du "value" du champ.
0