l'asile.fr


Formulaire PHP

Yop, j'ai un petit soucis de noob avec un form PHP. Je voudrai envoyer par mail les noms, prénoms, adresse etc ... des personnes qui s'inscrivent sur une page, jusque là rien de bien meychant, sauf que je me retrouve avec l'erreur :

Warning: mail() expects at most 5 parameters, 11 given in /homez.20/xxxxx/www/div/xxxxx_form.php on line 161
L'envoi du mail a échoué, veuillez réessayer SVP.

En fait, dès que je rajoute plus de 5 paramètres dans :
if (mail($cible, $objet, $message, $nom, $prenom, $adresse_1, $code_postal, $ville, $email, $tel, $headers))
ça me plante. 5 ou en dessous ça passe ! C'est quoi ce délire ?

Et deuxième question, comment personnaliser le mail envoyé (le client est en CC), là ça sort avec le nom, le prénom, l'adresse, etc ... les uns au dessus des autres, c'est moche ! Je voudrais ajouter quelques jpg et une mise en forme.

Le script en question est ici.

Thanks.


vendredi
07 novembre 2008 à 17:47
 
 

Je ne fais que passer et je n'ai pas le temps de rentrer dans le détail, mais regarde déja la fonction mail, tu va rapidement comprendre ton erreur :

url : http://fr.php.net/manual/fr/function.mail.php

Après sache que ce n'est pas aussi facile que tu le crois de créer ce genre de script, si tu ne veux pas que ton script servent de machine relai pour le spam.

Je retourne au travail, désolé. S'il n'y a personne pour t'aider je regarderais ce soir pour compléter si je ne suis pas sur les genoux d'ici la :)


vendredi
07 novembre 2008 à 17:59
 
 

Tu veux faire quoi exactement ?

Recuperer un mail comprenant les informations ?

Dans ce cas tu dois former une variable contenant tes infos :


$mavariable = " Nom : ". $nom . "/n";
$mavariable .= " Prenom : ". $prenom . "/n";
...


Et l'envoyé tel quel dans le corps de ton message:

mail($cible, $objet, $mavariable)


vendredi
07 novembre 2008 à 18:22
 
 

C'est ce que j'ai fait, le seul soucis c'est qu'à partir de 6 variables envoyées, ça plante ...
J'avoue ne pas saisir, en ASP, je n'ai jamais eu ce type de problème.


Dernière modification le 07/11/08 à 18:56 par groove_salad
vendredi
07 novembre 2008 à 18:56
 
 

Non mais tu utilises pas la fonction 'mail' comme il faut là !


vendredi
07 novembre 2008 à 19:00
 
 

Tu le fais sous cette forme :

$headers ='From: '.$mail."\n";
$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
$body="Coordonnées du contact Internet :\n\n";
$body.="Nom : ".$nom."\n";
$body.="Prenom : ".$prenom."\n";
$body.="Tél : ".$tel."\n";
$body.="E-Mail : ".$mail."\n\n";
$body.="Demande :\n";
$body.=$demande;
if(mail($mail, 'Contact en provenance du site Internet', $body, $headers))
{
echo "<br/><b>Votre message a bien été envoyé, nous allons vous contacter dans les meilleurs délais</b><br/>";
}
else
{
echo "Suite à un problème technique votre message n'a pas été envoyé";
}


vendredi
07 novembre 2008 à 19:02
 
 

C'est possible, je débute en php


vendredi
07 novembre 2008 à 19:02
 
 

Regarde la fonction mail car c'est du gros n'importe quoi comment tu l'utilise dans ton script


vendredi
07 novembre 2008 à 19:07
 
 

Ben moi je veux bien, mais je suis parti d'un exemple sur : url : http://www.php-astux.info
Donc théoriquement ça doit fonctionner quand même :)

Merci Gwendal for help, mais ça ne fonctionne pas non plus :/


vendredi
07 novembre 2008 à 19:08
 
 

gnagna, bon ça marche cite le message pour voir le code

