Inscription / login

Mammouth du PHP | 965 Messages

19 févr. 2006, 21:12

<?

require ("connect.php");

$pseudo=$_POST['pseudo'];
$password=$_POST['password'];
$password2=$_POST['password2'];
$email=$_POST['email'];
$email2=$_POST['email2'];

$ress=mysql_query("SELECT * FROM `art` WHERE nom='$pseudo' and email='$email' ");
$existe=mysql_num_rows($ress);

if($pseudo!="" && $password!="" && $password2!="" && $email!="" && $email2!="")
{

	if($password==$password2 && $email==$email2)
		{

			if(!$existe)
				{

				$sql = "INSERT INTO art (nom,mdp,email) VALUES ('".$pseudo."','".$password."','".$email."')";

				$test = mysql_query($sql) or die("erreur ! ".mysql_error());


				echo "<br>Votre nom a été ajouté a la base de donnée";

				}else{
					header("location: inscription.php?erreur3");
					}
		}else{
			header("location: inscription.php?erreur2");
			}

}else{
	header("location: inscription.php?erreur1");
	}


?>
pour la partie script et :
<?
										if(isset($_GET['erreur1']))
											{
											echo "<tr><td class=\"td5\" colspan=\"2\">remplissez tout les champs !</td></tr>";
											}
											if(isset($_GET['erreur2']))
											{
											echo "<tr><td class=\"td5\" colspan=\"2\">mot de passe ou email mal retranscrits !</td></tr>";
											}
											if(isset($_GET['erreur3']))
											{
											echo "<tr><td class=\"td5\" colspan=\"2\">nom ou email déjà enregistrés !</td></tr>";
											}
									?>
voila je pense que c'est correct ! :wink: [/code]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 févr. 2006, 21:20

Le script fait ce que tu attends le lui donc c'est tout bon :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 965 Messages

19 févr. 2006, 22:57

j'ai voulu tester ma fonction mail() en local mais il me marque l'erreur suivante :
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()
est ce que sa viens de moi ?

Mammouth du PHP | 19672 Messages

19 févr. 2006, 23:15

Si tu n'as pas de serveur SMTP sur ta machine (ce qui est très probablement le cas), il te faut configurer ton php.ini en mettant l'adresse du serveur STMP de ton FAI, exemple smtp.wanadoo.fr ou smtp.free.fr
Enregistre, redémarre Apache et teste à nouveau.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

21 févr. 2006, 20:50

Merci Cyrano
pour ton aide j'ai reussi a m'envoyer des emails en local, j'peux faire croire que j'ai des amis maintenant :D

Plus sérieusement j'ai fais sa pour envoyer le message !
$message = "Bienvenue !

Votre nom est : ".$pseudo."
Votre pass est :".$password."

pour vous connecter sur le site et acceder a votre profil vous devez d'abord cliquer sur le lien suivant :
http://localhost/ketalombre/inscription.php?".$pseudo;
Questions securité c'est pas top, puisque le gars a juste a mettre l'URL et son pseudo sans passer par sa boite mail s'il sais comment faire, donc en fait j'aimerais bien faire en sorte que sa verrifie que le lien viens bien de la boite mail avec le bon pseudo sans que ce soit trop simple a decrypter.

Je vois pas trop comment faire ou m'orienter a vrai dire

:oops: :oops:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 févr. 2006, 22:05

c'est un mail d'activation de compte cela sous-entend donc que la personne est enregistrée mais que son compte n'est pas actif.

si une personne saisit cette URL avec un pseudo ne change rien au faite d'apporter des verifications pour l'existence du pseudo dans la BD.
Donc que la verification se fasse après le clic sur le lien ou suite a la saisie directement dans la barre d'adresse revient au même.

en clair, que l'adresse soie visible ou non ne change rien. Pour que l'adresse ne soie pas directement en brut tu peux envoyer un mail au format html et donc inclure des balises <a>, il y a des exemples ans la doc

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

22 févr. 2006, 00:50

Un truc que j'ai fait pour un courriel d'activation, c'est ajouter un paramètre à l'url : ce paramètre est un md5 de certains éléments présents dans l'url elle-même plus un autre élément secret qui est dans la fiche d'inscription qui est dans la base : si l'internaute modifie quoique ce soit dans l'url, elle sera faussée et l'activation ne se fera pas.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

23 févr. 2006, 19:41

un md5 ?

moi je pensais a mettre l'id du dernier element enregistré ou l'id du nom je sais pas quelque chose comme sa, j'sais pas trop quand j'envois un :
$id = mysql_insert_id();
il me renvois toujours 0 comme numero pourtant juste apres mon insert SQL du nom et du reste ...

je comprends pas trop

Mammouth du PHP | 19672 Messages

23 févr. 2006, 20:50

Bon, je vais prendre un exemple qui sera plus clair : suppose que je m'inscris. Tu envoies un courriel avec un lien d'activation, mais ce lien comporte des paramètres, ce qui donnerait pour la création du lien:
<?php
$pseudo = "Cyrano";
$chaine_hachee = md5("CyranoNomPrenom");
$url = "<a href=\"http://mon_site.com/activation.php?pseudo=". $pseudo ."&cle=". $chaine_hachee ."\">Activez votre compte</a>";
echo($url);
?>
La dernière ligne n'est là que pour l'illustration, la variable serait à intégrer dans le message : Mais la chaine serait alors :

