Système d'inscription made in moi.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Système d'inscription made in moi.

par JeanJean » 08 avr. 2009, 18:41

Même pas... :/ En regardant dans ma boîte d'hébergeur free j'avais un email : Undelivered Mail Returned to Sender. :/

Puis sur Google, j'ai rien trouvé... :(

par albat » 08 avr. 2009, 17:11

Une question, pourquoi ça marche pas sur WLM et ça marche ailleurs ? o_O
Pas parti dans les spams ?

par JeanJean » 08 avr. 2009, 16:37

Un peu marre de m'aider ? :p

Bon, bon, j'ai vu quelque chose, j'avais un doute sur la fiabilité de la boîte mail Live.

J'ai eu raison de tester parce que avec une autre boîte mail, je recois bien le mail.

Une question, pourquoi ça marche pas sur WLM et ça marche ailleurs ? o_O

par contre, pour l'inscription dans la table, rien a changé... :/ J'ai toujours rien dans la table... :/

Merci de m'aider. ;) Et d'être aussi patient. :D

par JeanJean » 07 avr. 2009, 08:37

Me revoilà. :D

Je vous présente le code final, enfin normalement. Sauf que ça bug encore un peu. :p
<form method="POST">
 
    <p class="normalgris"><strong>Formulaire d'inscription : </strong>
    </p><br/>
    <span class="petitvert">Pseudonyme : </span>
    <div id="champs"><input name="Pseudonyme" type="text"/></div><br />
    <span class="petitvert">Mot de Passe : </span>
    <div id="champs"><input type="password" name="Mdp"  /></div><br />
    <span class="petitvert">Confirmation du mot de passe :</span><br />
    <div id="champs"><input type="password" name="Confirmation_mdp" /></div><br />
    <span class="petitvert">Adresse e-mail : </span>
    <div id="champs"><input type="text" name="Email" /></div><br />
    <span class="petitvert">Confirmtion de l'adresse e-mail : </span>
    <div id="champs"><input type="text" name="Confirmation_Email" /></div><br /><br/>
    <input name="validation" type="submit" value="S'enregistrer" />
	</form>

<?php
/* Identification SQL */
$serv  = "";
$login = "";
$pass  = "";
/* ================== */
 
/* ================================ SYSTEME ================================= */
if (isset($_POST['Pseudonyme']) && isset($_POST['Mdp']) && isset($_POST['Confirmation_mdp']) && isset($_POST['Email']) && isset($_POST['Confirmation_Email'])) {
	/* Affectation Variables */
	$pseudo         	= $_POST['Pseudonyme'];
	$mdp 			    = $_POST['Mdp'];
	$confirmation_mdp   = $_POST['Confirmation_mdp'];
	$email              = $_POST['Email'];
	$confirmation_email = $_POST['Confirmation_Email'];
	$erreur             = null;
	/* Si verif different de true alors switch est utiliser pour afficher le type d'erreur */
	if((verif($pseudo,$mdp,$confirmation_mdp,$email,$confirmation_email)) !== true){
		switch ($erreur = verif($pseudo,$mdp,$confirmation_mdp,$email,$confirmation_email,$erreur)){ 
		case 1: /* Erreur Mail */
			erreur("Votre adresse email n'est pas valide.");
			break;
		case 2: /* Erreur Mdp ou Email */
			erreur("Vous n'avez pas entrer deux mot de passe identique, ou, deux adresses emails identiques.");
			break;
		case 3: /* Erreur champs vides */
			erreur("Un ou plusieurs champ du formulaires sont vides.");
			break;	
		}
	}
	else{
		if(($mysql_connexion = connect_sql($login,$pass,$serv)) !== false){
			mysql_select_db ('Membres');
				$sql = "SELECT Pseudonyme, Email FROM Membres WHERE Pseudonyme = '".$_POST['Pseudonyme']." OR Email ='".$_POST['Email']."";
				$exe = mysql_query($sql);
				if(!$exe){
					$message ="Une erreur s'est produite lors de la création de votre compte.";
				}else{
					if(mysql_num_rows($exe) > 0){
						while($row = mysql_fetch_array($exe)){
             				if($_POST['Pseudonyme'] == $row["Pseudonyme"]){
               					$message = "Ce nom d'utilisateur est déjà utilisé.";
			 				}
             				elseif($_POST['Email'] == $row["Email"]){
                   				$message = "Cette adresse email est déjà utilisé.";
			 				}
						}
					}else{
						$cle = sha1(microtime(TRUE)*100000);
					}
				}
			$compte = mysql_query("INSERT INTO Membres(Pseudonyme, Mdp, Email, Clef) VALUES ('" . $_POST['Pseudonyme'] . "', '" . sha1($_POST['Mdp']) . "', '" . $_POST['Email'] . "', '" . time() . "', '" . $Clef . "");
			if((email_confirm($email,$pseudo,$cle)) !== false){
				echo "Email confirmation : Envoyer";
			}
		}else {
			echo "Erreur Connection SQL";
		}
	} 
}
 