&lt;!-- --&gt;
&lt;?php
	$destinataire = '&lt;[email]xxx@gmail.com[/email]&gt;, &lt;xxxxx&gt;';
	$copie = 'oui';
	$form_action = '';
	$message_envoye = "Votre message nous est bien parvenu !";
	$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
	$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

	function esc($str) {
		return htmlspecialchars($str, ENT_NOQUOTES);
	}

	function post_string($champ, $defaut = '') {
		if (!isset($_POST[$champ]))
			return $defaut;
		$text = trim($_POST[$champ]); 
		if ($text == '')
			return $defaut;
		if (get_magic_quotes_gpc())
			$text = stripslashes($text);
		return $text;
	}

	function is_email($email) {
		return eregi("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$", $email);
	}

	$err_formulaire = false; 

	if (count($_POST) &gt; 0) {
		$nom = post_string('nom');
		$prenom = post_string('prenom');
		$adresse_1 = post_string('adresse_1');
		$code_postal = post_string('code_postal');
		$ville = post_string('ville');
		$email = post_string('email');
		$tel = post_string('tel');
		$objet = post_string('objet');
		$message = post_string('message');

		if ($nom != '' && $prenom != '' && $adresse_1 != '' && $code_postal != '' && $ville != '' && is_email($email) && $tel != '' && $objet != '' && $message != '') {

			$headers = 'From: '.$nom.' &lt;'.$email.'&gt;' . "\r\n";

			$cible = $destinataire . ($copie == 'oui' ? ', '.$email : '');

			$corps = 'blabla . ' . "\r\n" . 
				'Nom : ' . $nom . "\r\n" . 
				'Prenom : ' . $prenom . "\r\n" . 
				'Adresse 1 : ' . $adresse_1 . "\r\n" . 
				'Code Postal : ' . $code_postal . "\r\n" . 
				'Ville : ' . $ville . "\r\n" . 
				'Email : ' . $email . "\r\n" . 
				'Tel : ' . $tel . "\r\n" . 
				'Message : ' . $message . "\r\n" . 
				'blabla 2';
			
			if (mail($cible, $objet, $corps, $headers))

				echo '&lt;p&gt;'.$message_envoye.'&lt;/p&gt;'."\n";
			else
				echo '&lt;p&gt;'.$message_non_envoye.'&lt;/p&gt;'."\n";
		} else {
			echo '&lt;p&gt;'.$message_formulaire_invalide.' &lt;a href="xxx.php"&gt;Retour au formulaire&lt;/a&gt;&lt;/p&gt;'."\n";
			$err_formulaire = true;
		}
	}

	if (($err_formulaire) || (!isset($_POST['envoi']))) {
?&gt;
&lt;form id="contact" method="post" action=""&gt;
	&lt;fieldset&gt;&lt;legend&gt;Vos coordonnées&lt;/legend&gt;
		&lt;p&gt;
			&lt;label for="nom"&gt;Nom :&lt;/label&gt;
			&lt;input type="text" id="nom" name="nom" value="&lt;?php if (isset($nom)) echo esc($nom); ?&gt;" tabindex="1" /&gt;
		&lt;/p&gt;
		&lt;p&gt;
		
		&lt;p&gt;
			&lt;label for="prenom"&gt;Prénom :&lt;/label&gt;
			&lt;input type="text" id="prenom" name="prenom" value="&lt;?php if (isset($prenom)) echo esc($prenom); ?&gt;" tabindex="2" /&gt;
		&lt;/p&gt;
		&lt;p&gt;
		&lt;p&gt;
			&lt;label for="adresse_1"&gt;Adresse :&lt;/label&gt;
			&lt;input type="text" id="adresse_1" name="adresse_1" value="&lt;?php if (isset($adresse_1)) echo esc($adresse_1); ?&gt;" tabindex="3" /&gt;
		&lt;/p&gt;
		&lt;p&gt;
		&lt;p&gt;
			&lt;label for="code_postal"&gt;Code Postal :&lt;/label&gt;
			&lt;input type="text" id="code_postal" name="code_postal" value="&lt;?php if (isset($code_postal)) echo esc($code_postal); ?&gt;" tabindex="4" /&gt;
		&lt;/p&gt;
		&lt;p&gt;						
		&lt;p&gt;
			&lt;label for="ville"&gt;Ville :&lt;/label&gt;
			&lt;input type="text" id="ville" name="ville" value="&lt;?php if (isset($ville)) echo esc($ville); ?&gt;" tabindex="5" /&gt;
		&lt;/p&gt;
		&lt;p&gt;		
			&lt;label for="email"&gt;Email :&lt;/label&gt;
			&lt;input type="text" id="email" name="email" value="&lt;?php if (isset($email)) echo esc($email); ?&gt;" tabindex="6" /&gt;
		&lt;/p&gt;
		
		&lt;p&gt;
			&lt;label for="tel"&gt;Tel :&lt;/label&gt;
			&lt;input type="text" id="tel" name="tel" value="&lt;?php if (isset($tel)) echo esc($tel); ?&gt;" tabindex="7" /&gt;
		&lt;/p&gt;
		&lt;p&gt;
		&lt;p&gt;		
		
	&lt;/fieldset&gt;
	&lt;fieldset&gt;&lt;legend&gt;Votre message :&lt;/legend&gt;
		&lt;p&gt;
			&lt;label for="objet"&gt;Objet :&lt;/label&gt;
			&lt;input type="text" id="objet" name="objet" value="&lt;?php if (isset($objet)) echo esc($objet); ?&gt;" tabindex="8" /&gt;
		&lt;/p&gt;
		&lt;p&gt;
			&lt;label for="message"&gt;Message :&lt;/label&gt;
			&lt;textarea id="message" name="message" tabindex="4" cols="30" rows="8"&gt;&lt;?php if (isset($message)) echo esc($message); ?&gt;&lt;/textarea&gt;
		&lt;/p&gt;
		&lt;/p&gt;		
	&lt;/fieldset&gt;

		&lt;/p&gt;
		&lt;p&gt;
	&lt;div style="text-align:center;"&gt;&lt;input type="submit" value="Envoyer le formulaire !" /&gt;&lt;/div&gt;
		&lt;/p&gt;
		&lt;/p&gt;				
&lt;/form&gt;
&lt;?php
	};