Code : Tout sélectionner

<a href="http://mon_site.com/activation.php?pseudo = Cyrano&cle=1226df9e32737581a163e2f22212e486">Activez votre compte</a></body>
Ce qui va simplement afficher
Activez votre compte
Dans la page de réception, ici, activation.php, tu récupères les deux paramètres. Avec le premier, tu vas récupérer le nom et le prénom correspondant avec une requête SQL. Tu reconstitues ensuite la chaine qui a servi à créer la clé et tu la haches de la même manière, puis tu compares avec le second paramètre envoyé.

Changer le pseudo rendra la clé invalide, et changer un caractère de la chaine hachée ne correspondra plus au pseudo : possibilité d'usurpation quasiment nul.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

23 févr. 2006, 21:55

ok donc j'ai rajouter sa :
$chaine_hachee = md5($_POST['pseudo']);
j'ai ajouter cette valeur en fin de table a ID :
	$sql = "INSERT INTO art (nom,mdp,email,ID) VALUES ('".$pseudo."','".$password."','".$email."','".$chaine_hachee."')";
				$test = mysql_query($sql) or die("erreur ! ".mysql_error());
puis je creer mon mail :
				$adresse = $email;
					$titre = "Inscription au generateur de son";
					$headers="From: Admin : Generateur de son !\n";
					$message = "Bienvenue !

Votre nom est : ".$pseudo."
Votre pass est : ".$password."

pour vous connecter sur le site et acceder a votre profil vous devez d'abord cliquer sur le lien suivant :
http://localhost/ketalombre/validinscription.php?".$chaine_hachee;

				mail($adresse,$titre,$message,$headers);
mais ce que je comprends pas c'est qu'il m'affiche cette erreur la a nouveau alors que j'ai bien verrifier php.ini et tout marchais avant que je mette le champ en plus et le md5 ...
Warning: mail(): Failed to connect to mailserver at "smtp.wanadoo.fr" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in c:\program files\easyphp1-8\www\ketalombre\verifinscription.php on line 37

Mammouth du PHP | 19672 Messages

23 févr. 2006, 22:21

Tu as pas besoin de stocker cette chaine hachée dans la base, elle ne sert qu'une fois au moment de l'activation, c'est polluer ta base d'une donnée inutile. L'idée, c'est juste d'empécher la manipulation de la chaine dans l'url.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

23 févr. 2006, 22:25

en fait sois c'est moi qui n'aie rien compris sois c'est moi qui aie mal expliquer :D

en fait j'ai fais sa pour être clair :
<?

require ("connect.php");

$pseudo=$_POST['pseudo'];
$password=$_POST['password'];
$password2=$_POST['password2'];
$email=$_POST['email'];
$email2=$_POST['email2'];

$ress=mysql_query("SELECT * FROM `art` WHERE nom='$pseudo' and email='$email' ");
$existe=mysql_num_rows($ress);
$chaine_hachee = md5($_POST['pseudo']);

if($pseudo!="" && $password!="" && $password2!="" && $email!="" && $email2!="")
{

	if($password==$password2 && $email==$email2)
		{

			if(!$existe)
				{
				$sql = "INSERT INTO art (nom,mdp,email,ID) VALUES ('".$pseudo."','".$password."','".$email."','".$chaine_hachee."')";
				$test = mysql_query($sql) or die("erreur ! ".mysql_error());
				$id = mysql_insert_id();
					$adresse = $email;
					$titre = "Inscription au generateur de son";
					$headers="From: Admin : Generateur de son !\n";
					$message = "Bienvenue !

Votre nom est : ".$pseudo."
Votre pass est : ".$password."

pour vous connecter sur le site et acceder a votre profil vous devez d'abord cliquer sur le lien suivant :
http://localhost/ketalombre/validinscription.php?".$chaine_hachee;

				mail($adresse,$titre,$message,$headers);
				echo "<br>Votre nom a été ajouté a la base de donnée";

				}else{
					header("location: inscription.php?erreur3");
					}
		}else{
			header("location: inscription.php?erreur2");
			}

}else{
	header("location: inscription.php?erreur1");
	}


?>
et donc ma chaine faite avec md5 me sert a verrifier que le gars est bien passer par son mail pour activer son compte !

en fait c'est pour être sur qu'il active pas son compte sans passer par le mail si il connais le nom du script d'activation ainsi que l'url a rentrer !

je sais pas si je me fais bien comprendre, ou alors j'ai rien compris.

Mammouth du PHP | 19672 Messages

23 févr. 2006, 22:27

Ce n'est pas incompatible avec ce que je t'ai suggéré, d'autant que la chaine nÉtant stockée nulle part, il ne pourra pas la récupérer où que ce soit d'une part et sera obligé d'utiliser le lien dans son courriel pour activer son compte.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

23 févr. 2006, 22:29

ben si je suis obligé de la mettre quelque pars sinon comment verrifier qu'elle viens bien d'un email ?

le suite du script c'est de faire un lien verifinscription.php

qui testera :

-que l'id dans l'url est bien celle qui correspond a son nom
-que le nom correspond bien
-UPDATE le champ ENUM en oui

donc en fait j'utilise bien cette ID quelque pars sinon j'en vois pas l'interet ! :wink:

Mammouth du PHP | 965 Messages

23 févr. 2006, 22:35

ou alors j'ai encore rien compris ??