Fonction mail et formulaire

Résolu
lagombe Messages postés 45 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 mars 2008 - 30 août 2005 à 17:13
stevo77 Messages postés 43 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 17 juillet 2007 - 1 sept. 2005 à 11:35
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

stevo77 Messages postés 43 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 17 juillet 2007
30 août 2005 à 17:45
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
3
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
30 août 2005 à 17:31
un mail() en même temps que tu fais un query() dans ta base de donnée. Juste une ligne à rajouter !
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 août 2005 à 17:34
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>
0
stevo77 Messages postés 43 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 17 juillet 2007
30 août 2005 à 17:46
arf! trop long, j'me suis fait grillé
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 août 2005 à 17:51
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>
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
30 août 2005 à 19:52
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 :)
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 août 2005 à 19:58
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>
0
stevo77 Messages postés 43 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 17 juillet 2007
31 août 2005 à 09:49
@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.
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 août 2005 à 13:59
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>
0
stevo77 Messages postés 43 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 17 juillet 2007
31 août 2005 à 16:46
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
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 août 2005 à 17:01
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>
0
stevo77 Messages postés 43 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 17 juillet 2007
1 sept. 2005 à 11:35
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 )
0
Rejoignez-nous