Page 1 sur 2

quelques questions sur mon script d'envoi de mail

Posté : 03 nov. 2005, 20:29
par ayiore
Bonsoir à tous!


1. comme vous pouvez le constater j'utilise la fonction echo dans mon script pour afficher des messages d'erreur ou de validation. j'aimerais les remplacer par des popup avec le texte d'avertissement et un simple bouton ok mais je ne sais pas comment faire!

2. J'ai cru comprendre que la fonction mail() n'était pas activé chez tous les fai, par quelle fonction puis je la remplacer?

3. c'est mon premier code en php que je tape ça fonctionne mais est ce que la syntaxe est correcte?

Voilà j'ai fini avec mes questions! lol merci d'avance pour vos réponses!

Mon code ci dessous:

ma page html:

Code : Tout sélectionner

<form action="verifmail.php3"> <table width="400" border="0"> <tr> <td align=right>Nom:</td><td><input name="name" size="20"></td> </tr> <tr> <td align=right>Email:</td><td><input name="email" size="20"></td> </tr> <tr> <td align=right>Sujet:</td><td><input name="subject" size="40"></td> </tr> <tr> <td align=right valign=top>Message:</td><td><textarea name="message" rows="4" cols="40"></textarea></td> </tr> <tr> <td></td><td><input type="submit" value="Envoyer"><input type="reset" value="Effacer"></td> </tr> </table> </form>
ma page de verif en php:
<?php
$monEmail = "******@hotmail.com";
$point = strpos($email,".");
$arobas = strpos($email,"@");
$Validation = "Votre mail à bien été envoyé, nous y répondrons dès que possible. Merci";

if(empty($name))
{
echo("<center>vous n'avez pas saisi votre <b>Nom</b>!</center>");
}
elseif(empty($email))
{
echo"vous n'avez pas saisi votre <b>Email</b>!";
}
elseif($point=='')
{
echo "Votre email doit comporter un <b>point</b>";
}
elseif($arobas=='')
{
echo "Votre email doit comporter un <b>'@'</b>"; 
}
elseif(empty($subject))
{
echo"vous n'avez pas saisi de <b>Sujet</b>!";
}
elseif(empty($subject))
{
echo"vous n'avez pas saisi votre <b>Message</b>!";
}
else
{mail($monEmail, $subject, $message, "From: $email");
}
{
echo"Votre Email a bien été envoyé!";
}
?>

Re: quelques questions sur mon script d'envoi de mail

Posté : 04 nov. 2005, 00:32
par Truc
Salut, on va proicéder par étapes:
1. comme vous pouvez le constater j'utilise la fonction echo dans mon script pour afficher des messages d'erreur ou de validation. j'aimerais les remplacer par des popup avec le texte d'avertissement et un simple bouton ok mais je ne sais pas comment faire!
Pour un popup un petit tuto

2. J'ai cru comprendre que la fonction mail() n'était pas activé chez tous les fai, par quelle fonction puis je la remplacer?
pas la peine de stresser si tu reçois le mail tout va bien sinon il y a PHPMAILER je te renvois sur la fac
3. c'est mon premier code en php que je tape ça fonctionne mais est ce que la syntaxe est correcte?
Le formulaire est ok mais pour le php le principal est de récupèrer les variables avec POST et donc mettre l'attribut < method="POST"> dans la balise <form>
$email=$_POST['email'];
et donc je te propose aussi de revoir les formulaires.

Posté : 04 nov. 2005, 19:13
par ayiore
j'aimerai utiliser un popup windows et non un popup javascript!

comment puis je faire?

Posté : 04 nov. 2005, 19:16
par Invité
salut, qu'est ce qu'un popup Windows ?

Posté : 04 nov. 2005, 19:44
par ayiore
un popup comme windows les genere avec un message un icone et le bouton ok

Posté : 04 nov. 2005, 20:07
par ayiore
truc peux tu m'indiquer ce que je dois modifier au niveau de mes variables car je viens de lire le tuto que tu m'a indiqué mais je ne suis pas sur de ce qu'il faut faire. j'ai bien modifié le début de mon code

Code : Tout sélectionner

<form method="post" action="verifmail.php3">
à la place de

Code : Tout sélectionner

<form action="verifmail.php3">
mais pour ce qui est de mes variables je ne suis pas sur de ce qu'il faut modifier!

