Aller au contenu
Valtiel

Formulaire PHP (envoi de données/champs requis/captcha)

Noter ce sujet :

Recommended Posts

Dans mon exemple de traitement contact, il manque des " , essais avec cette nouvelle version:

                <div id="traitement_contact">
<?
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$mail = $_POST['mail'];
$tel = $_POST['tel'];
$sujet = $_POST['sujet'];
$message_internaute = $_POST['message'];
?>
<h1>Confirmation des informations</h1>
<p><strong>Confirmez-vous l'exactitude des informations suivantes ?</strong></p>
<p>
<?php echo htmlentities('' . $nom . ' ' . $prenom . ''); ?><br/>
<?php echo htmlentities('' . $mail . ''); ?><br/>
<?php echo htmlentities('' . $tel . ''); ?><br/><br/>
Sujet de votre message : <?php echo htmlentities('' . $sujet . ''); ?><br/><br/>
Votre message : <br/>
<?php echo htmlentities('' . $message_internaute . ''); ?>
</p>
<form method="post" action="envoi_contact.php">
<input type="hidden" name="nom" value="<?=$nom?>">
<input type="hidden" name="prenom" value="<?=$prenom?>">
<input type="hidden" name="sujet" value="<?=$sujet?>">
<input type="hidden" name="mail" value="<?=$mail?>">
<input type="hidden" name="tel" value="<?=$tel?>">
<input type="hidden" name="message" value="<?=$message_internaute?>">
<input id="submit" type="submit" value="Ok" />
<input id="submit" type="button" value="Retour" onclick="history.back()"/>
</form>
</div>

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, j'ai également apporté quelques modifications du code concernant les pages "traitement_contact" et "envoi_contact". J'ai enlevé les htmlentities() des variables récupérées avec $_POST car ça déformait tous les caractères spéciaux. J'ai également ajouté les " aux endroits que tu m'as indiqué et résultat, une amélioration, je reçois le message complet désormais :)

Par contre, j'ai maintenant des \\\ avant les '.

Lors du récapitulatif des informations, l'internaute voit un unique \ avant les ', dans ma boîte mail j'en ai 3. Concernant les autres caractères, aucune erreur.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok c'est déjà pas mal , on avance :)

Alors pour enlever les \ , tu peux utiliser la fonction stripslashes() juste avant l'envoi du mail

Partager ce message


Lien à poster
Partager sur d’autres sites

Cela fonctionne, plus d'antislashes désagréables qui se baladent mais par contre, là je me dis que l'informatique est d'un mystère infini... Je ne reçois désormais plus le mail -_-".

C'est décourageant :/.

PS : Bon en fait, je ne reçois plus de mail sur l'adresse mail de mon nom de domaine, par contre sur gmail pas de soucis... incompréhensible mais si ce n'est que ça, je m'en contenterais.

Par contre, est-ce possible de donner une largeur fixe à une ligne PHP ? Car si j'entre un très long message dans la partie prévue à cet effet, sur la page de traitement le message déborde complètement sur la droite et reste sur une seule et unique ligne.

J'ai essayé de mettre cette même ligne de code dans un <p id="message_internaute"></p> avec en CSS width: 700px et même un display: inline-block mais rien n'y fait.

Modifié par Valtiel

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est que de la logique. Alors, le problème doit venir de l'endroit ou tu as mis tes stripslashes().

L'idéal, c'est des les mettre avant de refaire un addslashes() (pour ne pas en avoir en double) à la deuxième étape de ton script.

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu voudrais que cela ressemble à ceci ? :


<?php echo stripslashes(addslashes(htmlentities('' . $tel . ''))); ?>

Partager ce message


Lien à poster
Partager sur d’autres sites

En fait tu pourrais avoir quelque cose comme ça dans traitement_contact:

                <div id="traitement_contact">
<?
$nom = strip_tags($_POST['nom']);
$prenom = strip_tags($_POST['prenom']);
$mail = strip_tags($_POST['mail']);
$tel = strip_tags($_POST['tel']);

