Validation par email

Eléphanteau du PHP | 28 Messages

10 juin 2008, 10:47

Bonjour,

Je cherche a faire une validation par email pour les utilisateurs puissent devenir membre. J'ai passablement de petit problème, notamment au niveau de la fonction mail, elle l'accepte pas comme je l'ai écrit. Si quelqu'un pouvait m'aider?


Code : Tout sélectionner

<? if(isset($pseudo)) { if(isset($newsl)) $news=1; else $news=0; $chaine = "abcdefghijklmnopqrstuvwxyz0123456789"; $Validation = str_shuffle($chaine); $message = 'Cher '.$pseudo.','; $message .= 'Ceci est un mail automatique de confirmation d\'inscription au site de l\'Escobar'; $message .= 'Pour confirmer et ainsi terminer l\'inscription à votre compte, veuillez cliquer sur le lien de confirmation: '; $message .= 'http://127.0.0.1/escobar/index.php?page=valid.php?pseudo='.str_replace(' ','%20',$pseudo); $RequeteInsertionPersonne = "INSERT INTO personne VALUES('', '".addslashes($nom)."', '".addslashes($prenom)."', '".addslashes($pseudo)."', '".addslashes($passe)."', '".addslashes($tel)."', '".addslashes($mail)."', '$news', '$Validation')"; $result = mysql_query($RequeteInsertionPersonne); if($result) mail($mail,'Confirmation d\'inscription au site de l\'Escobar',$message); echo "Bravo, ton inscription a été validée"; else echo "une erreur est survenue, merci de réessayer plus tard."; } else { ?> <h3>Bienvenue sur la page d'inscription de l'Esco-Bar</h3> <br><br> <form name="inscription" action= "javascript:verifChamps();"; enctype="application/x-www-form-urlencoded" method="post"> <fieldset> <legend><b>Création du compte</b></legend> <table> <tr></tr> <tr> <td>Nom : </td> <td><input type="text" size="30" name="nom"></td> </tr> <tr> <td>Prenom : </td> <td><input type="text" size="30" name="prenom"></td> </tr> <tr> <td>Pseudo : *</td> <td><input id="pseudo" type="text" size="30" name="pseudo"></td> </tr> <tr> <td>Mot de passe : *</td> <td><input id="pass" type="password" size="30" name="passe"></td> </tr> <tr> <td>Telephone :</td> <td><input type="text" size="30" name="tel"></td> </tr> <tr> <td>Email : *</td> <td><input type="text" id="mail" size="30" name="mail"></td> </tr> <tr> <td>M'inscrire à la newsletter :</td> <td><input name="newsl" type="checkbox"></td> </tr> <tr> <td></td> <td><input type="submit" value="m'inscrire"></td> </tr> </table> <br></br> <small>Les champs marqués d'un * sont obligatoires.</small> </fieldset> </form> <? } ?>
Et voici ma page validation

Code : Tout sélectionner

<? include 'variables.inc.php'; // Connexion à la base de donnée $mysql_connect=mysql_connect($hostddb,$loginddb,$passddb); mysql_select_db($baseddb, $mysql_connect); $RequeteModifValid = mysql_query("UPDATE personne SET Validation ='1' WHERE pseudo ='$_GET[pseudo]'") or die ('erreur : '.mysql_error()); echo 'Votre compte est validé, cliquez <a href="bienvenu.php">ici</a> pour vous connecter<br>'; ?>

Eléphanteau du PHP | 39 Messages

10 juin 2008, 16:32

Je te conseil dans un premier temps de faire un echo de ta requete, pour voir ce qui passe et ce qui ne passe pas et de décomposer certaines choses dans ta requête.

pourrai tu nous montrer le résultat précis de ta requête et ce tu attends de cette requête.

:pouce:
C'est en forgeant qu'on se forge

Eléphanteau du PHP | 28 Messages

10 juin 2008, 16:47

Salut,

J'ai pu faire quelque modification, ma requête fonctionne maintenant, mais j'ai un problème avec la fontion mail(). Je dois apparement aller modifier mon fichier php.ini mais je sais pas trop comment le faire, voici mon message d'erreur.

Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in c:\users\nasbe\desktop\site\subscribe.php on line 70

Mammouth du PHP | 1353 Messages

10 juin 2008, 16:51

Beaucoup de sujets sur le forum avec cette erreur.... exemple:
Il se peut que ton script ne fonctionne pas en local. C'est ce qui m'arrive fréquemment...du coup, je transfère mes scripts d'envoi de mail sur le serveur pour les tester...en envoyant toujours à moi-même comme destinataire, dans un premier temps...pour ne pas laisser un internaute spammer (ou alors protège ta page, pour le temps du développement, par un .htaccess).

L'intérêt est de tester ce qui se passe réellement.
En attendant, en local, tu affiche le texte de l'e-mail au lieu de la commande mail().

Sinon, comme parade, au lieu de la simple fonction mail() de PHP, j'utilise HTMLMimeMail de PHPGuru.org.(version PHP5). Il s'agit de scripts PHP déjà écrits, à télécharger, avec des exemples de comment utiliser ces scripts.
Basiquement, cela te permet d'envoyer un email, et dans les paramétrages, tu peux mettre un SMTP (même réglage que dans ton logiciel de messagerie email, celui de ton fournisseur internet). Ainsi je peux tester en local l'envoi de mail. Sinon, je transfère mes scripts sur le serveur.
Il est difficile d'envoyer des mails en local, donc si tu peux tester sur serveur ca sera plus simple
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 39 Messages

10 juin 2008, 16:56

je ne suis pas sure que la syntaxe de ta fonction mail() est bonne

perso j'ai toujours fait comme ça :
mail($adresse_dest,$sujet,$texte,"From: $adresse_exp\nreplyTo: $adresse_exp");
C'est en forgeant qu'on se forge

Mammouth du PHP | 1353 Messages

10 juin 2008, 17:04

La fonction mail() de php peut avoir besoin de header mais cela dépend si ils sont définis ou non dans le php.ini.
Chaîne à insérer à la fin des en-têtes du mail.

Ce paramètre est typiquement utilisé pour ajouter des en-têtes supplémentaires (From, Cc et Bcc). Les en-têtes supplémentaires doivent être séparés par un caractère CRLF (\r\n).

Note: Lors de l'envoi d'un mail, le mail doit contenir un en-tête From. Il peut être défini par le paramètre additional_headers , ou un par défaut peut être défini dans le php.ini.
Ne pas faire ceci causera un message d'erreur similaire à Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing. L'en-tête From définit également l'en-tête Return-Path sous Windows.
Il aura peut etre cette erreur une fois en ligne, selon le php.ini de son hébergeur... mais l'erreur smtp c'est pour autre chose ;)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 28 Messages

