Système d'inscription made in moi.

Eléphant du PHP | 75 Messages

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.

ViPHP
AB
ViPHP | 5818 Messages

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:

Eléphant du PHP | 75 Messages

03 avr. 2009, 16:38

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

VaN
Mammouth du PHP | 1107 Messages

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.

Eléphant du PHP | 75 Messages

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 ? :)

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

04 avr. 2009, 21:48

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

ViPHP
AB
ViPHP | 5818 Messages

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:

Eléphant du PHP | 75 Messages

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;	
		}
	}

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

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 ! ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 75 Messages

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.

Eléphant du PHP | 75 Messages

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. ;)

Eléphant du PHP | 75 Messages

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

08 avr. 2009, 17:11

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

Eléphant du PHP | 75 Messages

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é... :(