$sujet = strip_tags($_POST['sujet']);
$message_internaute = strip_tags($_POST['message']);
?>
<h1>Confirmation des informations</h1>
<p><strong>Confirmez-vous l'exactitude des informations suivantes ?</strong></p>
<p>
<?=stripslashes($nom). ' ' . stripslashes($prenom) . ''; ?><br/>
<?=stripslashes($mail) ?><br/>
<?=stripslashes($tel) ?><br/><br/>
Sujet de votre message : <?=stripslashes($sujet); ?><br/><br/>
Votre message : <br/><?=stripslashes($message_internaute); ?>
</p>
<form method="post" action="envoi_contact.php">
<input type="hidden" name="nom" value="<?=addslashes($nom)?>">
<input type="hidden" name="prenom" value="<?=addslashes($prenom)?>">
<input type="hidden" name="sujet" value="<?=addslashes($sujet)?>">
<input type="hidden" name="mail" value="<?=addslashes($mail)?>">
<input type="hidden" name="tel" value="<?=addslashes($tel)?>">
<input type="hidden" name="message" value="<?=addslashes($message_internaute)?>">
<input id="submit" type="submit" value="Ok" />
<input id="submit" type="button" value="Retour" onclick="history.back()"/>
</form>
</div>

Puis dans envoi_contact:

<div id="envoi_contact">
<p>Merci pour votre message, je vous répondrais dans les plus bref délais.</p>
<?
$nom = stripslashes($_POST['nom']);
$prenom = stripslashes($_POST['prenom']);
$mail = stripslashes($_POST['mail']);
$tel = stripslashes($_POST['tel']);
$sujet = stripslashes($_POST['sujet']);
$message = stripslashes($_POST['message']);
$destinataire = "ton_mail_AT_fai.com";
$expediteur = $mail;
$reponse = $expediteur;
$titre ='Formulaire de contact - '.$sujet;
$message ='
Nouveau message de ' . $prenom . ' ' . $nom . '
Tél.: ' . $tel . '
Message: ' . $message;
mail($destinataire,$titre,$message,"From: ".$expediteur."\r\nReply-To: ".$reponse);

?>
</div>

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok je vais essayer comme ça.

Au passage, <?=$variable; ?> vaut-il un <? echo ' . $variable . '; ?> ?

Car je me suis rendu compte que nous ne codons pas de la même façon et vu que je suis en plein apprentissage... :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Les "<?=" est une version courte de "echo" donc les deux sont identiques.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok ok et bien, ta façon de coder est un poil plus complexe je trouve car au niveau après au niveau des ' et " c'est pas très clair.

Exemple :

<?=stripslashes($nom) . ' ' . stripslashes($prenom) . ''; ?>

Je ne comprend pas pourquoi tu n'as pas mis de = sur le deuxième stripslashes() et pourquoi des ' . trainent ici et là... et pourtant ça fonctionne. Pourrais-tu m'éclairer là dessus histoire que je ne copie pas bêtement toutes ces lignes, je doute que ce soit une bonne façon d'apprendre ^^.

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour reprendre cet exemple, <?= est identique à echo

Donc si on remplace, ça donnerait:

<? echo stripslashes($nom) . ' ' . stripslashes($prenom); ?>

Les '' de fin ne servaient à rien.

Les . servent à concaténer les chaînes de caractères.

Donc les ' ' , servent juste à faire un espace entre le nom et prénom.

Pour les bases du php, tu peux jeter un coup d'œil sur ce site:
/>http://www.lephpfacile.com/cours/

Modifié par K-Ola

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok merci pour ces explications. En fait, j'apprends sur le site du zéro pour ma part et ils proposent d'apprendre à coder d'une façon différente de toi, pour ça :).

Bref, pour le formulaire, tout est ok, hormis des slashes encore mais uniquement au niveau de ma boîte mail mais très sincèrement, cela ne me dérange pas, du moment que c'est pas l'internaute qui s'en mange.

Désormais, il me reste à faire la page devis. J'ai commencé à tout refaire et quand j'envoie le tout, les variables se mélangent lorsque je reçois les informations. En gros, à la place du sujet, j'ai le nom de l'internaute par exemple et il manque beaucoup de champs non envoyés mais je pense que c'est dû à la page "traitement_devis" au niveau des lignes "input" qui doivent être erronées.

Voici les codes :

Page devis :


<form method="post" action="traitement_devis.php">
<h1>Devis</h1>
<fieldset>
<legend>Coordonnées</legend>

