Erreur envoi formulaire mail PhP

[Résolu/Fermé]
Signaler
Messages postés
12
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
19 mars 2018
-
Messages postés
12
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
19 mars 2018
-
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.

2 réponses

Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 000
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
12
Date d'inscription
mardi 4 juin 2013
Statut
Membre
Dernière intervention
19 mars 2018

D'accord, merci bien, je vais de suite essayer ça :)

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