/* FONCTIONS */
 
function erreur($erreur){
	echo("Erreur : ".$erreur."");
}
 
function verif($pseudo,$mdp,$confirmation_mdp,$email,$confirmation_email){ 
    if(!empty($pseudo) && !empty($mdp) && !empty($confirmation_mdp) && !empty($email) && !empty($confirmation_email)){ 
        if(($mdp == $confirmation_mdp) && ($email == $confirmation_email)){ 
            if(preg_match("#[a-z0-9]{2,30}@[a-z0-9]{2,30}.[a-z]{0,10}#",$email)){ 
                return true; 
            } 
            return 1; 
        } 
        return 2; 
    } 
    return 3; 
}
 
function connect_sql($login,$pass,$serv){
		if($mysql_connexion = mysql_connect($serv,$login,$pass)){
			return $mysql_connexion;
		}
	return false;
}
 
function email_confirm($email,$cle,$pseudo){
	$titre = "Activation de votre compte membre sur J.Newb.";
 
	$message = "Bienvenue parmis nous. :) 
 	Pour activer votre compte, c'est très simple, il vous suffit de cliquer sur le lien ci-dessous et votre compte sera activé immédiatement. 
 	http://jnewb.free.fr/activation.php?log='.urlencode($pseudo).'&cle='.urlencode($cle).'
 	A très bientôt sur J.Newb.
 	------------------------
 	Ceci est un message automatique, merci de ne pas y répondre.";
	if(mail($email,$titre,$message)){
		return true;
	}
	return false;
 
}
 
/* ================================= END =============================== */
?>
[img=http://img8.imageshack.us/img8/6527/sanstitreevr.th.jpg]

Enfaite, quand j'envoie mon formulaire avec la page inscription.php j'ai le message suivant : Email confirmation : Envoyer. Mais je ne reçois pas de mail, et dans la table, je ne vois aucun compte de crée... :/


Ty. ;)

par JeanJean » 05 avr. 2009, 19:10

Les deux c'est Email. :D

Et si à la place de $adresse, je mettais $email, ce serait pas mieux ? :D
	$email              = $_POST['Email'];
Ca éviterai d'avoir deux fois
= $_POST['Email'];
Edit : Mais je tombe toujours sur : Warning: mail() [function.mail]: Invalid mail. to = [] in /mnt/102/sda/4/3/jnewb/inscription.php on line 168.

par Ryle » 05 avr. 2009, 18:52

Ta fonction verif() test la valeur de la variable $email... mais ne te donne pas d'info sur la variable $adresse...

Ta variable $adresse contient la valeur de $_POST['Email'], que contient $email ?

(J'ai pas vérifié, mais si jamais l'une d'entre elle contient $_POST['Email'] et l'autre $_POST['email'], je trouve ton adresse et vient te botter les fesses ! ;))

par JeanJean » 05 avr. 2009, 17:37

Il serait peut-être judicieux de tester la valeur de $_POST['Email'] avant de l'affecter à la variable $adresse .
Hum... Normalement c'est vérifié ici, non ?



/* Si verif different de true alors switch est utiliser pour afficher le type d'erreur */
	if((verif($pseudo,$mdp,$confirmation_mdp,$email,$confirmation_email)) !== true){
		switch ($erreur = verif($pseudo,$mdp,$confirmation_mdp,$email,$confirmation_email,$erreur)){ 
		case 1: /* Erreur Mail */
			erreur("Votre adresse email n'est pas valide.");
			break;
		case 2: /* Erreur Mdp ou Email */
			erreur("Vous n'avez pas entrer deux mot de passe identique, ou, deux adresses emails identiques.");
			break;
		case 3: /* Erreur champs vides */
			erreur("Un ou plusieurs champ du formulaires sont vides.");
			break;	
		}
	}

par AB » 05 avr. 2009, 05:15

Ouai, mais je prefere moi même coder la chose. :d
C'est tout à ton honneur.
Mais avant d'apporter son grain de sel, encore faut-il connaître le goût du sel :wink:

par albat » 04 avr. 2009, 21:48

Il serait peut-être judicieux de tester la valeur de $_POST['Email'] avant de l'affecter à la variable $adresse .

par JeanJean » 04 avr. 2009, 20:28

Merci VaN, j'ai corrigé la table. :)

Sinon, j'ai un soucis.

Avec la fonction Mail(), j'ai cette erreur :

Code : Tout sélectionner

Warning: mail() [function.mail]: Invalid mail. to = [] in /mnt/102/sda/4/3/jnewb/inscription.php on line 169
Voilà la partie réserver pour l'envoi d'un mail. :)
	$adresse = $_POST['Email'];
	$titre = "Activation de votre compte membre sur MONSITE";
	$message = "Bienvenue parmis nous. :) 
 
	Pour activer votre compte, c'est très simple, il vous suffit de cliquer sur le lien ci-dessous et votre compte sera activé immédiatement. 
 
	http://MONSITEr/activation.php?log='.urlencode($pseudo).'&cle='.urlencode($cle).'
 
	A très bientôt sur MONSITE.
 
	------------------------
 
	Ceci est un message automatique, merci de ne pas y répondre."; 	
	
	mail($adresse, $titre, $message);
	
