Formulaire de contact php

Petit nouveau ! | 5 Messages

12 avr. 2012, 13:19

Bonjour à tous,

Je suis un peu novice en php, et j'essaye en vain de créer un formulaire de contact tout simple pour un site...

Tout fonctionne presque, a part la vérification des champs vides : seul la vérification de mon champ 'message' est prise en compte, mais pas le champ 'name' !!! o_O

Voici le code php :
<?php

if(!$_POST) exit;

$email = $_POST['email'];


//$error[] = preg_match('/\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $_POST['email']) ? '' : 'INVALID EMAIL ADDRESS';
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email )){
	$error.="Adresse e-mail invalide !";
	$errors=1;
}
if($errors==1) echo $error;
else{
	$values = array ('name','email','message','phone');
	$required = array('name','email','message');
	 
	$your_email = "[email protected]";
	$email_subject = "Nouveau Message de : ".$_POST['name'];
	$email_headers="From: $email";
	$email_content = "Nouveau message :\n";
	
	foreach($values as $key => $value){
	  if(in_array($value,$required)){
		if ($key != 'name' && $key != 'message') {
		  if( empty($_POST[$value]) ) { echo 'Merci de remplir tout les champs requis !'; exit; }
		}
		$email_content .= $value.': '.$_POST[$value]."\n";
	  }
	}
	 
	if(@mail($your_email,$email_subject,$email_content,$email_headers)) {
		echo 'Votre message a bien &eacute;t&eacute; Envoy&eacute; !'; 
	} else {
		echo 'ERROR!';
	}
}
?>
j'ai du faire une erreur de syntaxe ou autre (certainement sur la ligne " if ($key != 'name' && $key != 'message') { "), mais je ne parvient pas à trouver la solution ???

Si quelqu'un avait une solution, ça m'aiderai beaucoup.... ^_^

Merci d'avance.

Eléphanteau du PHP | 25 Messages

12 avr. 2012, 13:29

Bonjour,
Efface tout et recommence ! :lol: Ton code est mauvais.

Dans un premier temps, donne moi la source de ton formulaire.

Ensuite je pourrais t'expliquer deux trois trucs pour ton traitement en php.

Petit nouveau ! | 5 Messages

12 avr. 2012, 13:50

Heu... disons que là je manque de temps pour tout reprendre à zéro (surtout vu mon niveau...)

N'y aurait-il pas moyen de corriger ce que j'ai déja fait, et voir ensuite pour mon prochain formulaire à faire '"bien comme il faut" ? (ca m'arrangerai...) :D

Je ne sais plus trop ou j'avais trouvé ce formulaire, ça fait un moment... mais je l'avait déjà utilisé avec succès, et je n'arrive pas à comprendre ce qui diffère, vu que je n'ai touché à rien que je ne "maitrise" pas...

Voila mon formulaire sur ma page de contact :

Code : Tout sélectionner

<h3>Formulaire :</h3> <form method="post" action="contact.php" id="contactform" class="standardForm"> <fieldset> <div class="field"> <label for="name">Nom</label> <input type="text" name="name" id="name" class="textbox shadow" /> </div> <div class="field"> <label for="email">E-mail</label> <input type="text" name="email" id="email" class="textbox shadow" /> </div> <div class="field"> <label for="phone">Téléphone</label> <input type="text" name="phone" id="phone" class="textbox shadow" /> </div> <div class="field"> <label for="message">Message</label> <textarea name="message" id="message" class="textarea shadow">Veuillez saisir votre message...</textarea> </div> <div class="field"> <input type="submit" name="imageField" id="imageField" value="Envoyer" class="button shadow hovershadow" /> </div> </fieldset> </form> </div>

