Erreur variable mail()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Erreur variable mail()

Re: Erreur variable mail()

par claire51 » 09 nov. 2013, 19:48

Ok, merci pour ta réponse et pour la nouvelle fonction. Plus de message d'erreur donc bonne nouvelle! Mais pas de mail dans la boite de réception...

Re: Erreur variable mail()

par AB » 09 nov. 2013, 19:01

Soit tu utilises le code de moogli soit le tiens, mais à priori il faut utiliser une seule fois la fonction mail().

Au passage il existe une fonction native php pour tester un mail plutôt que d'utiliser un regex. C'est à dire que ta fonction :
function IsEmail($email) {
                return (preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#i',$email)) ? true : false;
        }
pourrait être avantageusement remplacée par :
function IsEmail($email) {
                return (filter_var($email, FILTER_VALIDATE_EMAIL));
        }

Re: Erreur variable mail()

par claire51 » 09 nov. 2013, 17:24

Merci pour te réponse rapide.
Malheureusement, comme je l'ai dis je n'ai vraiment aucune notion en PHP et l'apprentissage et relativement dur...
J'ai remplacé un bout de mon code avec celui que tu m'as donné mais j'ai toujours le même résultat... Faut-il que je vire ma fonction mail() qui est plus bas dans le code?

Re: Erreur variable mail()

par moogli » 09 nov. 2013, 17:10

salut,

le message est clair, le premier paramètre de la fonction mail doit être une chaîne de caractères (string) et toi tu passe un tableau.

ce qui est le cas car tu passe le tableau qui contient les destinataire que tu creer au début du script.

il te faut gérer le destinataire multiple.
soit en modifiant l'entête et en utilisant le bcc (par exemple) soit en envoyant plusieurs email ;)

exemple du second cas
<?php

$destinataire = array(
    'claire' => '[email protected]',
    'mathieu' => '[email protected]',
);
$subject = $message = '';
if (is_array($_POST['destinataire'])) {
    foreach ($_POST['destinataire'] as $cible) {
        if (array_key_exists($cible, $destinataire)) {
            mail($destinataire[$cible], $subject, $messsage);
        }
    }
}
@+

Erreur variable mail()

par claire51 » 09 nov. 2013, 16:37

Bonjour à tous,

Je suis chargée de faire le site internet de ma promo et jusque là tout va bien. Seul hic, c'est que je ne connais que très peu le PHP et pour faire mon formulaire de contact, j'en ai bien besoin!
Alors j'ai bidouillé un peu, en regardant à droite à gauche sur internet mais malheureusement, je coince toujours et je suis incapable de voir où donc c'est pour ça que je demande votre aide.
L'erreur qui ressort lors de l'envoi de mon formulaire et une erreur au niveau de la fonction mail(): Warning: mail() expects parameter 1 to be string, array given.
L'idée de mon formulaire est de pouvoir sélectionner un ou plusieurs contact et d'envoyer le mail à ces contacts sélectionnés.
Voici donc mon code HTML pour le formulaire puis le code PHP.
<div id="form">
        <form id="contact_form" name="form_contact" method="post" action="traitement.php"> 
		<fieldset><legend>Vos coordonnées</legend>
            <p><label for="nom">Nom:</label> </p> 
            <p><input type="text" id="nom" name="nom" placeholder="nom" required tabindex="1"/></p>
            
            <p><label for="nom">Prénom:</label> </p> 
            <p><input type="text" id="prenom" name="prenom" placeholder="prenom" required tabindex="2"/></p>
            
            <p><label for="email">Votre email:</label></p> 
            <p><input type="text" id="email" name="email" placeholder="[email protected]" required tabindex="3"/> </p>
            
            <p><label for="destinataire">Destinataire :</label></p>
            <p> <select multiple name="destinataire" id="destinataire" size="6">
    			<option value="claire">Claire</option>
    			<option value="mathieu">Mathieu</option>
 				</select></p>
            </fieldset>
            
            <fieldset><legend>Votre message :</legend>
            <p><label for="objet">Objet:</label></p> 
            <p><input type="text" id="objet" name="objet" placeholder="L'objet de votre mail" required tabindex="5" /> </p>
            
            <p><label for="message">Votre message:</label></p> 
            <p><textarea name="message" id="message" tabindex="6" placeholder="Votre mail"> </textarea> </p>
            
            <p><input type="submit" id="envoi" name="envoi" tabindex="7" value=""/></p>
        	</fieldset>
        </form>
    </div>
<?php

	$destinataire = array(
                    'claire'  => '[email protected]',
                    'mathieu'  => '[email protected]',
                );
	$cible = $destinataire;
 
	$copie = 'non'; // 'oui' ou 'non'
	
	$message_envoye = "<div class='msg'> Votre message nous est bien parvenu . Nous y répondrons dans les plus brefs délais. Pour retourner au site cliquez <a href='monsite/contact'>ici</a></div>";
	$message_non_envoye = "<div class='msg'>L'envoi du mail a échoué, veuillez réessayer s'il vous plait ou utiliser une méthode traditionnelle.</div>";
	
	$message_erreur_formulaire = "<div class='msg'>Vous devez d'abord <a href='monsite/contact'>envoyer le formulaire</a>.</div>";
	$message_formulaire_invalide = "<div class='msg'>Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.</div>";
 
 
		// on teste si le formulaire a été soumis
	if (!isset($_POST['envoi']))
	{
		// formulaire non envoyé
		echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
	}
	else
	{
		// formulaire envoyé, on récupère tous les champs.
		$nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
		$prenom     = (isset($_POST['prenom']))     ? Rec($_POST['prenom'])     : '';
		$email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
		$objet   = (isset($_POST['objet']))   ? Rec($_POST['objet'])   : '';
		$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
 
		// On va vérifier les variables et l'email ...
		$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
 
		if (($nom != '') && ($email != '') && ($objet != '') && ($message != '') && ($prenom != ''))
		{

			// Envoi du mail
			if (mail($cible,$objet,$message))
			{
				echo '<p>'.$message_envoye.'</p>'."\n";
			}
			else
			{
				echo '<p>'.$message_non_envoye.'</p>'."\n";
			}
		}
		else
		{
			// une des 4 variables (ou plus) est vide ...
			//echo htmlentities($objet);
			echo '<p>'.$message_formulaire_invalide.'<a href="...">Retour au formulaire</a></p>'."\n";
		}
	} // fin du if (!isset($_POST['envoi']))

	
	function Rec($text)
	{
		$text = trim($text); // supprime les espaces avant et après le texte
		if (1 === get_magic_quotes_gpc())
		{
			$stripslashes = create_function('$txt', 'return stripslashes($txt);');
		}
		else
		{
			$stripslashes = create_function('$txt', 'return $txt;');
		}

		// magic quotes ?
		$text = $stripslashes($text);
		$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
		$text = nl2br($text);
		return $text;
	}
	
function IsEmail($email) {
		return (preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#i',$email)) ? true : false;
	}
?>
Je vous remercie d'avance pour votre précieuse aide!

Claire