<p id="civilite">
<label for="civilite">Civilité :</label>
<input type="radio" name="civilite" value="Mlle" id="civilite" /> <label for="civilite">Mlle</label>
<input type="radio" name="civilite" value="Mme" id="civilite" /> <label for="civilite">Mme</label>
<input type="radio" name="civilite" value="Mr" id="civilite" /> <label for="civilite">Mr</label>
<img src="images/puce_2.png"/>
</p>

<p>
<label for="nom">Nom</label> : <br />
<input type="text" name="nom" id="nom" />
<img src="images/puce_2.png"/>
</p>

<p>
<label for="nom">Prénom</label> : <br />
<input type="text" name="prenom" id="prenom" />
<img src="images/puce_2.png"/>
</p>

<p>
<label for="statut">Vous êtes ?</label><br />
<select name="statut" id="statut">
<option value="une entreprise">Une entreprise</option>
<option value="un organisme public">Un organisme public</option>
<option value="une association">Une association</option>
<option value="un créateur d'entreprise">Un créateur d'entreprise</option>
<option value="autre">Autre</option>
</select>
<img src="images/puce_2.png"/>
</p>

<p>
<label for="societe">Société :</label><br />
<input type="text" name="societe" id="societe" />
</p>

<p>
<label for="mail">Adresse e-mail :</label><br />
<input type="text" name="mail" id="mail" />
<img src="images/puce_2.png"/>
</p>

<p>
<label for="tel">Numéro de téléphone :</label><br />
<input type="text" name="tel" id="tel" />
<img src="images/puce_2.png"/>
</p>

<p id="contact_devis">
<label for="contact">Vous souhaitez être contacté par :</label>
<input type="radio" value="téléphone uniquement" name="contact" id="contact" /> <label for="Contact">Téléphone</label>
<input type="radio" value="mail uniquement" name="contact" id="contact" /> <label for="Contact">Email</label>
<input type="radio" value="téléphone ou par mail" name="contact" id="contact" /> <label for="Contact">Les deux</label>
</p>
</fieldset>

<fieldset>
<legend>Création site internet</legend>

<p>
<label for="activite">Votre activité :</label><br />
<input type="text" name="activite" id="activite" />
</p>

<p>
<label for="demande">Votre demande :</label><br />
<select name="demande" id="demande">
<option value="Pak Starter">Pack Starter</option>
<option value="Pack Basic">Pack Basic</option>
<option value="Pack Pro">Pack Pro</option>
<option value="Pack Premium">Pack Premium</option>
<option value="Pack Sur mesure">Pack Sur mesure</option>
<option value="Pack Ecommerce">Pack Ecommerce</option>
<option value="Autre">Autre</option>
</select>
<img src="images/puce_2.png"/>
</p>

<p>
<label for="logo">Pack Logo :</label><br/>
<select name="logo" id="logo">
<option value="avec">Avec</option>
<option value="sans">Sans</option>
</select>
<img src="images/puce_2.png"/>
</p>

<p>
<label for="referencement">Pack référencement :</label><br/>
<select name="referencement" id="referencement">
<option value="avec">Avec</option>
<option value="sans">Sans</option>
</select>
<img src="images/puce_2.png"/>
</p>

<p>
<label for="forum">Pack forum :</label><br/>
<select name="forum" id="forum">
<option value="avec">Avec</option>
<option value="sans">Sans</option>
</select>
<img src="images/puce_2.png"/>
</p>

<br/><p>
<label for="message">Message complémentaire :</label><br />
<textarea name="message" id="message"></textarea>
<img src="images/infos_2.png" title="Soyez le plus clair et le plus précis possible dans la rédaction de votre message">
</p>
</fieldset>
<p id="requis"><img src="images/puce_2.png"/> Requis</p>

<p id="submit">
<input type="submit" value="Ok" /> <input type="reset" />
</p>
</form>

Page traitement_devis :


