Page 1 sur 1

fonction mail(), conditions

Posté : 14 avr. 2006, 18:37
par .g@sp.
Bonjour, j'ai un petit souci avec ma fonction mail
Je voudrais "forcer" l'utilisateur à entrer son adresse mail...
Voilà mon code (bon, je sais que c'est pas valide w3c hein, j'essaie d'abord que ce soit fonctionnel, après je vérifierai la validité ;) )
<?php
if (!isset ($_POST['adresse']))
{
?>
<form method="post" action="contacts.php">

<p align="left">

Envoyer un mail à : 

                <label><input type="radio" name="adresse" value="[email protected]" /> Mail 1</label>
                <label><input type="radio" name="adresse" value="[email protected]" /> Mail 2</label>
                <label><input type="radio" name="adresse" value="[email protected]" /> Mail 3</label>
                <label><input type="radio" name="adresse" value="[email protected]" /> Mail 4</label>

</p>

<p align="left">
<label>Sujet : <input type="text" name="sujet" class="texte" /></label>
</p>

<p align="left">
<label>
Votre message : </p>
<p align="left">
<textarea cols="70" rows="10" name="message"></textarea>
</p>
<p align="left">
<label>Votre adresse mail : <input type="text" name="votremail" class="texte" /></p>
<p align="center"><input type="submit" value="envoyer"></p>
</form>
<?
}
else
{
$destinataire=$_POST['adresse'];
$sujet=$_POST['sujet'];
$message=$_POST['message'];
$from="From: ".$_POST['votremail'];

mail($destinataire,$sujet,$message,$from);
?>
<p>Merci, votre mail a bien été envoyé.</p>
<?
}
?>
Je voudrais donc appliquer une condition qui dirait if ($_POST['votremail']=="") (si votremail est vide, donc) on réaffiche le formulaire avec une petite phrase en dessous "merci de bien vouloir noter votre adresse e-mail"

Voilà si quelqu'un peut m'aider, ça me ferait bien plaisir...
merci beaucoup

Posté : 14 avr. 2006, 19:02
par Cyrano

Posté : 14 avr. 2006, 20:22
par .g@sp.
bon, en voyant tout ça, je crois que je vais devoir repenser totalement mon formulaire... (en tout cas, mes requêtes)
Mais bon, c'est surement pas plus mal... je l'ai un peu pompé sur un autre site, donc je suis pas tout à fait convaincu ;)

Merci en tout cas, ça va surement me servir... (même si ça me prendra plus de temps que prévu)

Posté : 14 avr. 2006, 22:58
par .g@sp.
bon, j'ai suivi ce tuto, mais j'ai de nouveau un souci...

voici mes conditions :
if(isset($_POST['envoi']))
{
	$destinataire   = isset($_POST['destinataire'])     ? trim($_POST['destinataire'])  : "";
	$sujet			= isset($_POST['sujet'])			? trim($_POST['sujet'])			: "";
	$message		= isset($_POST['message'])			? trim($_POST['message'])		: "";
	$votremail		= isset($_POST['votremail'])		? trim($_POST['votremail'])		: "";
	$from="From: ".$votremail;


	$valid = "#^[^-_\.][a-z0-9-_\.]+[^-_\.]@[^-_\.][a-z0-9-_\.]+[^-_\.]\.[a-z]{2,4}$#"; 

	if($votremail == '' || !(preg_match($valid,$votremail)))
	{
		echo "Merci de laisser une adresse email valide, pour que nous puissions vous répondre.";
	}
		
	if(mail($destinataire,$sujet,$message,$from))
	{
		echo "Merci, votre mail a bien été envoyé.";
	}
	
	else
	{
		echo "Votre mail n'a pas été envoyé, merci de réessayer plus tard.";
	}
}
else
{
?>
<form method="post" action="testmail.php">
/* etc etc à la suite se trouve mon formulaire */
j'ai testé ça sur mon serveur, en n'entrant pas d'adresse mail pour qu'il me dise "merci de laisser une adresse.. etc"
Il me l'a bien fait, mais il m'a aussi dit "merci, votre email a bien été envoyé" et évidemment ça ne m'arrange pas... (surtout que j'ai l'impression que le mail n'a pas été envoyé :? )

Si quelqu'un sait comment je peux corriger ça...

De plus, je voudrais rajouter un striplslashes sur $message, est-ce qu'il me suffit de lui donner un autre nom (par exemple $messagebrut) puis de rajouter une ligne $message=stripslashes($messagebrut) ?
merci beaucoup