/* ================================= END =============================== */
Voilà, merci. ;)

Edit : @VaN : Les '0','1' de enum, je les remplace par quoi ? :)

par VaN » 04 avr. 2009, 13:43

Image
Si je peux apporter ma petite pierre à l'édifice : Changes le type du champ "Compte_activé" : ENUM(0,1) ça fait vraiment pas propre, utilise plutot BOOL. C'est un booléen. il prend donc soit 0 soit 1 en valeur, et ce type de variable est parfait pour tout ce qui est statut (activé, désactivé). Et je conseillerai également de virer l'accent dans le nom du champ.

par JeanJean » 03 avr. 2009, 16:38

Ouai, mais je prefere moi même coder la chose. :d

par AB » 03 avr. 2009, 13:09

Et puis n'oublies pas de traiter tes variables avec une fonction Verif_magicquotes comme dans le tuto. Cela permettra à ton script de fonctionner, quelque soit la configuration du serveur, dans le cas où le visiteur rentrerait une quote (') dans son pseudo par exemple. Car même si la recommandation actuelle PHP5 est de désactiver les magic quotes (dans ce cas ton script fonctionnerait correctement) de nombreux hébergeurs mutualisés - sans oublier les gratuits comme free par exemple - activent les magic-quotes pour rester compatibles avec les "vieux" scripts.

Le plus simple pour avancer de manière constructive aurait été que tu fasses fonctionner le code du tuto correctement (le script est fonctionnel) et qu'ensuite tu le modifies pour faire ce que tu veux. Tu aurais appris beaucoup plus vite :wink:

par JeanJean » 03 avr. 2009, 09:24

Ok ok. :D

Alors ne vous inquiétez pas, je ne suis pas mort, je suis en pleine refonte du code PHP avec pleins de commentaires, un code plus claire etc... D'ailleurs je refait la partie MySQL proprement. :)

Je vous pond le machin dès que c'est finit. Si jamais j'ai des problèmes je vous en ferait part. :p

Bonne journée.

par Ryle » 01 avr. 2009, 10:56

Ouais, alors pour le message "Erreur général" t'as pas d'excuse.... je t'ai expliqué comment trouver pourquoi tu as ce message :
- Tu affiches ce message dans le switch lorsque tu es sous la clause default. Il faut donc vérifier dans quelle condition tu arrives dans le default.
- Tu es dans le défault quand la valeur testée est différente de 1, 2 et 3 (les 3 cases que tu as définis). Il faut vérifier sous quel condition ta valeur est différente de celle prévue.
- La valeur du switch dépend de ce que retourne la fonction verif(). Il faut vérifier ce que retourne la fonction verif()
- La fonction verif() retourne 1, 2 ou 3 en cas d'erreur et 0 en cas de succès.

=> Ton default ne devrait donc pas afficher une "Erreur général", mais au contraire gérer un succès de la vérification.

Ceci étant, je te prierais de bien vouloir prendre une règle dans la main droite et de violement t'assenner un coup sur les doigts de la main gauche ;)


Autre point : tu as une requête pour vérifier l'existence de l'utilisateur en base :
$requete = "SELECT count(*) as nb FROM Membres Where Pseudonyme = '".$nom."'"; 
sauf qu'à aucun moment dans ton code, on ne voit apparaitre la variable $nom


Enfin, il faut rester logique et pas appliquer nos remarques n'importe comment sans se poser de question. Quand je te dis que $Pseudo n'est pas la même chose de $pseudo, il ne faut pas nécessairement renommer toutes tes variables php qui contienne "pseudo" (incluant $_POST['Pseudonyme']).

Tu as un formulaire dans lequel tu as un champ texte. Ce champ texte s'appelle "Pseudonyme" (<input name="Pseudonyme" ... >). Lorsque tu soumets ton formulaire via la méthode post, php va récupérer la valeur de ce champ dans la variable $_POST['Pseudonyme'].
A partir de là, tu récupères la valeur contenue $_POST['Pseudonyme'] et tu la stocke sdans une variable de ton choix (ici tu l'as appellé $Pseudo). Si a la place tu demandes à php la valeur de $_POST['pseudo'], forcément, elle sera vide.
De la même manière, le champ nommé Mdp sera dans $_POST['Mdp'], pas dans $_POST['mdp'], etc. Il faut absolument rester cohérent, php ne tolère pas l'à peu près :)

Ah, et pour finir, vire moi ce test : if ($$Pseudonyme === true) qui ne correspond absolument à rien.... Si tu insères l'utilisateur dans ta base, tu le mets également en session, y a pas de contrôle à faire, à part au mieux, vérifier que l'insertion s'est bien passée... ;)