<div id="traitement_devis">
<?
$civilite = strip_tags($_POST['civilite']);
$nom = strip_tags($_POST['nom']);
$prenom = strip_tags($_POST['prenom']);
$statut = strip_tags($_POST['statut']);
$societe = strip_tags($_POST['societe']);
$mail = strip_tags($_POST['mail']);
$tel = strip_tags($_POST['tel']);
$contact = strip_tags($_POST['contact']);
$activite = strip_tags($_POST['activite']);
$demande = strip_tags($_POST['demande']);
$logo = strip_tags($_POST['logo']);
$referencement = strip_tags($_POST['referencement']);
$forum = strip_tags($_POST['forum']);
$message_internaute = strip_tags($_POST['message']);
?>
<h1>Confirmation des informations</h1>
<p><strong>Confirmez-vous l'exactitude des informations suivantes ?</strong></p>
<fieldset>
<legend>Coordonnées</legend>
<p>
<?=stripslashes($civilite) . ' ' . stripslashes($nom) . ' ' . stripslashes($prenom); ?><br/>
<?=stripslashes('Vous êtes ' . $statut . ''); ?><br/>
<?=stripslashes($societe); ?><br/>
<?=stripslashes($mail); ?><br/>
<?=stripslashes($tel); ?><br/>
<?=stripslashes('Vous désirez être contacté par ' . $contact . ''); ?>
</p>
</fieldset>

<fieldset>
<legend>Création site internet</legend>
<p>
<?=stripslashes($activite);?><br/>
<?=stripslashes('Votre demande concerne : ' . $demande . '');?><br/>
<?=stripslashes('Pack logo : ' . $logo . '');?><br/>
<?=stripslashes('Pack référencement : ' . $referencement . '');?><br/>
<?=stripslashes('Pack forum : ' . $forum . '');?><br/>
Votre message : <br/>
<?=stripslashes($message_internaute);?>
</p>
</fieldset>
<form method="post" action="envoi_devis.php">
<input type="hidden" name="nom" value="<?=$civilite?>">
<input type="hidden" name="nom" value="<?=$nom?>">
<input type="hidden" name="prenom" value="<?=$prenom?>">
<input type="hidden" name="sujet" value="<?=$statut?>">
<input type="hidden" name="mail" value="<?=$societe?>">
<input type="hidden" name="tel" value="<?=$mail?>">
<input type="hidden" name="message" value="<?=$tel?>">
<input type="hidden" name="nom" value="<?=$contact?>">
<input type="hidden" name="prenom" value="<?=$activite?>">
<input type="hidden" name="sujet" value="<?=$demande?>">
<input type="hidden" name="mail" value="<?=$logo?>">
<input type="hidden" name="tel" value="<?=$referencement?>">
<input type="hidden" name="nom" value="<?=$forum?>">
<input type="hidden" name="message" value="<?=$message_internaute?>">
<input id="submit" type="submit" value="Ok" /> <input id="submit" type="button" value="Retour" onClick="history.back()"/>
</form>
</div>

Page envoi_devis :


<div id="envoi_devis">
<p>Merci pour votre message, je vous répondrais dans les plus bref délais.</p>
<?
$civilite = strip_tags($_POST['civilite']);
$nom = strip_tags($_POST['nom']);
$prenom = strip_tags($_POST['prenom']);
$statut = strip_tags($_POST['statut']);
$societe = strip_tags($_POST['societe']);
$mail = strip_tags($_POST['mail']);
$tel = strip_tags($_POST['tel']);
$contact = strip_tags($_POST['contact']);
$activite = strip_tags($_POST['activite']);
$demande = strip_tags($_POST['demande']);
$logo = strip_tags($_POST['logo']);
$referencement = strip_tags($_POST['referencement']);
$forum = strip_tags($_POST['forum']);
$message_internaute = strip_tags($_POST['message']);
$destinataire = "contact_AT_webart-creation.fr";
$expediteur = $mail;
$reponse = $expediteur;
$titre = 'Formulaire de devis - ' . $demande . '';
$message = '
Nouveau message de ' . $civite . ' ' . $prenom . ' ' . $nom . '
Statut : ' . $statut . '
Société : ' . $societe . '
Tél. : ' . $tel . '
Méthode de contact : ' . $contact . '
Activité : ' . $activite . '
Pack Logo : ' . $logo . '
Pack Référencement : ' . $referencement . '
Pack Forum : ' . $forum . '
Message complémentaire : ' . $message_internaute . '';
mail($destinataire,$titre,$message,"From: ".$expediteur."\r\nReply-To: ".$reponse);
?>
</div>

Ici un exemple pour que tu comprennes mieux le problème.

Modifié par Valtiel

Partager ce message


Lien à poster
Partager sur d’autres sites

Relis ta page page traitement_devis , au niveau des champs hidden, il y a un problème.

Partager ce message


Lien à poster
Partager sur d’autres sites