10 juin 2008, 17:09

Ok c'est tout bon, j'ai modifier le smtp dans le fichier php.ini. Au lieu de smtp = localhost, j'ai mis smtp = smtp.fai.fr. Merci encore a guilt pour ton aide. J'ai un autre petit problème, je vais essayer de le décortiquer seul, si j'ai un problème je reviendrai faire un tour :D . Bonne journée.

Mammouth du PHP | 1353 Messages

10 juin 2008, 17:35

Pour ton autre problème regarde du coté des headers comme le suggérait nass ;)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Mammouth du PHP | 959 Messages

10 juin 2008, 17:44

Sinon, au lieu de faire :
str_replace(' ','%20',$pseudo)
il serait préférable de faire :
urlencode($pseudo)
;)

Eléphanteau du PHP | 28 Messages

10 juin 2008, 21:14

Salut, j'ai essayer de me debrouiller tout seul mais j'ai passablement de peine. Voici mon code

Code : Tout sélectionner

<? if(isset($pseudo)) { if(isset($newsl)) $news=1; else $news=0; $nom = $_REQUEST['nom']; $prenom = $_REQUEST['prenom']; $pseudo = $_REQUEST['pseudo']; $passe = $_REQUEST['passe']; $tel = $_REQUEST['tel']; $mail = $_REQUEST['mail']; $chaine = "abcdefghijklmnopqrstuvwxyz0123456789"; $Validation = str_shuffle($chaine); $message = 'Cher '.$pseudo.','; $message .= 'Ceci est un mail automatique de confirmation d\'inscription au site de l\'Escobar '; $message .= 'Pour confirmer et ainsi terminer l\'inscription à votre compte, veuillez cliquer sur le lien de confirmation: '; $message .= 'http://127.0.0.1/escobar/index.php?page=valid'; $RequeteInsertionPersonne = "INSERT INTO personne VALUES('', '".addslashes($nom)."', '".addslashes($prenom)."', '".addslashes($pseudo)."', '".addslashes($passe)."', '".addslashes($tel)."', '".addslashes($mail)."', '$news', '$Validation')"; echo "Vos paramètre sont enregistrés, vous allez recevoir un email afin de valider l'inscription"; $result = mysql_query($RequeteInsertionPersonne); if($result) mail($mail,'Confirmation d\'inscription au site de l\'Escobar',$message); else echo "une erreur est survenue, merci de réessayer plus tard."; } else { ?>

L'insertion dans la table ce fait correctement, le mail je le recois.
Voici le code de la page de validation

Code : Tout sélectionner

<? include 'variables.inc.php'; // Connexion à la base de donnée $mysql_connect=mysql_connect($hostddb,$loginddb,$passddb); mysql_select_db($baseddb, $mysql_connect); $RequeteModifValid = mysql_query("UPDATE personne SET Validation ='1' WHERE pseudo ='$_GET[pseudo]'") or die ('erreur : '.mysql_error()); echo 'Votre compte est validé, cliquez <a href="index.php">ici</a> pour vous connecter<br>'; ?>
c'est lorsque je clique sur le lien j'ai le message d'erreur suivant.

Notice: Undefined index: pseudo in c:\users\nasbe\desktop\site\valid.php on line 8
Votre compte est validé, cliquez ici pour vous connecter


Je ne sais pas comment récupérer le pseudo si quelqu'un peut m'aider?
[/code]

Mammouth du PHP | 1353 Messages

11 juin 2008, 11:38

Il faut que tu mettes un "&" dans ton url entre les deux valeurs et non pas un ?:

$message .= 'http://127.0.0.1/escobar/index.php?page=valid.php&pseudo='.str_replace(' ','%20',$pseudo);

Ceci dit ca n'est pas très sécurisé.Il vaurdrait que tu passes dans l'url par exemple le pseudo + le code validation et à ce moment la tu pourras faire :

Code : Tout sélectionner

"UPDATE personne SET Validation ='1' WHERE pseudo ='".$_GET[pseudo]."' AND Validation='".$_GET["code_validation"]."'"
Sinon tu pourrais faire ca avec un code unique mais ton str_shuffle risque de donner plusieurs fois la même chose donc le coupler avec le pseudo permet d'avoir une valeur unique.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 28 Messages

11 juin 2008, 12:01

C'est nickel, ca marche parfaitement, merci encore pour votre aide, bonne fin de journée.