Bonjour chère communauté,

merci tout d'abord pour ce site : je suis débutante et mes recherches ici ont toujours été fructueuses, que ce soit tutoriels ou forum... Toujours jusque maintenant : je travaille depuis 3 jours sur un formulaire php qui me fait devenir chêvre, je trouve pas mal de post, mais jamais vraiment ce que je cherche Smiley sweatdrop . J'espère que quelqu'un pourra m'aider à detecter les fautes qui empèchent mon formulaire de fonctionner comme il faut.

En soit un formulaire très simple, il y a quelques champs à remplir, un seul vraiment obligatoire (l'adresse email). Mon PHP est censé récupérer les données, m'envoyer le mail et afficher que le mail est bien envoyé s'il l'est.

Le problème: aprés avoir cliqué sur Envoyer, s'affiche uniquement une page vide et blanche, et je ne reçoit pas le mail. Pour les avisés, surement tellement simple, mais pour moi... une horreur!

voici le code sur la page html:

<form id="formulaire" method="post" action="formulaire.php">
  <label for="name">Name</label> <input type="text" id="Name" name="Name" /><br />
  <label for="firma">Firma</label><input type="text" name="firma" id="firma" /><br />
  
          </p>
          <span id="sprytextfield1">
          <label for="email">Email</label>
          <input type="text" name="email" id="email" />
          <span class="textfieldRequiredMsg">Une valeur est requise.</span><span class="textfieldInvalidFormatMsg">Format non valide.zz</span></span>
          <p><br />
          </p>
          <label for="land">Land</label>
          <input type="text" name="land" id="land" />
          <br />
          <label for="betreff">Betreff</label>
          <input type="text" name="betreff" id="betreff" />
          <br />
         <br />
          <fieldset>
            <legend> Nachricht</legend>
            <textarea name="message" id="message" cols="45" rows="5"></textarea>
          </fieldset>
<br />
          <input type="submit" class="submit" id="submit" value="Envoyer" />
          <p><br />
          </p>
        </form>


et maitenant le code PHP:




if(isset($_POST) && isset($_POST['name']) && isset($_POST['firma']) && isset($_POST['email']) && isset($_POST['land']) && isset ($_POST['betreff']) && isset ($_POST['message'])){
	extract ($_POST) ;	
	if(!empty($name) && !empty($email) && !empty($message)){
		$message=str_replace("\'", "'", $message) ; 
		$destinataire="mon_adresse_email" ;
		$sujet="Kontakt Formulare" ;
		$msg="Neue Anfrage \n
		Name : $name \n
		Email : $email \n
		Message : $message";
		$entete= "From: $name \n Reply-To: $email";
		mail($destinataire,$betreff,$msg,$entete) ;
		echo"Vielen Dank für Ihre Nachricht.";
	}
}	


Un grand merci à celles et ceux qui voudront bien prendre la peine de m'aider!
Modifié par Barbalala (02 Sep 2010 - 13:28)
Salut,

Le champ "Name" prend un "N" majuscule. Donc il faut utiliser $_POST['Name'] et, après l'extraction $Name
Hello Barbalala et bienvenue Smiley smile ,

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace après le crochet ouvrant).

upload/1-code.gif

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne
Ups, désolée! tellement pressée d'en finir avec ce formulaire que j'ai zapé cette info, je m'y colle de suite...
Merci pour la mise en page (je me suis permis de supprimer <?php et ?> qui font bugger la coloration du code PHP Smiley cligne )
Modifié par Heyoan (04 Aug 2010 - 19:17)
Merci Marcv, je viens de changer le script dans ce sens, mais cela ne marche malheureusement pas... Quelqu'un a une autre idée?

La nuit porte conseille, j'aurais peut-être une solution sous mon oreiller demain matin! Smiley cligne
Bonne nuit!
La solution de marcv devrait pourtant fonctionner.

Une autre solution serait de remplacer
<input type="text" id="Name" name="Name" />
par
<input type="text" id="name" name="name" />


Il faut bien sûr penser à remplacer la valeur de $destinataire par une adresse email valide. Smiley langue
En repassant par là il y a plusieurs choses qu'on pourrait améliorer :

* le code html est invalide : (fermeture de paragraphe non ouvert, SPAN non fermé...).

* le code php est réduit au minimum... et même un peu trop : lorsque l'on remplit un formulaire et qu'on oublie un champ c'est quand même sympa de ne pas avoir à ressaisir tous les autres. Smiley cligne (D'ailleurs c'est bien aussi de vérifier la validité d'un email saisi).

* les champs saisis ne sont pas tous repris dans le mail.

* quand tout est ok c'est une bonne idée de faire une redirection vers une page de confirmation car cela évite lors d'un F5 malheureux de renvoyer le mail.

