Vérification DB d'email

JeromeLG
Invité n'ayant pas de compte PHPfrance

16 nov. 2011, 17:02

Bonjour,

Je suis nul en php (suis designer :? ) et j'aimerais avoir des infos sur le problème suivant:

Je dois créer un formulaire avec plusieurs champs , lors ce que le gars pousse sur envoyer cela doit faire:

-un checkup dans une base de données existante, voir si l'adresse mail existe, si ce n'est pas le cas, ajouter les infos à la DB, si c’est le cas rien faire.
- un deuxième checkup dans une deuxième base de données, si l'adresse n'y est pas , la rajouter, si elle existe déjà , renvoyer le message: Déjà utilisé.

Pourriez-vous m'aider svp? Merci d'avance. :D

Jerome

Eléphant du PHP | 188 Messages

16 nov. 2011, 17:24

Salut !

Alors d'abord, est ce que ton formulaire est pret ?


Pour on premier point :

tu fait une recherche dans ta BDD banale (comme : "SELECT * FROM base WHERE mail=".$mail)
tu teste le nombre de réponses (si tu es avec PDO, c'est la fonction rowCount(); )
en fonction du nombre de réponse, tu fait une condition en if :
si il y a une réponses : ne rien faire
si il n'y en a aucune : tu fais un "INSERT ..." pour ajouter une nouvelle ligne avec l'e-mail de l'utilisateur


pour le deuxième point :
c'est presque la meme chose, sauf pour la condition finale :
si il n'y a pas de réponse : tu insert la nouvelle ligne
si il y a une réponse : tu informe l'utilisateur que l'email est deja utilisé ( avec "echo") et tu lui demande de recommencer (retour au formulaire)


voila pour la structure de l'algorithme, je reste là pour t'aider si tu as besoin :)

JeromLG
Invité n'ayant pas de compte PHPfrance

16 nov. 2011, 21:42

Tout d'abord merci de bien vouloir prendre de ton temps pour me répondre.

Pour ce qui est de mon formulaire pour l'instant il envoi un mail vers une adresse mail spécifique. Par la suite je dois vérifier cela manuellement et envoyer les mails.

étape 1: vérifier si email est présent dans BDD "X" si c TRUE alors on passe à l'étape suivante, si c false on rajoute les données.
étape 2: vérifier si email est présent dans BDD 'Y' si c TRUE on echo un message, si c FALSE alors on l'inclus dans la BDD "Y" .

mon formulaire actuel est comme ceci ( ce qui est inadéquat ):

<?php
if ($_POST["email"]<>'') {
$ToEmail = '[email protected]';
$EmailSubject = 'formulaire de demande ';
$mailheader = "From: ".$_POST["email"]."\r\n";
$mailheader .= "Reply-To: ".$_POST["email"]."\r\n";
$mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n";
$MESSAGE_BODY = "nom: ".$_POST["nom"]."<br>";
$MESSAGE_BODY = "prenom: ".$_POST["prenom"]."<br>";
$MESSAGE_BODY = "adresse: ".$_POST["adresse"]."<br>";
$MESSAGE_BODY = "numero: ".$_POST["numero"]."<br>";
$MESSAGE_BODY = "codepostal: ".$_POST["codepostal"]."<br>";
$MESSAGE_BODY .= "Email: ".$_POST["email"]."<br>";
$MESSAGE_BODY .= "ref: ".nl2br($_POST["ref"])."<br>";
mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure");
?>
<h5>Votre demande à été effectué</h5>
<h6>Vous recevrez bientôt un mail de confirmation</h6>
<?php
} else {
?>
<h5>Veuillez remplir le formulaire.</h5>
<form action="contact.php" method="post">
<table width="400" border="0" cellspacing="2" cellpadding="0">
<tr>
<td width="29%" class="bodytext">Nom:</td>
<td width="71%"><input name="name" type="text" id="name" size="32"/></td>
</tr>
<tr>
<td width="29%" class="bodytext">Prénom:</td>
<td width="71%"><input name="prenom" type="text" id="prenom" size="32"/></td>
</tr>
<tr>
<td class="bodytext">Email address:</td>
<td><input name="email" type="text" id="email" size="32"/></td>
</tr>
<tr>
<td width="15%" class="bodytext">adresse:</td>
<td width="55%"><input name="adresse" type="text" id="adresse" size="32"/></td>
<td width="15%" class="bodytext">Numero:</td>
<td width="15%"><input name="numero" type="text" id="numero" size="2"/></td>
</tr>
<tr>
<td width="29%" class="bodytext">code postal:</td>
<td width="71%"><input name="codepostal" type="text" id="codepostal" size="32"/></td>
</tr>
<tr>
<td width="29%" class="bodytext">reference:</td>
<td width="71%"><input name="ref" type="text" id="ref" size="32"/></td>
</tr>
<td class="bodytext">&nbsp;</td>
<td align="left" valign="top"><input type="submit" name="Submit" value="Envoyer"/></td>
</tr>
</table>
</form>
<?php
};
?>