?&gt;
&lt;!-- -->


Dernière modification le 07/11/08 à 19:39 par Akshell
vendredi
07 novembre 2008 à 19:13
 
 

Alors j'ai une question bête, pourquoi le script fonctionne lorsque je met 5 champs ? Je reçois les informations saisies par mail et dès que je passe à 6, j'ai un message d'erreur.
Le truc est ici : url : http://www.php-astux.info/script-formulaire-contact.php

Ce que je veux dire, c'est si la fonction mail est miteuse, à ce moment là ça ne devrait pas marcher non plus avec 5 champs, non ?


vendredi
07 novembre 2008 à 19:15
 
 

non mais tu as pas compris le problème, tu dois concaténer tes champs avec du texte pour créer le corps du message et le mettre dans une variable unique.


Dernière modification le 07/11/08 à 19:17 par Akshell
vendredi
07 novembre 2008 à 19:17
 
 

Dans l'exemple que tu indique, la fonction mail n'est pas utilisée comme tu l'utilise

Si je fais une conversion de la syntaxe que tu utilise tu devrais avoir :

if (mail($cible, $objet, $message.'\n'.$nom.'\n'.$prenom.'\n'.$adresse_1.'\n'.$code_postal.'\n'.$ville.'\n'.$email.'\n', $headers))

Mais c'est une façon de travail qui ressemble plus au produit utilisé dans les merguez qu'a une vrai forme de programmation.

Toi tu sépare par des virgules, donc à chaques fois la fonction mail l'interprète comme un paramètre. Tu dois formater comme dans mon exemple ton body avant de l'envoyer, toujours comme dans mon exemple.


vendredi
07 novembre 2008 à 19:20
 
 

Il ne faut pomper du code sans comprendre comment il fonctionne, c'est très dangereux. En plus 98% des codes sont des exemples ne prenant pas en compte les problèmes de sécurité, etc...


vendredi
07 novembre 2008 à 19:23
 
 

Ben je pensais avoir compris quelques trucs, mais faut croire que non en fait. Merci en tout cas à toi et Akshell, ça marche bien :) Vous êtes des chefs \o/

Pour la sécurité, un captcha devrait suffire non ?


vendredi
07 novembre 2008 à 19:30
 
 

ha ha, Akshell, désolé je viens de t'envoyer un mail ... :)


vendredi
07 novembre 2008 à 19:35
 
 

C'est vraiment nickel ton script Akshell, merci encore :)


vendredi
07 novembre 2008 à 19:38
 
 

Ah cool, merci de me rappeler pourquoi j'ai arrêté cette merde, ça faisait longtemps. Toujours utile ce genre de sujet de temps en temps.


vendredi
07 novembre 2008 à 19:48
 
 

Non le captcha ne suffit pas.

Il faut filtrer chacune des entrées ( comme toujours ) pour s'assurer que la personne qui envoit le mail ne passe pas des paramètres pour reformater l'envoi de ta fonction mail.


vendredi
07 novembre 2008 à 19:52
 
 

bof, il y a déjà une fonction pour vérifier que l'email est valide, éventuellement la fonction de copie à l'expéditeur pourrait permettre l'injection d'adresses emails, mais comme le corps est au format texte y a rien à injecté.


