8722 sujets

Développement web côté serveur, CMS

Bonsoir,

Je vous explique le problème qui va me faire perdre tous mes cheveux !

Je réalise 2 formulaires de contact en php sur 2 pages distinctes.
J'ai récupéré le script sur Internet, il marche très bien. Je l'ai modifié à ma façon, mais le problème ne vient pas de là.

Seulement je veux, quand je reçois le mail sur ma boîte de messagerie, qu'il y ait dans le champ 'objet' un texte avant, exemple

MAIL UTILISATEUR - 'objet écrit par l'utilisateur'

Aidez moi ...

<?php
/*
	********************************************************************************************
	CONFIGURATION
	********************************************************************************************
*/
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
$destinataire = '*******@gmail.com';

// copie ? (envoie une copie au visiteur)
$copie = 'non';

// Action du formulaire (si votre page a des paramètres dans l'URL)
// si cette page est index.php?page=contact alors mettez index.php?page=contact
// sinon, laissez vide
$form_action = '';

// Messages de confirmation du mail
$message_envoye = "Votre message nous est bien parvenu !";
$message_non_envoye = "L'envoi du message a &eacute;chou&eacute;, veuillez r&eacute;essayer SVP.";

// Message d'erreur du formulaire
$message_formulaire_invalide = "Il y a une erreur dans le formulaire";

// Quel compte utiliser
$client = "MAIL UTILISATEUR";
$pro = "MAIL COMMERCIAL";

/*
	********************************************************************************************
	FIN DE LA CONFIGURATION
	********************************************************************************************
*/

/*
 * cette fonction sert à nettoyer et enregistrer un texte
 */
function Rec($text)
{
	$text = htmlspecialchars(trim($text), ENT_QUOTES);
	if (1 === get_magic_quotes_gpc())
	{
		$text = stripslashes($text);
	}

	$text = nl2br($text);
	return $text;
};

/*
 * Cette fonction sert à vérifier la syntaxe d'un email
 */
