Fonction mail et formulaire

[Résolu]
Signaler
Messages postés
45
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 mars 2008
-
Messages postés
43
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
17 juillet 2007
-
Bonsoir à tous,



Malgré mes recherches, je n'ai pas trouvé grand chose dans les
précédents sujets... donc désolé si je suis redondant... j'ai un
formulaire que je poste (style <form name="form"
action="pagesuivante.php" method="post"> avec un petit bouton
submit)... et j'aimerais pouvoir envoyer un mail contenant des infos de
ce formulaire mais de façon transparente pour l'utilisateur en même
temps que les données s'enregistrent dans la base mysql... avant de
revenir finalement sur ma page "pagesuivante.php"...

merci de votre aide...

lagombe

12 réponses

Messages postés
43
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
17 juillet 2007

Bon, ca aurais ete pas mal de voir la source de ton prog pour les exemples mais bon, c'est pas grave.



//code a mettre au debut du fichier pagesuivante.php

//on va dire qu'on a:

$info1 = $_POST['champs1']; //contenue du premier champs du formulaire

$info2 = $_POST['champs2']; //...

$info2 = $_POST['champs2']; //...



//je reste succinct, apres tu peux faire quelque choseplus poussé



//sauvegarde des parametres dans la bd mysql

$CONNEXION=mysql_connect("nom serveur (generalement localhost)","login de connection a la bd","mot de passe");

mysql_select_db("nom de ta bd");

mysql_query("UPDATE INTO nom_table VALUES('".$info1."','".$info2."','".$info3."')");

//fin de sauvegarde



//envoi du mail

mail("destinataire@hote.TLD","sujet mail","message du mail avec les données\ninfo1: ".$info1."\ninfo2: ".$info2."\ninfo3: ".$info3); //attention, certains hebergeurs deactivent la fonction mail

//fin envoi mail



//a la suite, tu met le contenue normal de la page pagesuivante.php


Le probleme avec cette solution, c'est que si l'utilisateur actualise
la page, ca va reenvoyer le mail et re ecrire les données dans la bd,
donc modifie ton formulaire comme ceci:



<form name="form" action="script.php" method="post">



ensuite, tu met le code que d'au dessus dans ce fichier script.php, tu rajoute a la fin:



echo "<script>location.href='pagesuivante.php'</script>";



pour arriver directement sur pagesuivante.php.

Par contre, cette deuxieme technique ne marche pas si tu réutilise les données de ton formulaire dans ta page pagesuivante.php.

Voila, bonne continuation

Stevo
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
un mail() en même temps que tu fais un query() dans ta base de donnée. Juste une ligne à rajouter !
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,



tu n'as pas dû chercher beaucoup sur le site.



Pour envoyer un mail il faut utiliser la fonction mail() pour la
redirection vers la page précédente utilise la fonction header comme
ceci :



header('location:page.php');



plus de détails sur fr.php.net



a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
43
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
17 juillet 2007

arf! trop long, j'me suis fait grillé
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
ton code est bof, il manque des isset() pour savoir si les variables
existent par exemple, ensuite tu n'as pas mis de mysql_close() après le
mysql_query(), attention aux magic_quotes et aux caractères
spéciaux (faille de sql injection probable dans ton cas), etc...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Pour éviter le double envoi :



<?php

session_start();



// On initialise ou incrémente la variable compteur en fonction du
nombre de fois où on appuie sur le bouton "Envoyez" du formulaire.

if ( isset($_SESSION['compteur']) ) {

$_SESSION['compteur']++;

} else {

$_SESSION['compteur'] = 1;

}



// On vérifie si le nombre de clicks sur le bouton n'exéde pas 1 fois.

if ( $_SESSION['compteur'] > 1 ) {

die(); // Si c'est le cas, ==> erreur.

}



// Traitement de ce que tu veux faire.

?>



Dans ta nouvelle page, n'oublie pas de faire :

unset($_SESSION['compteur']);

Voila :)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
pas bête, on peut faire ça pour pleins de trucs ;-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
43
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
17 juillet 2007