vendredi
07 novembre 2008 à 20:04
 
 

Dans le cas présent oui, mais il faut toujours insister auprès d'un mec qui débute en php sur la protection et le filtrage des entrées.

On ce prend vite pour un dieu en PHP car c'est un langage vraiment simple, mais on passe souvent à coté du principal qui est beaucoup moins simple.


vendredi
07 novembre 2008 à 20:17
 
 

Pinaize, je ne me prends pas pour un dieu du PHP, ça me fait même iech de poser ce type de questions sur un formulaire ... :)


vendredi
07 novembre 2008 à 20:38
 
 

groove_salad a écrit
Warning: mail() expects at most 5 parameters, 11 given in /homez.20/xxxxx/www/div/xxxxx_form.php on line 161
L'envoi du mail a échoué, veuillez réessayer SVP.

En fait, dès que je rajoute plus de 5 paramètres dans :
if (mail($cible, $objet, $message, $nom, $prenom, $adresse_1, $code_postal, $ville, $email, $tel, $headers))
ça me plante. 5 ou en dessous ça passe ! C'est quoi ce délire ?

Je sais que c'est méchant mais j'ai ri. Fort même. C'est vraiment mignon ce genre de question :)

L'interpréteur php se base sur ce qu'on appelle la signature d'une méthode pour savoir laquelle appeler. La signature, dans un vrai langage de programmation, c'est le nom de la méthode, son type de retour, le nombre de paramètres et leur type respectif (et la constance mais on va pas aller trop loin là). En php, étant un sous langage implicitement typé, c'est uniquement le nom de la méthode et le nombre de paramètres. Ici la méthode mail demande 5 paramètres dont les 2 derniers sont optionnels (en réalité ils ne le sont pas mais on leur donne des valeurs par défaut si on ne les utilise pas).

Donc si t'appelle mail(paramètres) avec 3 à 5 paramètres ça passe sans soucis. Mais mail avec par exemple 6 paramètre il connait pas php, d'ailleurs il te le dit : mail() expects at most 5 parameters.


vendredi
07 novembre 2008 à 21:29
 
 

Kane
#24 Satan m'habite

Def a écrit
Je sais que c'est méchant mais j'ai ri.


Perso, je n'ai pas compris comment il espérait utiliser une fonction sans lui donner le bon nombre de paramètre... Je ne sais pas pour vous, mais perso quand j'utilise une fonction pour la première fois, je lis sa déclaration...

ou au moins je la lis avant de poser une question dans un forum.


vendredi
07 novembre 2008 à 23:26
 
 

Ben ouaih mais non en fait, le jour où vous allez poser une question con sur toshop je vais me foutre de votre gueule (vous allez voir, ça fait super plaisir). C'est bon Kane, j'ai bien compris que t'étais un as dans tous les domaines qui touchent de près ou de loin à l'informatique, alors ton commentaire, tu vas te le mettre au cul (passe pas c'est trop gros, tout ça machin).
C'est pénible, je vous jure !

Je suis une buse en PHP, j'ai du faire un #Include et un mini formulaire une fois dans ma vie, tu peux comprendre ça non ? Crevure ;)


Dernière modification le 08/11/08 à 10:42 par groove_salad
samedi
08 novembre 2008 à 09:47
 
 

En plus il n'est pas moche le formulaire. C'est un peu la zone pour la CSS du fieldset, j'ai cherché un petit moment pour avoir le même résultat sur IE et Firefox ...


Dernière modification le 08/11/08 à 10:28 par groove_salad
samedi
08 novembre 2008 à 10:25
 
 

Kane
#27 Satan m'habite

groove_salad a écrit
Ben ouaih mais non en fait, le jour où vous allez poser une question con sur toshop je vais me foutre de votre gueule (vous allez voir, ça fait super plaisir). C'est bon Kane, j'ai bien compris que t'étais un as dans tous les domaines qui touchent de près ou de loin à l'informatique, alors ton commentaire, tu vas te le mettre au cul (passe pas c'est trop gros, tout ça machin).
C'est pénible, je vous jure !

Je suis une buse en PHP, j'ai du faire un #Include et un mini formulaire une fois dans ma vie, tu peux comprendre ça non ? Crevure ;)


Non, mais j'étais sérieux, hein. Tu ne peux pas coder sans avoir la documentation des fonctions sous la main, c'est impossible.


samedi
08 novembre 2008 à 11:24
 
 


Répondre au sujet

Vous devez être identifié pour participer à ce topic.