et un peu de jquery dans mon <head> (qui ne marche pas encore complètement d'ailleurs, mais si je n'y arrive pas, ca ferra l'objet d'une autre demande d'aide dans le topic approprié...) :
[javascript]<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
// <![CDATA[
jQuery(document).ready(function(){
$('#contactform').submit(function(){
var action = $(this).attr('action');
$.post(action, {
name: $('#name').val(),
email: $('#email').val(),
message: $('#message').val(),
phone: $('#phone').val()
},
function(data){
$('#contactform #submit').attr('disabled','');
$('.message warning').remove();
$('#contactform').before('<p class="message warning">'+data+'</p>');
$('.message success').slideDown();
if(data=='Votre message a bien &eacute;t&eacute; Envoy&eacute; !') $('#contactform').slideUp();
}
);
return false;
});
});
// ]]>
</script> [/javascript]

Merci d'avance !!!! :wink:

Eléphanteau du PHP | 25 Messages

12 avr. 2012, 16:28

Je suis allé au plus simple pour que tu comprennes :

<?php

// L'utilisateur a t'il rempli tous les champs du formulaire ? Si une variable n'existe pas, c'est qu'un champ du formulaire n'a pas été rempli.
// Cf le manuel de la fonction isset() pour plus d'info

if(!isset($_POST['name']) && !isset($_POST['email']) && !isset($_POST['message'])) {
          echo "Veuillez remplir tous les champs obligatoire du formulaire";
          // On redirige à la page du formulaire 
} else {
                 // Toutes les variables existent, on peut donc vérifier si le format email est correct. 
                 // Evite d'utiliser les expressions régulières pour valider ton mail. Depuis la version 5.2.0 de php, l'extension "filter" a était intégrée en standart dans php.
                 
                 $email = filter_data($_POST['email'], FILTER_VALIDATE_EMAIL);
                 if(!$email) {
                          // Adresse email non valide, (filter_data() retourne FALSE si l'email est non valide)
                         echo "Adresse email non valide";
                         // On redirige à la page du formulaire
                 }
                 
                 // Adresse email valide, on traite les autres variables
                 $your_email =  "[email protected]";
                 $phone = "Aucun numero";
                 $sujet = "Nouveau message de : ".$_POST['name'];
                 $header = "From: $email" . "\r\n";
                 $message = htmlentities($_POST['message']);

                // Vu que le numero de tel est pas obligatoire, je test la présence de la variable ici voir si il existe
                if(isset($_POST['phone'])) {
                        $phone = $_POST['phone'];
                }
                
               // On construit le contenu du message
               $contenu = "Nouveau message sur votre site.\n";
               $contenu .= "Téléphone : $phone \n\n";
               $contenu .= "Message : $message\n";

         // On envoie le mail 
          If(@mail($your_email,$sujet,$contenu,$header)) {
                    Echo "Mail envoyer";
         } else {
                echo "Erreur envoie mail";
        }

}
?>

Petit nouveau ! | 5 Messages

12 avr. 2012, 18:06

Re,

Merci beaucoup pour ta réponse,
J'ai remplacé, et maintenant je tombe sur une erreur lorsque j'envoie le formulaire sans rien saisir :

Code : Tout sélectionner

Fatal error: Call to undefined function filter_data() in /homepages/XX/XXXXXXXXXX/htdocs/contact3.php on line 14
La line 14 étant chez moi :

Code : Tout sélectionner

$email = filter_data($_POST['email'], FILTER_VALIDATE_EMAIL);
(Je suis en php 5.2.17 chez 1&1...)

Une idée ? :lol:

ViPHP
ViPHP | 2577 Messages

12 avr. 2012, 18:30


Petit nouveau ! | 5 Messages

12 avr. 2012, 18:37

Bonjour Mazarini,

je viens de tester avec filter_var à la place de filter_data et je n'ai plus la fatal error, mais du coup j'ai en echo :

Code : Tout sélectionner

Adresse email non valideMail envoyer
et le mail est envoyé vide....

Pffff, je suis définitivement pas pote avec le php...... :x

Eléphanteau du PHP | 25 Messages

12 avr. 2012, 21:12

Recopie pas mon code bêtement ;). Tu remarques mon commentaire dans ma boucle if "rediriger vers la page du formulaire", Si y'as pas de redirect le script continue ca route même si le mail est non valide...
C'est bien la fonction filter_var() et pas filter_data() desolé!

Petit nouveau ! | 5 Messages

12 avr. 2012, 21:40

Je sais que je suis souvent bête, mais dans le cas présent ce n'est pas ma bétise qui m'a fait recopier "bêtement" ton code : mais mon absence quasi totale de connaissances du php ! :lol: :lol: :lol:
J'arrive à peu près à comprendre le sens de chaque formules quand je les lit, mais du fait que je ne connais pas le "vocabulaire" et la "syntaxe" du php, je suis incapable de traduire par une formule ton "//// On redirige à la page du formulaire " :oops:
Je compte bien acheter "Le PHP pour les nuls" et m'y former, mais le délai que j'ai pour finir ce formulaire (à savoir : demain !) ne m'en laisse pas le temps et j'espérait obtenir ici (au moins pour cette fois...) une solution plus "clef en main" correspondant à mon niveau actuel.... :oops:

Et en plus je ne comprend pas l'utilité de "rediriger vers la page du formulaire, dans la mesure ou j'ai du jquery qui affiche mes warning messages dans une box au dessus du formulaire en faisant glisser celui ci vers le bas....

Bref, si quelqu'un veut bien continuer à m'aider, je suis preneur ! :D

(je m'absente, je reviens vers 23h)

Bonne soirée à toutes et à tous,

Cordialement.

ViPHP
ViPHP | 2577 Messages

13 avr. 2012, 11:50

une solution simple et rapide est de mettre tout ton code dans une fonction.
Dans cette fonction, chaque fois que tu rencontres un problème tu fais : return 'Ton nessage d'erreur'; et à la fin tu fais return '';

et en début de page tu écris :
<?PHP
$erreur = traitement(); // traitement est le nom de la fonction
if ($erreur <> '')
{
    echo $message;
}
?>