Si tu pouvais me tuyauter un peu pour me dire ce qu'il faudrait faire ce serait super sympa ^^

Jerome

Eléphant du PHP | 188 Messages

16 nov. 2011, 23:20

Bon pour l'envoi de mail avec php je suis désolé mais je m'y connais absolument pas ! :( Mais je peux t'aider pour le reste ...
Les 2 verifications BDD, tu les fait a quel moment ? (après l'envoi de l'e-mail, juste après la reception du formulaire ...)
Pour le MySQL, tu bosse sous quoi ? PDO, MySQLi ?

Eléphant du PHP | 83 Messages

16 nov. 2011, 23:38

Pour l'envoi du mail, ça a l'air correct (à part qu'il manque des concaténations), mais qd tu testes (sur serveur, car je crois qu'en local, l'envoi de mail ne marche pas (et déjà que sur certains serveurs, ça ne marche pas...)), reçois-tu un mail ? Pour commencer fais un echo $MESSAGE_BODY.

JeromeLG
Invité n'ayant pas de compte PHPfrance

17 nov. 2011, 13:49

Lu,

En fait le code que j'ai envoyé c le formulaire que j'utilise pour l'instant :oops: (puisque mes connaissances en php sont très limités :( )
Mais en réalité j'aimerais qu'au lieu d'env un mail, il fasse un CHECK dans un tableau "X" de la BDD et rajoute si pas présent
ET puis un CHECK dans un tableau "Y" de la même BDD et rajoute si c pas présent. Si c déjà présent, echo un message quelconque.

Seulement je n'y arrive pas du tout puisque je ne sais même pas par ou commencer.
Donc, si qlq pouvait m'aider (me filer des petits bouts de code et/ou m'expliquer pkoi ça marche comme ça) ce serait SUPER :D

Le but étant d'ajouter les infos du formulaire (pour les newsletter et autres) dans la Tableau "X" et savoir qui à déjà participer pour le "concours" dans le tableau "Y".

Si c pas clair dites le moi :mrgreen:

En tout cas merci pour vos réponses!

Jerome

Eléphant du PHP | 83 Messages

17 nov. 2011, 14:31

Bon, donc il faut oublier l'envoi d'un mail et se concentrer sur les requêtes à envoyer à MySQL : sais-tu gérer une telle base en PHP ? Si tu ne sais pas, regarde cet exemple, sachant qu'il faut laisser tomber le paragraphe "affichage" (c'est avec MySQL, pas MySQLi ou PDO, mais justement, je ne connais que MySQL) ; et qd tu auras assimilé l'exemple, tu pourras appliquer l'algo que t'avait proposé Arthur77. (mais pour le nb de réponses en mysql, c'est "num_mysql_rows()")

Eléphant du PHP | 188 Messages

18 nov. 2011, 16:41

Re,

d'abord si tu n'a jamais utilisé de PHP &MySQL, je te conseille de partir sur de bonnes bases et de bosser avec PDO : les avantages sont multiples, et c'est le plus sécurisé et le plus récent, et il n'est pas plus compliqué.
Va faire un tour sur ce tuto : http://www.siteduzero.com/tutoriel-3-34 ... x-bdd.html
Ca t'aidera deja un peu à comprendre le fonctionnement de ce qu'on peu te proposer.