@Anthomicro: j'ai dit que c'était du basic de chez basic, il faut le
retravailler, mettre des verif, validation de saisie... casie
obligatoire sur un formulaire etant donnée que l'internaute peut entrer
ce qu'il veux.



+1 pour l'idée de FhX d'utiliser des session afin d'éviter les envoi multiple.
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
ouais mais le basique basique faut qu'il marche quand l'error reporting est à E_ALL, sans isset ça marche pas ;-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
43
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
17 juillet 2007

Bah en fait si ca marche si tu vien de la page de formulaire, c'est
juste le cas du p'ti malin qui rentre l'adresse dans la barre de
navigation que tu gere pas
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
ouais enfin bon... c'est bancal donc ^^

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
43
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
17 juillet 2007

allez, je profite d'un plantage de Word pour psychoter, voici un code bien comme il faut:

<?php

session_start();



// On initialise ou incrémente
la variable compteur en fonction du nombre de fois où on appuie sur le
bouton "Envoyez" du formulaire.

if ( isset($_SESSION['compteur']) ) {

$_SESSION['compteur']++;

} else {

$_SESSION['compteur'] = 1;

}



// On vérifie si le nombre de clicks sur le bouton n'exéde pas 1 fois.

if ( $_SESSION['compteur'] =1 )

{

if( isset($_POST['champs1']) && isset($_POST['champs2']) && isset($_POST['champs3']) )
{

//code a mettre au debut du fichier pagesuivante.php
//on va dire qu'on a:
$info1 = $_POST['champs1']; //contenue du premier champs du formulaire
$info2 = $_POST['champs2']; //...
$info2 = $_POST['champs2']; //...



//je reste succinct, apres tu peux faire quelque choseplus poussé

//sauvegarde des parametres dans la bd mysql
$CONNEXION=mysql_connect("nom serveur (generalement localhost)","login de connection a la bd","mot de passe");

mysql_select_db("nom de ta bd");

if( !mysql_query("UPDATE INTO nom_table VALUES('".$info1."','".$info2."','".$info3."')") )

{// cas ou il y a eu une erreure lors de l'écriture dans la bd

if( file_exists("log.txt") )

{

$fp = fopen("log.txt","a");


fputs($fp, "erreure lors de l'écriture dans la base de donnée :
info1=".$info1." | info2=".$info2." | info3=".$info3); // on écrit le détail de l'erreure dans le fichier de log

fclose($fp);

}

}


//fin de sauvegarde
@mysql_close($CONNEXION);

//envoi du mail

if(!mail("destinataire@hote.TLD","sujet mail","message du mail avec les données\ninfo1: ".$info1."\ninfo2: ".$info2."\ninfo3: ".$info3) ) //attention, certains hebergeurs deactivent la fonction mail

{//si l'envoi du mail n'a pas marché, on écrie dans le log

if( file_exists("log.txt") )

{

$fp = fopen("log.txt","a");

fputs($fp,
"erreure lors de l'écriture dans la base de donnée : info1=".$info1." |
info2=".$info2." | info3=".$info3); // on écrit le détail de l'erreure dans le fichier de log

fclose($fp);

}

}


//fin envoi mail

}

else

echo "message d'erreure"; //tu
met le message que tu veux, généralement, si ça arrive là c'est qu'il
est pas passé par le formulaire donc un petit
"<script>location.href='nompdetapageavecleformulaire.php'</script>"



//a la suite, tu met le contenue normal de la page pagesuivante.php

}


else


{

//si le gars arrive là c'est
qu'il a réactualisé, donc tu fait ce que tu veux avec lui (message
d'alerte, message disant pas de réactualisation...

}



//a la suite, comme d'hab, ta page normal



?>



Je rappel les dernières indication:

<?php unset($_SESSION['compteur']); ?> sur la page ou il y a le formulaire

créer un fichier log.txt dans le meme repertoire que tes pages. En
allant voir ce fichier de temps en temps (et en le vidant après) tu
pourra voir si t'a eu des problemes dans des envoi ou écriture (très
pratique )