Posté : 14 avr. 2006, 23:17
par Cyrano
C'est logique, tu testes la validité, mais tu n'empèches pas l'envoi si le retour de test n'est pas bon : il manque un else. Ensuite, pas nécessairment besoin de renommer ta variable pour faire un strislashes :
<?php
if(isset($_POST['envoi']))
{
    $destinataire = isset($_POST['destinataire']) ? trim($_POST['destinataire']) : "";
    $sujet        = isset($_POST['sujet'])        ? trim($_POST['sujet'])        : "";
    $message      = isset($_POST['message'])      ? trim($_POST['message'])      : "";
    $votremail    = isset($_POST['votremail'])    ? trim($_POST['votremail'])    : "";
    $from="From: ".$votremail;

    $valid = "#^[^-_\.][a-z0-9-_\.]+[^-_\.]@[^-_\.][a-z0-9-_\.]+[^-_\.]\.[a-z]{2,4}$#";

    if($votremail == '' || !(preg_match($valid,$votremail)))
    {
        echo "Merci de laisser une adresse email valide, pour que nous puissions vous répondre.";
    }
    else
	{
		$message = stripslashes($message);
	    if(mail($destinataire,$sujet,$message,$from))
	    {
	        echo "Merci, votre mail a bien été envoyé.";
	    }
	    else
	    {
	        echo "Votre mail n'a pas été envoyé, merci de réessayer plus tard.";
	    }
	}
} 
?>

Posté : 15 avr. 2006, 10:39
par .g@sp.
Comme quoi je n'avais pas tout bien compris... ;)
merci, ça fonctionne très bien... (enfin la fonction mail() est plutot lente, ce qui est assez pénible pour les tests)

Par contre, j'ai recopié sans vraiment savoir... la fonction trim, c'est pour supprimer les espaces superflus ?

Si je veux empêcher l'envoi d'un message vide, je dois rajouter un
elseif($message == "") ??

Et une dernière question, j'ai vu que c'était bien de protéger le message envoyé avec un htmlentities, mais le problème c'est que ça m'envoie les mails avec les e&grave, et tout ça... je sais pas quoi faire du coup :(

merci beaucoup pour cette aide :)

Posté : 15 avr. 2006, 10:53
par Cyrano
L'utilisation de trim() est volontaire : tu feras l'essai sur certains formulaire de ne remplir qu'avec des espaces, rien d'autre et d'envoyer : cette fonction va supprimer les espace avant et après la chaîne : s'il ne reste rien, la valeur est vide :arrow: retour à la case départ, sinon, il y a une valeur et éventuellement, on peut en valider la forme.

Posté : 15 avr. 2006, 13:09
par .g@sp.
heuuu en fait il y a un petit souci...
ça n'envoie pas le mail :lol:
je recolle le code ici, parce que je n'arrive pas à voir d'où vient l'erreur :( (c'est pas le serveur, parce que je viens de retester avec mon ancien formulaire, et je reçois le mail moins de 2 minutes après)
<?php

if(isset($_POST['envoi']))
{
	$destinataire   = isset($_POST['destinataire'])     ? trim($_POST['destinataire'])  : "";
	$sujet			= isset($_POST['sujet'])			? trim($_POST['sujet'])			: "";
	$message		= isset($_POST['message'])			? trim($_POST['message'])		: "";
	$votremail		= isset($_POST['votremail'])		? trim($_POST['votremail'])		: "";
	$from="From: ".$votremail;


	$valid = "#^[^-_\.][a-z0-9-_\.]+[^-_\.]@[^-_\.][a-z0-9-_\.]+[^-_\.]\.[a-z]{2,4}$#"; 

	if($votremail == '' || !(preg_match($valid,$votremail)))
    {
	?>
     <p>Merci de laisser une adresse email valide, pour que nous puissions vous répondre.</p>
	 <p><a href="javascript:history.back()">Retour</a></p>
    <?
	}
    else
    {
        $message = stripslashes($message);
        if(mail($destinataire,$sujet,$message,$from))
        {
            echo "Merci, votre mail a bien été envoyé.";
        }
        else
        {
		?>
        <p>Votre mail n'a pas été envoyé, merci de réessayer plus tard.</p>
		<p><a href="javascript:history.back()">Retour</a></p>
        <?
		}
    }
} 
else
{
?>
<form method="post" action="testmail.php">
(suit le reste du formulaire, sans php, sauf l'accolade de fermeture du else)
Si quelqu'un voit ce qui ne va pas, ça m'arrangerait beaucoup...

MERCI :)

Posté : 16 avr. 2006, 01:44
par .g@sp.
heuuu au temps pour moi...
j'avais deux noms différents pour la même variable :oops: :oops:

Posté : 16 avr. 2006, 09:26
par Cyrano
Alors en fin de compte : [Résolu] :?:

Posté : 16 avr. 2006, 10:26
par .g@sp.
oui :oops:

merci beauoup