Un exemple de ce que ça pourrait donner :
<?php
// Initialisation ou récupération des variables
$name = !empty($_POST['name']) ? trim(htmlspecialchars($_POST['name'])) : '';
$firma = !empty($_POST['firma']) ? trim(htmlspecialchars($_POST['firma'])) : '';
$email = !empty($_POST['email']) ? trim(htmlspecialchars($_POST['email'])) : '';
$land = !empty($_POST['land']) ? trim(htmlspecialchars($_POST['land'])) : '';
$betreff = !empty($_POST['betreff']) ? trim(htmlspecialchars($_POST['betreff'])) : '';
$message = !empty($_POST['message']) ? (htmlspecialchars($_POST['message'])) : '';
$erreurs = array();

function isValidEmail($email){	// filter_var fonctionne à partir de php5 (sinon il faut une regexp)
 return filter_var($email, FILTER_VALIDATE_EMAIL);
}

if($_SERVER['REQUEST_METHOD']=='POST') {	// le formulaire a été soumis
	// name obligatoire
	if(empty($name)) {
		$erreurs[] = 'name est obligatoire.';
	}
	// firma obligatoire
	if(empty($firma)) {
		$erreurs[] = 'firma est obligatoire.';
	}
	// email obligatoire
	if(empty($email)) {
		$erreurs[] = 'email est obligatoire.';
	} else {
		// email invalide
		if(!isValidEmail($email)) {
			$erreurs[] = 'email est invalide.';
		}
	}
	// land obligatoire
	if(empty($land)) {
		$erreurs[] = 'land est obligatoire.';
	}
	// betreff obligatoire
	if(empty($betreff)) {
		$erreurs[] = 'betreff est obligatoire.';
	}
	// message obligatoire
	if(empty($message)) {
		$erreurs[] = 'message est obligatoire.';
	}
	// Aucune erreur...
	if(empty($erreurs)) {
		// Envoi du mail
		$destinataire = 'mon_adresse_email@example.com';
		$sujet = 'Kontakt Formulare - '.$betreff;
		$msg = '
		<html>
			<head>
				<title>Neue Anfrage</title>
			</head>
			<body>
				<h1>Neue Anfrage</h1>
				<p>Name : '.$name.'</p>
				<p>Firma : '.$firma.'</p>
				<p>Land : '.$land.'</p>
				<p>Email : '.$email.'</p>
				<p>Message : '.$message.'</p>
			</body>
		</html>
		';
		$entete  = 'MIME-Version: 1.0' . "\r\n";
		$entete .= 'Content-type: text/html; charset=utf8' . "\r\n";
		$entete .= "From: $name <$email>\r\n";
		$entete .= "Reply-To: $email"; 
		if(mail($destinataire, $sujet, $msg, $entete)) {
			header('Location: confirmation.php'); // Redirection vers la page de confirmation
		} else {
			$erreurs[] = "Erreur survenue lors de l'envoi du mail.";
		}
	}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test formulaire</title>
<style type="text/css" media="screen">
.alerte {
	color: #FF0033;
	font-weight: bold;
}
</style>
</head>
<body>
<?php
if(!empty($erreurs)) {
	foreach($erreurs as $erreur) {
		echo '<p class="alerte">'.$erreur."</p>\n";
	}
}
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
	<p>
		<label for="name">Name</label> 
		<input type="text" id="name" name="name" value="<?php echo $name; ?>" />
	</p>
	<p>
		<label for="firma">Firma</label>
		<input type="text" name="firma" id="firma" value="<?php echo $firma; ?>" />
	</p>
	<p>
		<label for="email">Email</label>
		<input type="text" name="email" id="email" value="<?php echo $email; ?>" />
	</p>
	<p>
		<label for="land">Land</label>
		<input type="text" name="land" id="land" value="<?php echo $land; ?>" />
	</p>
	<p>
		<label for="betreff">Betreff</label>
		<input type="text" name="betreff" id="betreff" value="<?php echo $betreff; ?>" />
	</p>
	<fieldset>
		<legend><label for="message">Nachricht</label></legend>
		<textarea name="message" id="message" cols="45" rows="5"><?php echo $message; ?></textarea>
	</fieldset>
	<p>
		<input type="submit" class="submit" id="submit" value="Envoyer" />
	</p>    
</form>
</body>
</html>

Modifié par Heyoan (05 Aug 2010 - 11:07)
Mille x merci, quelle efficacité et réactivité! le temps de mettre cela en place et je confirmerai. Bonne après-midi à vous Smiley biggrin
Bonjour la commuanauté,

Après de nombreuse recherche infructueuse pour pouvoir faire des formulaires complets je tombe sur la 1ere ame charitable qui a aidé quelqu'un a faire fonctionné le sien (merci heyoan)
Ce qui m'amene à vous écrire car j'aimerais reprendre ce code (si c'est possible..) et y ajouter des listes déroulantes, des cases à cosé et des boutons d'option... Le top pour moi serait d'avoir le code avec ces 3 dernieres au moins une fois. Car j'arive a creer cela en html facilement mais pour les récuperer par mail c'est une toute autre histoire et pense (lol en tout cas espere!) pouvoir ensuite modifier a ma guise un code existant.
merci à l'avance toute aide sera la bienvenue
Yohann


Heyoan a écrit :
En repassant par là il y a plusieurs choses qu'on pourrait améliorer :

* le code html est invalide : (fermeture de paragraphe non ouvert, SPAN non fermé...).

* le code php est réduit au minimum... et même un peu trop : lorsque l'on remplit un formulaire et qu'on oublie un champ c'est quand même sympa de ne pas avoir à ressaisir tous les autres. Smiley cligne (D'ailleurs c'est bien aussi de vérifier la validité d'un email saisi).

* les champs saisis ne sont pas tous repris dans le mail.

* quand tout est ok c'est une bonne idée de faire une redirection vers une page de confirmation car cela évite lors d'un F5 malheureux de renvoyer le mail.

Un exemple de ce que ça pourrait donner :
<?php
// Initialisation ou récupération des variables
$name = !empty($_POST['name']) ? trim(htmlspecialchars($_POST['name'])) : '';
$firma = !empty($_POST['firma']) ? trim(htmlspecialchars($_POST['firma'])) : '';
$email = !empty($_POST['email']) ? trim(htmlspecialchars($_POST['email'])) : '';
$land = !empty($_POST['land']) ? trim(htmlspecialchars($_POST['land'])) : '';
$betreff = !empty($_POST['betreff']) ? trim(htmlspecialchars($_POST['betreff'])) : '';
$message = !empty($_POST['message']) ? (htmlspecialchars($_POST['message'])) : '';
$erreurs = array();

function isValidEmail($email){	// filter_var fonctionne à partir de php5 (sinon il faut une regexp)
 return filter_var($email, FILTER_VALIDATE_EMAIL);
}

if($_SERVER['REQUEST_METHOD']=='POST') {	// le formulaire a été soumis
	// name obligatoire
	if(empty($name)) {
		$erreurs[] = 'name est obligatoire.';
	}
	// firma obligatoire
	if(empty($firma)) {
		$erreurs[] = 'firma est obligatoire.';
	}
	// email obligatoire
	if(empty($email)) {
		$erreurs[] = 'email est obligatoire.';
	} else {
		// email invalide
		if(!isValidEmail($email)) {
			$erreurs[] = 'email est invalide.';
		}
	}
	// land obligatoire
	if(empty($land)) {
		$erreurs[] = 'land est obligatoire.';
	}
	// betreff obligatoire
	if(empty($betreff)) {
		$erreurs[] = 'betreff est obligatoire.';
	}
	// message obligatoire
	if(empty($message)) {
		$erreurs[] = 'message est obligatoire.';
	}
	// Aucune erreur...
	if(empty($erreurs)) {
		// Envoi du mail
		$destinataire = 'mon_adresse_email@example.com';
		$sujet = 'Kontakt Formulare - '.$betreff;
		$msg = '
		<html>
			<head>
				<title>Neue Anfrage</title>
			</head>
			<body>
				<h1>Neue Anfrage</h1>
				<p>Name : '.$name.'</p>
				<p>Firma : '.$firma.'</p>
				<p>Land : '.$land.'</p>
				<p>Email : '.$email.'</p>
				<p>Message : '.$message.'</p>
			</body>
		</html>
		';
		$entete  = 'MIME-Version: 1.0' . "\r\n";
		$entete .= 'Content-type: text/html; charset=utf8' . "\r\n";
		$entete .= "From: $name <$email>\r\n";
		$entete .= "Reply-To: $email"; 
		if(mail($destinataire, $sujet, $msg, $entete)) {
			header('Location: confirmation.php'); // Redirection vers la page de confirmation
		} else {
			$erreurs[] = "Erreur survenue lors de l'envoi du mail.";
		}
	}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test formulaire</title>
<style type="text/css" media="screen">
.alerte {
	color: #FF0033;
	font-weight: bold;
}
</style>
</head>
<body>
<?php
if(!empty($erreurs)) {
	foreach($erreurs as $erreur) {
		echo '<p class="alerte">'.$erreur."</p>\n";
	}
}
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
	<p>
		<label for="name">Name</label> 
		<input type="text" id="name" name="name" value="<?php echo $name; ?>" />
	</p>
	<p>
		<label for="firma">Firma</label>
		<input type="text" name="firma" id="firma" value="<?php echo $firma; ?>" />
	</p>
	<p>
		<label for="email">Email</label>
		<input type="text" name="email" id="email" value="<?php echo $email; ?>" />
	</p>
	<p>
		<label for="land">Land</label>
		<input type="text" name="land" id="land" value="<?php echo $land; ?>" />
	</p>
	<p>
		<label for="betreff">Betreff</label>
		<input type="text" name="betreff" id="betreff" value="<?php echo $betreff; ?>" />
	</p>
	<fieldset>
		<legend><label for="message">Nachricht</label></legend>
		<textarea name="message" id="message" cols="45" rows="5"><?php echo $message; ?></textarea>
	</fieldset>
	<p>
		<input type="submit" class="submit" id="submit" value="Envoyer" />
	</p>    
</form>
</body>
</html>