Aller au contenu

Contrôle et envoi de données formulaire


Neige

Sujets conseillés

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="java script: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="java script: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ées à Choï. Elles ne font en aucun cas l'objet de communications extérieures.<br />
Vous disposez d'un droit d'accès, de modification, de rectification et de suppression des données qui vous concernent (art. 34 de la loi "Informatique et Libertés"). <br />
Pour l'exercer, adressez-vous à <a href="mailto:choi_AT_choihj.com">choi_AT_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é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_AT_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é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_AT_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 été envoyé, 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.

Edit Norseb : merci d'utiliser la balise CODEBOX pour les codes les plus longs

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Neige,

Je vais tenter de répondre à tes deux premières questions. Elles sont en rapport avec la même erreur dans ton formulaire.

Pour le script PHP, les valeurs "oui" et "non" sont attachées à $_POST['news']. Le problème est que, dans ton formulaire, tu attaches l'un à "new_ok", et l'autre à "news_no". Tu devrais donc changer la valeur de tes attributs "name", cad remplacer

<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>

par

<input class="news" type="radio" name="news" 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" 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>

J'espère que cela t'aidera. A bientôt !

Modifié par biouche
Lien vers le commentaire
Partager sur d’autres sites

Merci, ça marche !

Au cas où ça peut aider :

Pour le point 1) et 2) j'ai fait comme tu m'as dit et nommé pareil les 2 boutons radio ("radionews"),

pour la récup des valeurs j'ai mis :

if (isset($_POST["radionews"])) $_POST["radionews"];

et pour leur contrôle :

elseif (empty($_POST["radionews"])) { // L'utilisateur n'a renseigné ce champ
$erreur="Veuillez répondre par oui ou par non.";
}

Pour le 3) et 4), j'ai inclu mon fichier php dans mon formulaire pour avoir les alertes sur la même page et le message de confirmation sur une nouvelle page mais au design du site, et du coup pas besoin de faire une redirection.

Pour 5), ça marche en fermant les guillemets à chaque fin de ligne et en les rouvrant et en ajoutant un "." avant le "=" pour la suite :

$mon_objet = "Contact";
$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 : $radionews\r\n";

Et pour le 6) j'ai fait plus simple en remplaçant dans l'input le javascript par :

style="text-transform:capitalize;"

Merci encore :-)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...