Formulaire php mail et stockage sql ?
Fermé
exocet91
Messages postés
5
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
8 janvier 2010
-
7 janv. 2010 à 14:08
spastore Messages postés 17 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 13 mars 2011 - 8 janv. 2010 à 12:22
spastore Messages postés 17 Date d'inscription mercredi 6 janvier 2010 Statut Membre Dernière intervention 13 mars 2011 - 8 janv. 2010 à 12:22
A voir également:
- Formulaire php mail et stockage sql ?
- Yahoo mail - Accueil - Mail
- Espace de stockage gmail plein - Guide
- Publipostage mail - Accueil - Word
- Stockage telephone - Accueil - Guide Android
- Formulaire de réclamation facebook - Guide
2 réponses
spastore
Messages postés
17
Date d'inscription
mercredi 6 janvier 2010
Statut
Membre
Dernière intervention
13 mars 2011
30
7 janv. 2010 à 16:35
7 janv. 2010 à 16:35
Voici la structure globale de ce que vous devez faire :
if (isset($_POST)) // Si on vient de valider le formulaire (sinon on fait rien)
if (!empty($_POST["nom"]) && !empty($_POST["prenom"]) ...) // si les champs sont bien remplis
{
$destinataire = "...";
$sujet = "...";
$message = "...";
$mail_ok = mail($destinataire, $sujet, $message); // on envoie le mail et on récupère le résultat
if ($mail_ok) // si le mail est bien parti
{
// ici on stocke dans la base de données :
// (préparation des données, mysql_connect, mysql_select_db, mysql_query)
// et on affiche confirmation à l'internaute
}
else
{
// ici, un message d'erreur car le mail n'est pas bien parti...
// en général les mails partent bien, sinon vérifiez le SMTP dans php.ini.
}
}
2. if(isset($_POST["message"])=="ok") est équivalent à if (isset($_POST["message"])), et cela permet de savoir si le formulaire vient d'être validé (par opposition à quand l'internaute arrive pour la première fois sur la page). Ca n'a rien à faire ici.
$message.="Votre mail a bien été envoyé, ainsi que votre adresse IP : ".$_SERVER['REMOTE_ADDR']."\r\n" ; : Ce message n'est pas affiché donc il ne sert à rien.
En analysant votre code, je vois que ces deux lignes (censées être exécutée la première fois qu'on arrive sur la page, c'est à dire lorsqu'on n'a pas encore validé le formulaire) ne servent à rien, et je vois beaucoup d'autres erreurs :
1. Vous devez faire : remplacez tout ce bloc :
if(empty($_POST))
{
if(isset($_POST["message"])=="ok")
$message.="Mail bien été envoyé, ainsi que votre adresse IP" .$_SERVER['REMOTE_ADDR']."\r\n" ;
}
else
{
Par :
if (isset($_POST))
{
2. Vous devez : remplacer tous les $post par $_POST (en respectant la casse)
if (isset($_POST)) // Si on vient de valider le formulaire (sinon on fait rien)
if (!empty($_POST["nom"]) && !empty($_POST["prenom"]) ...) // si les champs sont bien remplis
{
$destinataire = "...";
$sujet = "...";
$message = "...";
$mail_ok = mail($destinataire, $sujet, $message); // on envoie le mail et on récupère le résultat
if ($mail_ok) // si le mail est bien parti
{
// ici on stocke dans la base de données :
// (préparation des données, mysql_connect, mysql_select_db, mysql_query)
// et on affiche confirmation à l'internaute
}
else
{
// ici, un message d'erreur car le mail n'est pas bien parti...
// en général les mails partent bien, sinon vérifiez le SMTP dans php.ini.
}
}
2. if(isset($_POST["message"])=="ok") est équivalent à if (isset($_POST["message"])), et cela permet de savoir si le formulaire vient d'être validé (par opposition à quand l'internaute arrive pour la première fois sur la page). Ca n'a rien à faire ici.
$message.="Votre mail a bien été envoyé, ainsi que votre adresse IP : ".$_SERVER['REMOTE_ADDR']."\r\n" ; : Ce message n'est pas affiché donc il ne sert à rien.
En analysant votre code, je vois que ces deux lignes (censées être exécutée la première fois qu'on arrive sur la page, c'est à dire lorsqu'on n'a pas encore validé le formulaire) ne servent à rien, et je vois beaucoup d'autres erreurs :
1. Vous devez faire : remplacez tout ce bloc :
if(empty($_POST))
{
if(isset($_POST["message"])=="ok")
$message.="Mail bien été envoyé, ainsi que votre adresse IP" .$_SERVER['REMOTE_ADDR']."\r\n" ;
}
else
{
Par :
if (isset($_POST))
{
2. Vous devez : remplacer tous les $post par $_POST (en respectant la casse)
exocet91
Messages postés
5
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
8 janvier 2010
7 janv. 2010 à 16:57
7 janv. 2010 à 16:57
Bonjour,
ok, un grand merci pour ces explications que je vais tenter de mettre en application, et si ça marche je poste le code complet, pour ceux qui auraient le même souci de débutant que moi ;)). J'ai commencé par créer une page traitement.php pour la traiter en action="traitement.php".
mille merci pour votre aide précieuse
James
ok, un grand merci pour ces explications que je vais tenter de mettre en application, et si ça marche je poste le code complet, pour ceux qui auraient le même souci de débutant que moi ;)). J'ai commencé par créer une page traitement.php pour la traiter en action="traitement.php".
mille merci pour votre aide précieuse
James
7 janv. 2010 à 18:02
ben ça coince !!
Parse error: parse error in C:\wamp\www\multiservices_bricolage\traitement2.php on line 12 _ je dois avoir un problème de syntaxe mais lequel ??
----------------------------------------- code refait comme suit !! -----------------------
// Si on vient de valider le formulaire (sinon on fait rien)
if (isset($_POST)) {echo 'vous avez validé le formulaire';}
// On vérifie si les champs sont vides
$temp=array_map('trim', $_POST) ;
$_POST=array_map('htmlspecialchars', $temp) ;
$erreur='' ;
if(!empty($_POST["nom"])
$erreur.="Vous n'avez pas rempli le champ \"Votre Nom\".<br/>"; (c'est la ligne 12)
if(!empty($_POST["email"])
$erreur.="Vous n'avez pas rempli le champ \"Votre adresse e-mail\".<br/>" ;
if(!empty($_POST["email"]) && !preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#', $_POST["email"])
$erreur.="L'adresse e-mail que vous avez rentré est incorrecte.<br/>" ;
if(!empty($_POST["demande"])
$erreur.="Vous n'avez pas rempli le champ \" Quel est votre message ? \".<br/>" ;
if($_POST["question"]!=$_POST["premiernombre"].$_POST["troisiemenombre"])
$erreur.="La réponse a la question anti-robots ne correspond pas a la réponse attendue !</a>" ;
if(!empty($erreur))
{
if(mail('toto@yahoo.fr', stripslashes($_POST["demande"]), stripslashes("exocet : From M/Mmme ".$_POST["nom"].
":".$_POST["email"]." , Adresse IP : ".$_SERVER['REMOTE_ADDR']."\n
".$_POST["demande"]), "From: ".$_POST["email"]."\r\n
"."Reply-To: ".$_POST["email"]))
{ $db = mysql_connect('localhost', 'root', 'titi'); // connexion a la base
mysql_select_db('contacts',$db); // sélection de la base
$sql = "INSERT INTO contacts(id, nom, prenom, tel, email, CP, ville, demande) VALUES('','$nom','$prenom','$tel','$email',
'$CP','$ville','$demande')";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
mysql_close(); // on ferme la connexion
}
echo 'envoi et données enregistrées, OK'
else { echo ' ça c pas bien passé :( ' }
}
?>
merci pour votre aide
à bientôt
7 janv. 2010 à 18:40
il manquait une )
if(!empty($_POST["nom"]))
maintenant suis bloqué à la ligne 40:
else echo ' ça c pas bien] passé ' ( il doit pas être en bonne place !!)
Y'a t il quelq'un qui pourrait me recoller mes bouts de code comme il faut s'il vous plait, ça me permettrait de voir comment ça fonctionne, je dois rater des choses ...
merci
bonne soirée
7 janv. 2010 à 18:55
}
echo 'envoi et données enregistrées, OK'
else { echo ' ça c pas bien passé :( ' }
par :
echo 'envoi et données enregistrées, OK';
}
else { echo ' ça c pas bien passé :( ' }
Notez bien les deux erreurs :
- le ; manquant
- le } mal placé (le premier echo fait partie du "if", il doit donc être avant l'accolade)
8 janv. 2010 à 02:53
voici le code:
<div id="formulaire" class="form">
<form " method="post" >
<fieldset >
<legend>Formulaire de contact, les champs * obligatoires !</legend> <br />
<table >
<tr><td width="150"> Nom : </td><td> <input name="nom" type ="text"/> * </td></tr>
<tr><td> Prénom : </td><td> <input name="prenom" type ="text"/> * </td></tr>
<tr><td> Téléphone : </td><td> <input name="tel" type ="text"/> * </td></tr>
<tr><td> Votre adresse mail : </td><td> <input name="email" type ="text"/> * </td></tr>
<tr><td> VILLE : </td><td> <input name="ville" type ="text"/> * </td></tr>
<tr><td> Code Postal : </td><td> <input name="CP" type ="text"/> * </td></tr>
<tr><td height="150"> Votre message: </td><td><textarea cols=55 rows=10 name="demande" type="text"> </textarea> * </td></tr>
<tr><td> </td><td> </td></tr>
<tr><td> <input type="text" name="premiernombre" value=" <?php echo rand(0,100); ?>" size="2" readonly="readonly" />
<input type="text" name="secondnombre" value=" <?php echo rand(100, 200);?>" size="2"readonly="readonly" />
<input type="text" name="troisiemenombre" value=" <?php echo rand(0, 200);?>" size="2" readonly="readonly" /></td>
<td> Question anti-robots : (pour eviter les spams des robots)</td></tr>
<tr><td> <input type="text" name="question" size="6" /></td><br />
<td> Recopiez les nombres contenus dans les 1er et 3e champs (ci-contre) <br />
l\'un a la suite de l\'autre dans le champ en dessous :</td></tr>
<tr><td> <input type="submit" name="envoyer" value="Envoyer"/></td><td><input type="reset" name="annuler" value="Effacer les champs"></td> </tr>
</table>
</fieldset>
</form>
<br /><br />
<?php
if(!empty($_POST))
{
$temp=array_map('trim', $_POST) ;
$post=array_map('htmlspecialchars', $temp) ;
$erreur='' ;
// Si on vient de valider le formulaire (sinon on fait rien)
if(!empty($_POST["nom"]))
$erreur.="Vous n'avez pas rempli le champ \"Votre Nom\".<br/>";
if(!empty($_POST["email"]))
$erreur.="Vous n'avez pas rempli le champ \"Votre adresse e-mail\".<br/>" ;
if(!empty($_POST["email"]) && !preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#', $_POST["email"]))
$erreur.="L'adresse e-mail que vous avez rentré est incorrecte.<br/>" ;
if(!empty($_POST["demande"]))
$erreur.="Vous n'avez pas rempli le champ \" Quel est votre message ? \".<br/>" ;
if($_POST["question"]!=$_POST["premiernombre"].$_POST["troisiemenombre"])
$erreur.="La réponse a la question anti-robots ne correspond pas a la réponse attendue !</a>" ;
}
if(!empty($erreur))
{
// On récupère les variables (sinon il va stocker des cases vides)
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$email=$_POST['email'];
$tel=$_POST['tel'];
$ville=$_POST['ville'];
$CP=$_POST['CP'];
$demande=$_POST['demande'];
if(mail('toto@yahoo.fr', stripslashes($_POST["demande"]), stripslashes("ultimatefrisbee : From M/Mmme ".$_POST["nom"].
":".$_POST["email"]." , Adresse IP : ".$_SERVER['REMOTE_ADDR']."\n
".$_POST["demande"]), "From: ".$_POST["email"]."\r\n
"."Reply-To: ".$_POST["email"]))
// ALORS -> connexion a la base
{ $db = mysql_connect('localhost', 'root', 'galere');
// sélection de la base
mysql_select_db('durdur',$db);
// insertion des variables $nom, $prenom... dans la base
$sql = "INSERT INTO contacts(id, nom, prenom, tel, email, CP, ville, demande) VALUES('','$nom','$prenom','$tel','$email',
'$CP','$ville','$demande')";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
mysql_close(); // on ferme la connexion
echo 'envoi et données enregistrées, OK';
}
else echo 'ATTENTION PROBLEME';
}
?>
</div>
Comment organiser et avec quelles instructions passer chacune des conditions l'une après l'autre, avant qu'il n'aille me stocker et envoyer un mail vide ???
merci pour votre concours
à demain
8 janv. 2010 à 12:22
if(!empty($erreur))
En effet, on doit envoyer le courrier s'il n'y a pas d'erreur, donc si la variable $erreur est vide. Je le remplacerai donc par :
if (empty($erreur))
Ceci explique pourquoi le courrier part lorsqu'il y a une erreur. A l'inverse, il aurai du vous afficher une erreur lorsque tout allait bien (puisque le test est à l'envers).
Je m'étais trompé quand je vous avais dit de remplacer les $post par $_POST : je n'avais pas vu la ligne $post = array_map(...);
Ceci dit le htmlspecialchars ne sert à rien ici. Normalement on l'utilise uniquement au moment d'afficher dans le navigateur. Vous, vous l'appliquez à quelque chose qui va être envoyé par courrier électronique et inséré dans la base, ce qui va perturber l'affichage de certains caractères (par exemple, htmlspecialchars transforme < en & l t ;).