Erreur envoi formulaire mail PhP

Résolu/Fermé
NeoIshiara Messages postés 12 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 19 mars 2018 - 19 juin 2013 à 11:22
NeoIshiara Messages postés 12 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 19 mars 2018 - 19 juin 2013 à 14:22
Bonjour, je viens à vous pour vous présentez mon problème.
Je voulais créer un formulaire qui enverrais ensuite son contenu par mail
Le contenu s'envoi bel et bien, mais des messages d'erreurs s'affiche je ne trouve pas comment les réglés.

J'ai annoté les lignes en gras, italique souligné là il est censé y avoir un problème.

Le code html :
<form method="post" action="formmail.php">
	<p class="titre">Coordonnées</p>
		<fieldset id="coordonnees">
			<p id="civilite"><label>Civilité : </label>
				<input type="radio" name="civilite" value="M." />M.
				<input type="radio" name="civilite" value="Mlle" />Mlle
				<input type="radio" name="civilite" value="Mme" />Mme
			</p>
			<label>Nom : </label><input type="text" name="nom" size="30" /><br />
			<label>Adresse : </label><input type="text" name="adresse" size="30" /><br />
			<label>Code postal : </label><input type="text" name="codepostal" size="30" /><br />
			<label>Ville : </label><input type="text" name="ville" size="30" /><br />
			<label>Pays : </label>
				<select name="pays">
					<option value="france">France</option>
					<option value="belgique">Belgique</option>
					<option value="suisse">Suisse</option>
				</select>
			<p id="interets"><label>Centres intérêts : </label>
				<input type="checkbox" name="interets[]" value="sport" />Sport
				<input type="checkbox" name="interets[]" value="cinema" />Cinéma<br />
				<input type="checkbox" name="interets[]" value="internet" />Internet
				<input type="checkbox" name="interets[]" value="voyages" />Voyages
			</p>
		</fieldset>
	<p class="titre">Message</p>
		<fieldset id="message">
			<textarea name="comments" rows="5" cols="40"></textarea>
		</fieldset>
	<p id="buttons">
		<input href= "envoifichier.html" type="submit" value="Envoyer" />
		<input type="reset" value="Recommencer" />
	</p>
</form>


Le PhP :
<?php
$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement 
remplis :<br/><br/>";
$msg_ok = "Votre demande a bien ete prise en compte.";
$message = $msg_erreur;
define('MAIL_DESTINATAIRE','anthony.augereau@hncs-groupe.com'); // remplacer par votre email
define('MAIL_SUJET','Message du formulaire de example.com');
 
// vérification des champs
if (empty($_POST['civilite'])) 
$message .= "Votre civilité<br/>";
if (empty($_POST['nom'])) 
$message .= "Votre nom<br/>";
if (empty($_POST['adresse'])) 
$message .= "Votre adresse<br/>";
if (empty($_POST['codepostal'])) 
$message .= "Votre code postal<br/>";
if (empty($_POST['ville'])) 
$message .= "Votre ville<br/>";
if (empty($_POST['comments'])) 
$message .= "Votre message<br/>";
 
// si un champ est vide, on affiche le message d'erreur et on stoppe le script
if (strlen($message) > strlen($msg_erreur)) {
   echo $message; die();
}
 
// sinon c'est ok => on continue
foreach($_POST as $index => $valeur) 
l.30{
  $$index = stripslashes(trim($valeur));
}
 
$interets = $_POST['interets'];
$sqlinterets = '';
for ($i=0; $i<count($interets); $i++)
{
  $sqlinterets .= $interets[$i];
  $sqlinterets .= ', ';
}
 
//Préparation de l'entête du mail:
$mail_entete  = "MIME-Version: 1.0\r\n";
l.45 $mail_entete .= "From: {$_POST['nom']} "
l.46             ."<{$_POST['email']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
 
// préparation du corps du mail
$mail_corps  = "Message de : $civilite $nom\n";
$mail_corps .= "Adresse : $adresse, $codepostal $ville, $pays\n";
$mail_corps .= "Ses centres d'intérêts : $sqlinterets\n\n\n";
$mail_corps .= $comments;
 
// envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
  //Le mail est bien expédié
  echo $msg_ok;
} else {
  //Le mail n'a pas été expédié
  echo "Une erreur est survenue lors de l'envoi du formulaire par email";
}
 
?>


Et voici mes messages d'erreur :
Warning: trim() expects parameter 1 to be string, array given in C:\Program Files (x86)\EasyPHP-5.3.9\www\formmail.php on line 31

Notice: Undefined index: email in C:\Program Files (x86)\EasyPHP-5.3.9\www\formmail.php on line 45

Notice: Undefined index: email in C:\Program Files (x86)\EasyPHP-5.3.9\www\formmail.php on line 46
Votre demande a bien ete prise en compte.
A voir également:

2 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
19 juin 2013 à 14:17
Bonjour,

Reprenons les problèmes point à point.

1) Warning: trim() expects parameter 1 to be string, array given
Ton formulaire HTML définit la champ « interets » comme étant un tableau.
Or dans ta boucle, tu agis comme si toutes les variables de _POST étaient des chaînes de caractères. Il faut différencier.
Tu peux corriger en testant le type de données, avec les fonctions is_array et is_string.
Par exemple :
foreach($_POST as $index => $valeur) 
{
  if (is_string($valeur))
    $$index = stripslashes(trim($valeur));
  else if (is_array($valeur))
    $$index = $valeur;
}

Du coup, la ligne suivante (« $interets = $_POST['interets']; ») peut être supprimée.

2 et 3) Undefined index: email
Le champ EMAIL n'est pas défini dans ton formulaire... Donc forcément, quand tu appelles $_POST['email'] dans la page PHP, il dit qu'il ne connait pas.

Tu devrais soit supprimer les références à $_POST['email'] dans le php, soit rajouter un champ <input type='text' (ou 'hidden') name='email'> dans ton HTML.

Xavier
1
NeoIshiara Messages postés 12 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 19 mars 2018
Modifié par NeoIshiara le 19/06/2013 à 14:32
D'accord, merci bien, je vais de suite essayer ça :)

Edit : Parfait, celà fonctionne à merveille ! Un grand merci à vous ! :D
0