function IsEmail($email)
{
	$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(? [decu]? [decu]?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(? [decu]?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
	return (($value === 0) || ($value === false)) ? false : true;
}

// formulaire envoyé, on récupère tous les champs.
$nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
$email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
$objet   = (isset($_POST['objet']))   ? Rec($_POST[$client'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é
$err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin

if (isset($_POST['envoi']))
{
	if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
	{
		// les 4 variables sont remplies, on génère puis envoie le mail
		$headers  = 'From:'.$nom.' <'.$email.'>' . "\r\n";
		//$headers .= 'Reply-To: '.$email. "\r\n" ;
		//$headers .= 'X-Mailer [langue]HP/'.phpversion();

		// envoyer une copie au visiteur ?
		if ($copie == 'oui')
		{
			$cible = $destinataire.','.$email;
		}
		else
		{
			$cible = $destinataire;
		};

		// Remplacement de certains caractères spéciaux
		$message = str_replace("&#039;","'",$message);
		$message = str_replace("&#8217;","'",$message);
		$message = str_replace("&quot;",'"',$message);
		$message = str_replace('<br>','',$message);
		$message = str_replace('<br />','',$message);
		$message = str_replace("&lt;","<",$message);
		$message = str_replace("&gt;",">",$message);
		$message = str_replace("&amp;","&",$message);

		// Envoi du mail
		if (mail($cible, $client, $objet, $message, $headers))
		{
			echo '<p>'.$message_envoye.'</p>';
		}
		else
		{
			echo '<p>'.$message_non_envoye.'</p>';
		};
	}
	else
	{
		// une des 3 variables (ou plus) est vide ...
		echo '<p>'.$message_formulaire_invalide.'</p>';
		$err_formulaire = true;
	};
}; // fin du if (!isset($_POST['envoi']))

if (($err_formulaire) || (!isset($_POST['envoi'])))
{
	// afficher le formulaire
	echo '
	<form id="contact" method="post" action="'.$form_action.'">
	<fieldset>
	<span class="input">
		<span class="input_top">&nbsp;</span>
		<span class="input_middle">
			<span class="name">Nom</span>
			<input type="text" class="input_field" id="nom" name="nom" title="Entrez votre nom" value="'.stripslashes($nom).'" tabindex="1" />
		</span>
		<span class="input_bottom">&nbsp;</span>
	</span>
	<br class="cl"/>
	
	<span class="input">
		<span class="input_top">&nbsp;</span>
		<span class="input_middle">
			<span class="name">Email</span>
			<input type="text" class="input_field" id="email" name="email" title="Entrez votre adresse email" value="'.stripslashes($email).'" tabindex="2" />
		</span>
		<span class="input_bottom">&nbsp;</span>
	</span>
	<br class="cl"/>
									
	<span class="input">
		<span class="input_top">&nbsp;</span>
		<span class="input_middle">
			<span class="name">Objet</span>
			<input type="text" class="input_field" id="objet" name="objet" title="Entrez le sujet de votre message" value="'.stripslashes($objet).'" tabindex="3" />
		</span>
		<span class="input_bottom">&nbsp;</span>
	</span>
	<br class="cl"/>

	<span class="textarea">
		<span class="textarea_top">&nbsp;</span>
			<span class="textarea_middle">
				<span class="name">Message</span>
				<textarea class="textarea_field" cols="30" rows="8" id="message" name="message" tabindex="4" title="Entrez votre message">'.stripslashes($message).'</textarea>
			</span>
			<span class="textarea_bottom">&nbsp;</span>
			</span><!-- End input -->
	<br class="cl" />
	
	</fieldset>

	<div style="float:right"><input type="submit" class="envoi" name="envoi" value="Envoyer" /></div>
	</form>';
};
?>
Euh, si tu ne sais pas faire ça ... quand même ...


$objet = $nom.' - '.$objet;
// Envoi du mail
		if (mail($cible, $client, $objet, $message, $headers))
		{
			echo '<p>'.$message_envoye.'</p>';
		}


Et ceci ne fonctionne pas :

$objet   = (isset($_POST['objet']))   ? Rec($_POST[$client'objet'])   : '';

Modifié par Super_baloo8 (02 Dec 2012 - 00:34)
Merci de ta réponse.

J'ai en effet testé un truc comme ça avant de voir ta réponse. Mais je ne me suis pas pris la tête. J'ai carrément empêcher à l'utilisateur de mettre un nom en objet, et j'ai définit ceci dans le formulaire :

<input type="text" class="input_field" id="objet" name="objet" title="" value="MAIL UTILISATEUR"'.stripslashes($email).'" disabled="disabled" tabindex="3" />


Ça peut surement servir à d'autres. Ainsi je reçois le mail avec le nom que j'ai prédéfini plus haut dans une variable $utilis.

A l'occaz je testerai ta solution Smiley lol

Merci en tous cas Smiley smile
[Édité par le CyberPachyderme: Oops, pas vu que le sujet était Résolu… Smiley rolleyes ]

Salut,

Pour ma part, j'utilise bêtement la concaténation, c'est ce qu'il y'a de plus simple je pense.

D'abord tu renseigne une variable avec la chaîne que tu désire ajouter :
$chaine_a_rajouter = '[LA CHAINE QUE TU VEUX RAJOUTER] ';


Ensuite tu récupère la chaîne du sujet qui à été renseignée par l'utilisateur :
$objet = $_POST['objet'];


Tu concatène les deux :
$objet_final = $chaine_a_rajouter . $objet;


Et hop !

J'ai mis des accolades dans la chaîne à rajouter, parce que c'est comme ça que je fais de mon coté, je trouve ça plus clair ensuite pour trier les courriels dans mon logiciel de réception.
Modifié par MaamuT (15 Dec 2012 - 15:42)