Ensuite, je peux t'aider à coder le code de traitement det "check" dans les BDD, mais dit précisement :
- les champs que tu doit vérifier et dans quelle base
- les champs que tu doit ajouter (s'il le faut) et dans qu'elle base

pour qu'on connaisse tes besoins avant de s'attaquer au code.

:)

JeromeLG
Invité n'ayant pas de compte PHPfrance

21 nov. 2011, 21:56

Re-lu à tous,

J’emploie Easyphp pour créer les BDD.
La BDD s'appelle "DBonix" et contient deux tableaux.
le 1er tableau se nomme "refutil" et contient les infos utilisateurs (9 colonnes: mail, nom, adresse, etc.)
Le 2ème tableau se nomme "salouto" et contient juste des adresse mail (1 colonne).

Formulaire contient:
- Nom (nom)
- Prénom (prenom
- Adresse (adresse)
- Numéro (num)
- Boite (boite)
- code postal (codepostal)
- localité (commune)
- Téléphone (tel)
- email (email)

Donc l'idée c'est d'utiliser formulaire et lorsque l'on presse envoi:

1. Faire un check dans "refutil" voir si l'adresse mail est présente.
- si NON alors il faut ajouter toutes les données dans "refutil".
- si OUI rien faire et passer à l'autre étape.

2. Faire un check de l'email dans "salouto":
- si il n'est pas présent ajouter toutes les infos dans "salouto"
- si il EST présent, echo un message: "Une seule participation par personne"

Voila je suis sur que cela est fort simple pour vous, mais pour moi c trop galère.
Me suis inscrit à des cours de PHP mais ça commence que dans quelques mois et j'en ai besoin assez rapidement...

Si vous pouviez m'aider se serait génial, merci d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 nov. 2011, 06:38

Salut,

En plus du premier lien je te conseil celui cihttp://phpdebutant.org/article63.php ainsi que les suivants.

Tu valide les infos du formulaire normalement (notamment avec filter_var() par exemple) et ensuite deux cas identique sur le principe :
- sélection du nombre d'émail dans la table qui va bien.
Perso je te conseil d'utiliser la fonction count de Sql Plutot que rowcount() (pas besoin de récupérer 400 tuples si un seul suffit ;) )
- si le nombre égale zéro insertion dans la base

La seule c'est qu'il te faut une connexion et une déconnection du sgbd (à priori mysql dans ton cas ?)

Question simple est ce que tu ne confondrais pas base de données et table ?
Une base de données, pour mysql, c'est l'organisation d'une ou plusieurs table en un "ensemble" cohérent (normalement) et "étanche" des autres.

Sur phpdebutant tu peux lire les cours qui viennent après celui indiqué (vivement conseillé ;) )

@+
Il en faut peu pour être heureux ......

JeromeLG
Invité n'ayant pas de compte PHPfrance

22 nov. 2011, 14:20

Salut,

En plus du premier lien je te conseil celui cihttp://phpdebutant.org/article63.php ainsi que les suivants.

Tu valide les infos du formulaire normalement (notamment avec filter_var() par exemple) et ensuite deux cas identique sur le principe :
- sélection du nombre d'émail dans la table qui va bien.
Perso je te conseil d'utiliser la fonction count de Sql Plutot que rowcount() (pas besoin de récupérer 400 tuples si un seul suffit ;) )
- si le nombre égale zéro insertion dans la base

La seule c'est qu'il te faut une connexion et une déconnection du sgbd (à priori mysql dans ton cas ?)

Question simple est ce que tu ne confondrais pas base de données et table ?
Une base de données, pour mysql, c'est l'organisation d'une ou plusieurs table en un "ensemble" cohérent (normalement) et "étanche" des autres.

Sur phpdebutant tu peux lire les cours qui viennent après celui indiqué (vivement conseillé ;) )

@+

Merci pour ce lien cela m'as permis d'y voir un peu plus clair, malgré cela je n'y arrive pas encore mais pitêtre qu'avec un peu plus d'expérience...
Je vous envoi le code que je bidouille ce soir et on verra ce que vous en pensez ^^

Eléphant du PHP | 188 Messages

22 nov. 2011, 18:44

Tu utilise quel SGBD pour ta base ? (MySQL, ProgreSQL ...)
Quel mode de connexion ? (PDO, MySQLi ...)