Comment passer pour un aveugle/idiot en une leçon ?! ... Je viens de voir que les champs "name" ne correspondaient pas du tout aux champs "value", trop de PC grille la vue et le cerveau... Navré pour cette bête étourderie, je refais ça et voit si un problème persiste.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, il va s'en dire que tout de suite, cela fonctionne beaucoup mieux... désolé de t'avoir fait perdre du temps à lire toutes ces lignes pour rien, à cause d'une grosse étourderie de ma part :s.

Donc les deux formulaires fonctionnent, juste des / qui se baladent mais pas grave, ça ne me dérange pas puis avec le temps, je trouverais certainement de moi-même.

Cependant, il me reste à coder les "champs requis" et pour se faire, est-ce que je peux faire ça directement dans les pages "traitement" ou dois-je en créer une autre ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Il faut que tu le fasse à deux endroits: dans ta page traitement ainsi que dans ta page devis.

Pour cela, tu peux utiliser la fonction empty() .

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah ? Je vais me pencher sur les liens que tu m'as proposé au début du sujet et voir si j'arrive à m'en sortir seul.

Je te tien au courant.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah tien j'ai trouvé ceci au passage, ça peut être intéressant au vu des champs qui se colorent :
/>http://www.paperblog.fr/1682199/php-formulaire-de-contact-avec-champs-obligatoires/

J'ai effectué un essai avec (empty($var)) et sur la page traitement le message s'affiche correctement mais l'internaute peut malgré tout envoyer le formulaire pour le moment.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,

J'ai tenté avec quelque chose de très simple genre :

if (empty($nom)) {

echo 'Veuillez indiquer votre nom. <br/>';

}

elseif (empty($prenom)) {

echo 'Veuillez indiquer votre prénom.<br/>';

exit();

}

Mais malheureusement, le "exit ()" stop évidemment la lecture du code qui suit, si bien que la partie du bas du corps de mon site, le footer, etc... ne s'affichent pas. Existe t-il un moyen différent pour vérifier les champs requis ?

J'ai pensé à une condition disant que si un champ n'est pas rempli, alors cette DIV ne s'affiche pas, peut-être que ceci pourrait résoudre l'inconvénient du "exit()".

Partager ce message


Lien à poster
Partager sur d’autres sites

Il y a plus simple:

Si le champs est vide Alors
erreur=1
Fin si

Si erreur != 1 Alors
Affichage de la div
Fin si

Je te laisses traduire ça en PHP ;)

Modifié par K-Ola

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors pour la traduction français > PHP je dirais :

if (empty($var)) {

$var2=1;

end if;

}

if $var2!=1 {

hidden(#DIV)==FALSE;

end if;

}

Bon évidemment, il s'agit là des cours que j'ai lu il y a quelques semaines que j'applique de mémoire (je me remet au PHP dès que mon site sera terminé).

Alors m'sieur, j'ai faux où ? ^^ (partout...)

Partager ce message


Lien à poster
Partager sur d’autres sites

Plutôt quelque chose du genre:

if (empty($var)) {
$erreur=1;
}

if($erreur!=1) {
echo "Il n'y a pas d'erreur";
}else{
echo "Veuillez remplir les champs obligatoires.";
}

Partager ce message


Lien à poster
Partager sur d’autres sites

Hummmm ce code est certes correct mais malgré tout, le reste s'affiche en bas de page, si bien que l'internaute peut continuer sans prendre en compte l'avertissement :).

Là si je comprend bien, cela met la variable erreur en 1 si une variable requise est vide, et si tel est le cas, un message d'erreur s'affiche, sinon un message s'affiche aussi disant qu'il n'y a pas d'erreur. Mais il me faut faire en sorte que SEUL le message d'erreur s'affiche s'il y en a une sans pour autant stopper complètement le reste du code (exit()) car cela coupe le bas de mon site. Je vais fouiller un peu concernant le type hidden car je pense que c'est la solution à mon problème.

Partager ce message


Lien à poster
Partager sur d’autres sites

Il suffit de le vérifier également avant d'afficher ton bouton d'envoi, si l'erreur ne vaut pas un, alors tu l'affiches.

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui c'est ce que j'aimerais faire mais je ne sais pas si c'est possible en PHP car sur le net, je ne trouve des solutions qu'en Javascript et le JS, je n'y ai jamais touché ^^.

Donc existe t-il au moins une possibilité d'afficher/cacher une DIV en PHP avec un booléen par exemple ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×