Posté : 04 nov. 2005, 20:21
par Truc
un popup comme windows les genere avec un message un icone et le bouton ok
Ca s'appel pas un popup ça :wink:
Mais une boite de dialogue et ça se fait en javascript en 3 lignes grace a alert()

Pour les variables je te montre un exemple a toi de faire les autres
:wink:
$email = isset($_POST['email'] ?  $_POST['email'] : "" ;
alors le principal est la récupération de la variable, pour un code propre on utilise la super globale $_POST. donc pour le champ appelé "email" tu dois, pour pouvoir réutiliser la variable dans l'autre page faire appel a $_POST['email'] et l'affecter, si tu le souhaite, a une variable:
$email = $_POST['email'] 
mais dans l'exemple j'utilise en plus l'opérateur ternaire "?", si la variable existe (test avec isset()) alors on affecte son contenu a $email sinon on affecte une valeur par défaut (ici "").

pour plus d'info voir la doc
c'est tres bien expliqué :wink:

Posté : 04 nov. 2005, 20:40
par ayiore
tout d'abord je te remercie pour ton aide!

je suis sur que ton explication est claire mais je débute alors tout ne me parait pa si clair.

peux tu copier coller le code que j'ai donné en début de post et modifier la partie que tu m'as expliqué ça m'aiderait beaucoup! biensur je ferai la modif pour le reste je ne suis pas completement fainéant :wink:

dernière petite chose si je voulais utiliser une boite de dialogue c'est parce que l'utilisation de echo fait que la page en cours disparait pour laisser place au texte appelé par la fonction. l'ideal pour moi serait de pouvoir afficher un message sur une partie de ma page sans la masquer mais je ne connais pas la methode.

peux tu m'aider?

merci d'avance!

Posté : 04 nov. 2005, 21:00
par Truc
peux tu copier coller le code que j'ai donné en début de post et modifier la partie que tu m'as expliqué ça m'aiderait beaucoup
Attention, une fois n'est pas coutume :wink:


<?
$monEmail = "******@hotmail.com";

$Validation = "Votre mail à bien été envoyé, nous y répondrons dès que possible. Merci";

$name    = isset($_POST['name'])    ?  $_POST['name']    : "" ;
$email   = isset($_POST['email'])   ?  $_POST['email']   : "" ;
$subject = isset($_POST['subject']) ?  $_POST['subject'] : "" ;
$message = isset($_POST['message']) ?  $_POST['message'] : "" ;

$point = strpos($email,".");
$arobas = strpos($email,"@");
$erreur="";

if(isset($_POST)) //on teste la validation du formulaire , si le bouton a été cliqué
{
	if(empty($name))
	{
		$erreur.="vous n'avez pas saisi votre <b>Nom</b>!</ br>";
	}
	elseif(empty($email))
	{
		$erreur.="vous n'avez pas saisi votre <b>Email</b>!</ br>";
	}
	elseif($point=='')
	{
		$erreur.="Votre email doit comporter un <b>point</b></ br>";
	}
	elseif($arobas=='')
	{
		$erreur.="Votre email doit comporter un <b>'@'</b></ br>";
	}
	elseif(empty($subject))
	{
		$erreur.="vous n'avez pas saisi de <b>Sujet</b>!</ br>";
	}
	elseif(empty($subject))
	{
		$erreur.="vous n'avez pas saisi votre <b>Message</b>!</ br>";
	}
	
	if(empty($erreur)) // si aucune erreur n'a été relevé on passe
		{
			if(mail($monEmail, $subject, $message, "From:".$email))
				echo"Votre Email a bien été envoyé!";
			else
				echo "Probleme lors de l'envoi du mail.";
		}
	else
		echo '<center>'.$erreur.'</center>';
}

?>

<form action="<?echo $_SERVER['PHP_SELF']?>" method="POST">
<table width="400" border="0">
<tr>
<td align=right>Nom:</td><td><input name="name" size="20" value="<?echo $name;?>"></td>
</tr>
<tr>
<td align=right>Email:</td><td><input name="email" size="20" value="<?echo $email;?>"></td>
</tr>
<tr>
<td align=right>Sujet:</td><td><input name="subject" size="40" value="<?echo $subject;?>"></td>
</tr>
<tr>
<td align=right valign=top>Message:</td><td><textarea name="message" rows="4" cols="40"><?echo $message;?></textarea></td>
</tr>
<tr>
<td></td><td><input type="submit" value="Envoyer"><input type="reset" value="Effacer"></td>
</tr>
</table>
</form> 
donc le traitement se fait sur la meme page que le formulaire, si un champ n'est pas remplis un message d'erreur s'affichera au dessus du formualire préremplis avec les autres valeur.

Posté : 05 nov. 2005, 02:37
par ayiore
vraiment super sympa! :D

je n'en ferai pas une coutume ne t'inquiète pas ! enfin j'espère! :wink:

par contre il semble qu'il y ait une petite erreur quand je test ton code:


Parse error: parse error, unexpected '?', expecting ',' or ')' in /var/www/sdc/a/3/ayiore/agua/test/mailtest.php on line 6


edit: j'ai trouvé manquait une paranthèse!!

merci bcp pour ton aide

Posté : 05 nov. 2005, 03:18
par Truc
de rien :wink:
je pense avoir réctifié l'erreur sur mon code, mais tu vois ta trouvé tout seul c'est beaucoup mieux :D

Sinon le code reste un exemple qui peut etre ammélioré par exemple la verification du format texte du mail peut se faire avec une expression régulière

Posté : 05 nov. 2005, 04:09
par ayiore
ok je m'occuperai deu controle approfondi du format du mail dès que le code sera totalement bon! et oui il y a encore des petit trucs qui me gènent. :wink:

1. j'aimerai qu'au debut il n'y ai pas de message d'erreur d'affiché. dans notre cas il est ecrit "vous n'avez pas saisi votre nom" par défaut dès le début!

2. je ne comprend pas pourquoi entre ton code et le mien le resultat differe au niveau de la reception du mail; moi j'ai bien le sujet du message qui apparait alors qu'avec ton code il n'y a rien c étrange?! :roll:

ensuite j'ai deux petite questions:

1. c'est le point derrière $erreur qui permet d'afficher la variable au dessu du formulaire?
$erreur.="vous n'avez pas saisi votre <b>Nom</b>!</ br>";

2. le point devant $email il sert à quoi
if(mail($monEmail, $subject, $message, "From:".$email))

en fait quand je recois mon mail je constate que l'adresse expediteur differe de celle saisi dans le formulaire. il prend par défaut l'adresse stockée dans la base de registre? si on retire le point ça prend bien le contenu du champ email! c'est bien ça?

désolé je dois être un peu chiant avec toute mes questions! promi je m'achète un bouquin sur le php dès que possible.

Posté : 05 nov. 2005, 09:18
par Cyrano
en PHP, le point est l'opérateur de concaténation : quand on met par exemple
$$erreur .= "message ...";
C'est pour ajouter un élément à la valeur existante déjà assignée à la variable. Je dois donc normalement avoir plus haut dans le même code au minimum:
$erreur = "";
Ensuite le second est toujours pour concaténer. Tu as une chaine de caractères à laquelle on ajoute la valeur d'une variable:
$chaine = "texte de la chaine de caractère plus la valeur ". $variable;
Ce qui est à l'extérieur des guillemets, c'est du PHP, ce qui est à l'intérieur, c'est une chaine de caractère qui ne sera pas interprétée.

Posté : 05 nov. 2005, 11:42
par ayiore
ok merci cyrano c'est plus clair!

Truc je viens de modifier cet ligne:
if(isset($_POST))
par
if( isset( $_POST['submit'] ) )
je pense que c'etait ça qui faisait qu'au départ on affiché "vous n'avez pas saisi votre nom"

par contre ça ne marche plus :oops: pas de mail envoyé et plus de message affiché ce qui m'amène à me poser deux questions:

1. je ne vois ce qui dans le code permet l'affichage des messages d'erreur au dessus du formulaire. est ce qu'il ne faudrait pas créer un champ à qui on affecterait la valeur de $erreur? je fais le malin mais je ne sais même pas faire ce que je tente de t'expliquer! :wink:

2. je ne comprends pas la façon dont tu realises la boucle if avec la fonction mail. c'est normal que la fonction mail soit utilisé en condition?

Posté : 05 nov. 2005, 12:22
par Cyrano
Voir une méthode de validation de formulaire: télécharge ce modèle.