Création d'un espace membre avec mysql

Description

C'est la création d'un espace membre avec gestion des logins des utilisateurs par une base SQL et ajout d'un nouvel utilisateur par lui-même.

Source / Exemple :


-----------------Création des tables sql--------------------------------
CREATE TABLE `login` (
`username` VARCHAR( 40 ) NOT NULL ,
`password` VARCHAR( 40 ) NOT NULL ,
PRIMARY KEY ( `username` )
);

CREATE TABLE `info` (
`username` VARCHAR( 40 ) NOT NULL ,
`prenom` VARCHAR( 40 ) NOT NULL ,
`nom` VARCHAR( 40 ) NOT NULL ,
`address` VARCHAR( 40 ) NOT NULL ,
`email` VARCHAR( 40 ) NOT NULL ,
`birth` VARCHAR( 10 ) NOT NULL ,
PRIMARY KEY ( `username` ) 
);
--------------------------Index.php-----------------------------------------
<html>
<?
	include("./head.html");

//alors la j'insere la page head.html qui contient tous les metas et ma feuille de style style.css

	include("./path.php");

//La c pour récupérer la fonction spath() qui me donne le chemin d'accés à ma page:" http://nomserveur/nomrepertoire/"

	echo "<h1 class=txt>Welcome to The Holster Guild</h1>";

//"class= " viens de ma feuille de style

	echo "<table align=left class=cell>";
	echo "<form action=".spath()."/index_sc.php method=post>";
?>

// je créé deux form: une pour se logger... je renvoi sur index_sc.php

	<tr><td width=10>Username</td><td width=10><input type="text" name="user" maxlengh=20 size=10 class=txt></td></tr>
	<tr><td>Password</td><td><input type="password" name="pass" maxlengh=20 size=10 class=txt></td></tr>
	<tr><td colspan=2 align=center><input type="submit" value=": : Login : :" class=bouton>&nbsp;<input type="reset" value=": : Cancel : :" class=bouton></td></tr>
</form>
<?

// et un autre pour s'enregistrer... je renvoi sur register.php

	echo "<form action=".spath()."/register.php method=post>";		
?>
		<input type=hidden name=user_color value=black>
		<input type=hidden name=pass_color value=black>
		<input type=hidden name=fname_color value=black>
		<input type=hidden name=lname_color value=black>
		<input type=hidden name=mel_color value=black>
		<input type=hidden name=add_color value=black>
		<input type=hidden name=user value="">
		<input type=hidden name=fname value="">
		<input type=hidden name=lname value="">
		<input type=hidden name=add value="">
		<input type=hidden name=mel value="">
		<input type=hidden name=bdate value="">

// la g plein de paramètres c pour que register.php recoive bien tout les paramètres qu'il va utiliser

		<tr><td colspan=2><input type="submit" value=": : Not a member? : :" class=bouton></td></tr>
	</form>
	</table>
</html>

-------------------------------index_sc.php-------------------------------

//c ce script qui controle la validité du username et du password
<?
	include('./head.html');
	include('./admin.php');

//admin.php c le script qui va me permettre d'utliser la fonction admin()
// cette fonction va me renvoyer un tableau contenant l'hôte de mon serveur SQL, le nom d'utilisateur et le mot de passe du serveur SQL

	$user=$_POST['user'];
	$pass=$_POST['pass'];

//je récupère le nom d'utilisateur et le mot de passe

	$pass=MD5($pass);

//tout les mot de passe que j'enregistre ds ma base sont codé par la fonction MD5 on compare les mot de passe codé par la suite

	$admin=admin(); 

//je stock le resultat de admin() ds le tableau $admin

	$db=mysql_connect($admin[0],$admin[1],$admin[2]);

//puis je me connect a mon serveur SQL

	mysql_select_db($admin[1],$db);

//puis je selectionne ma base de donnée SQL
//sous free la base porte toujours le meme nom que l'utilisateur ($admin[1])

	$table=mysql_query("SELECT password FROM log WHERE username=\"$user\"",$db);

//requete SQL qui me permet de selectionner le mot de passe stocké ds la base qui correspond au nom utilisateur récupéré plus haut

	$result=mysql_fetch_row($table);
	mysql_close($db);
	if($result[0]==$pass)

//je compare les deux mots de passe

	{
		echo "<h1 class=txt>Bienvenue $user</h1>";

// si il le bon mot de passe, la vous rajouter un include('tapage.html') 

		exit;
	}
	echo "<h1 class=txt>Vous n'êtes pas correctement identifié.</h1>";

//si il a pas le bon mot de passe ou si la requet sql ne renvoie rien, i.e. si l'utilisateur n'existe pas
?>

---------------------------register.php--------------------

//ce script sert uniquement à l'affichage du formulaire d'enregistrement
//seulement on doit lui passer les paramètres de couleur au cas ou l'utilisateur oublie un champs et doit etre réafficher dans ce cas
//si c pas kler tester sur mon site en oubliant de remplir des champs obligatoire, vous verrez tout de suite +vite!! :)
<?
	include("./head.html");
	include("./path.php");
	$user_color=$_POST['user_color'];
	$pass_color=$_POST['pass_color'];
	$fname_color=$_POST['fname_color'];
	$lname_color=$_POST['lname_color'];
	$mel_color=$_POST['mel_color'];
	$add_color=$_POST['add_color'];

//la je recupere toute mes couleur pour chaque element de mon formulaire

	$user=$_POST['user'];
	$fname=$_POST['fname'];
	$lname=$_POST['lname'];
	$add=$_POST['add'];
	$mel=$_POST['mel'];
	$bdate=$_POST['bdate'];

//la je recupere les infos deja rentrer par l'utilisateur pour pas qu'il de retape tout à taper a chaque fois

	echo "<form action=".spath()."/register_sc.php method=post>";

// je renvoie les donnée vers un formualire de control register_sc.php qui dira si les données sont correctement entrées

	echo "<h1 class=txt>Please fill in the register form...</h1>";
	echo "<table align=center>";
	echo "<tr><td colspan=2 align=center>(the fields marked with a * are required)</td></tr>";

//ben la c bien bourin mais c pa trop chaud, c juste l'affichage des données et du formulaire

	echo "<tr><td><font color=$user_color>Choose a username: </font></td><td><input type=text name=user value=$user><font color=$user_color>*</font></td></tr>";
	echo "<tr><td><font color=$pass_color>Choose your password: </font></td><td><input type=password name=pass><font color=$pass_color>*</font></td></tr>";
	echo "<tr><td><font color=$pass_color>Re-enter your password: </font></td><td><input type=password name=pass_check><font color=$pass_color>*</font></td></tr>";
	echo "<tr><td><font color=$fname_color>First Name: </font></td><td><input type=text name=fname value=$fname><font color=$fname_color>*</font></td></tr>";
	echo "<tr><td><font color=$lname_color>Last Name: </font></td><td><input type=text name=lname value=$lname><font color=$lname_color>*</font></td></tr>";
	echo "<tr><td><font color=$add_color>Locality: </font></td><td><input type=text name=add value=$add><font color=$add_color>* (NYC, Paris...)</font></td></tr>";
	echo "<tr><td><font color=$mel_color>email: </font></td><td><input type=text name=mel value=$mel><font color=$mel_color>* (dd/mm/yyyy)</font></td></tr>";
	echo "<tr><td>Birth Date: </td><td><input type=text name=bdate value=$bdate></td></tr>";
		
	echo "<tr><td align=right><input type=submit value=\": : Register : :\" name=submit class=bouton></td><td align=center><input type=reset value=\": : Cancel : :\" class=bouton></td></tr>";
	echo "</table>";
	echo "</form>";
?>

------------------register_sc.php----------------------------

//c ce script qui va controler les données et le cas bon va alors enregistrer l'utilisateur ds la base SQL
// sinon l'utilisateur est renvoyé sur register.php

<?
	include("./head.html");
	include("./admin.php");
	include("./path.php");
	$admin=admin();
	$user=$_POST['user'];
	$pass=$_POST['pass'];
	$fname=$_POST['fname'];
	$lname=$_POST['lname'];
	$add=$_POST['add'];
	$mel=$_POST['mel'];
	$bdate=$_POST['bdate'];

//la je recupere tout les données necessaires à l'enregistrement ds la base

	if(!$_POST['user'])

// je teste si on a bien fournit un nom d'utilisteur

	{
		echo "<form action=".spath()."/register.php method=post>";
		echo "<h1 class=txt>Vous avez oublié votre nom d'utilisateur!!</h1>";
		echo "<center>";
		echo "	<input type=hidden name=user_color value=red>";

// je met la couleur de user en rouge

		echo "	<input type=hidden name=pass_color value=black>";
		echo "	<input type=hidden name=fname_color value=black>";
		echo "	<input type=hidden name=lname_color value=black>";
		echo "	<input type=hidden name=mel_color value=black>";
		echo "	<input type=hidden name=add_color value=black>";
		echo "	<input type=hidden name=user value=\"\">";

// et je renvoie un champs vide pour user

		echo "	<input type=hidden name=fname value=$fname>";
		echo "	<input type=hidden name=lname value=$lname>";
		echo "	<input type=hidden name=add value=$add>";
		echo "	<input type=hidden name=mel value=$mel>";
		echo "	<input type=hidden name=bdate value=$bdate>";
		echo "	<input type=submit value=\": : Revenir : :\" class=bouton>";
		echo "</center>";
		echo "</form>";
	}
	elseif(!$_POST['pass']||!$_POST['pass_check']||$_POST['pass']!=$_POST['pass_check'])

//la je control si il a bien rempli les deux meme mot de passe
//apres c toujours la meme chose que pour user: en rouge puis champs vide

	{
		echo "<form action=".spath()."/register.php method=post>";
		echo "<h1 class=txt>Vous avez mal tapé votre mot de passe!!</h1>";
		echo "<center>";
		echo "	<input type=hidden name=user_color value=black>";
		echo "	<input type=hidden name=pass_color value=red>";
		echo "	<input type=hidden name=fname_color value=black>";
		echo "	<input type=hidden name=lname_color value=black>";
		echo "	<input type=hidden name=mel_color value=black>";
		echo "	<input type=hidden name=add_color value=black>";
		echo "	<input type=hidden name=user value=$user>";
		echo "	<input type=hidden name=fname value=$fname>";
		echo "	<input type=hidden name=lname value=$lname>";
		echo "	<input type=hidden name=add value=$add>";
		echo "	<input type=hidden name=mel value=$mel>";
		echo "	<input type=hidden name=bdate value=$bdate>";
		echo "	<input type=submit value=\": : Revenir : :\" class=bouton>";
		echo "</center>";
		echo "</form>";
	}
	elseif(!$_POST['fname'])
	{
		echo "<form action=".spath()."/register.php method=post>";
		echo "<h1 class=txt>Vous avez oublié votre prénom!!</h1>";
		echo "<center>";
		echo "<input type=hidden name=user_color value=black>";
		echo "<input type=hidden name=pass_color value=black>";
		echo "<input type=hidden name=fname_color value=red>";
		echo "<input type=hidden name=lname_color value=black>";
		echo "<input type=hidden name=mel_color value=black>";
		echo "	<input type=hidden name=add_color value=black>";
		echo "<input type=hidden name=user value=$user>";
		echo "<input type=hidden name=fname value=\"\">";
		echo "<input type=hidden name=lname value=$lname>";
		echo "<input type=hidden name=add value=$add>";
		echo "<input type=hidden name=mel value=$mel>";
		echo "<input type=hidden name=bdate value=$bdate>";
		echo "<input type=submit value=\": : Revenir : :\" class=bouton>";
		echo "</center>";
		echo "</form>";
	}
	elseif(!$_POST['lname'])
	{
		echo "<form action=".spath()."/register.php method=post>";
		echo "<h1 class=txt>Vous avez oublié votre nom!!</h1>";
		echo "<center>";
		echo "	<input type=hidden name=user_color value=black>";
		echo "	<input type=hidden name=pass_color value=black>";
		echo "	<input type=hidden name=fname_color value=black>";
		echo "	<input type=hidden name=lname_color value=red>";
		echo "	<input type=hidden name=mel_color value=black>";
		echo "	<input type=hidden name=add_color value=black>";
		echo "	<input type=hidden name=user value=$user>";
		echo "	<input type=hidden name=fname value=$fname>";
		echo "	<input type=hidden name=lname value=\"\">";
		echo "	<input type=hidden name=add value=$add>";
		echo "	<input type=hidden name=mel value=$mel>";
		echo "	<input type=hidden name=bdate value=$bdate>";
		echo "	<input type=submit value=\": : Revenir : :\" class=bouton>";
		echo "</center>";
		echo "</form>";
	}
	elseif(!$_POST['mel'])
	{
		echo "<form action=".spath()."/register.php method=post>";
		echo "<h1 class=txt>Vous avez oublié votre email!!</h1>";
		echo "<center>";
		echo "	<input type=hidden name=user_color value=black>";
		echo "	<input type=hidden name=pass_color value=black>";
		echo "	<input type=hidden name=fname_color value=black>";
		echo "	<input type=hidden name=lname_color value=black>";
		echo "	<input type=hidden name=mel_color value=red>";
		echo "	<input type=hidden name=add_color value=black>";
		echo "	<input type=hidden name=user value=$user>";
		echo "	<input type=hidden name=fname value=$fname>";
		echo "	<input type=hidden name=lname value=$lname>";
		echo "	<input type=hidden name=add value=$add>";
		echo "	<input type=hidden name=mel value=\"\">";
		echo "	<input type=hidden name=bdate value=$bdate>";
		echo "	<input type=submit value=\": : Revenir : :\" class=bouton>";
		echo "</center>";
		echo "</form>";
	}
	elseif(!$_POST['add'])
	{
		echo "<form action=".spath()."/register.php method=post>";
		echo "<h1 class=txt>Vous avez oublié votre Localité!!</h1>";
		echo "<center>";
		echo "	<input type=hidden name=user_color value=black>";
		echo "	<input type=hidden name=pass_color value=black>";
		echo "	<input type=hidden name=fname_color value=black>";
		echo "	<input type=hidden name=lname_color value=black>";
		echo "	<input type=hidden name=mel_color value=black>";
		echo "	<input type=hidden name=add_color value=red>";
		echo "	<input type=hidden name=user value=$user>";
		echo "	<input type=hidden name=fname value=$fname>";
		echo "	<input type=hidden name=lname value=$lname>";
		echo "	<input type=hidden name=add value=\"\">";
		echo "	<input type=hidden name=mel value=$mel>";
		echo "	<input type=hidden name=bdate value=$bdate>";
		echo "	<input type=submit value=\": : Revenir : :\" class=bouton>";
		echo "</center>";
		echo "</form>";
	}
	else

//si les teste du haut sont tous bon alors on enregsitre, MAIS il fo controler si l'utilisateur ne s'est pas deja enregister!!

	{
		$db=mysql_connect($admin[0],$admin[1],$admin[2]);
		mysql_select_db($admin[1],$db);
		$pass=MD5($pass);
		$table=mysql_query("SELECT username FROM log",$db);
		$result=mysql_fetch_row($table);
		foreach($result as $ans)
		{
			if (strtolower($ans)==strtolower($user))

//la je compare les noms d'utilisateur
//je transforme les chaines en chaine minuscule pour ne pas prendre ne compte la casse
			{
				echo "<h1 class=txt>L'utilisateur existe déja!!</h1>";
				mysql_close($db);
				exit;
			}
		}
		mysql_query("INSERT INTO `log` VALUES ('$user','$pass')",$db);
		mysql_query("INSERT INTO `info` VALUES ('$user','$fname','$lname','$add','$mel','$bdate')",$db);

//si pas de meme utilisateur alors on ecrit dans la base les données récupérées plus haut!!

		mysql_close($db);
		echo "<h1 class=txt>Vous avez bien été enregistré $user</h1>";
	}
?>

----------admin.php----------
//en fait cette fonction fait appel à un fichier, caché de préférence, qui contient le nom d'utilisateur et le mot de passe du serveur SQL qui contient la base de donnée
// ce fichier se nomme .htadmin, il commence par un point pour ne pas etre affiché par le serveur apache (pour ce cacher)

//ce fichier est stocké dans un repertoir log/ 
//Pour interdire l'acces  de ce repertoir afin d'etre sûr que personne viendra regarder dans .htadmin, il faut definir un autre fichier: .htaccess 
//( à ne pas mettre sur la racine de votre compte web sinon vous n'y aurait plus acces!! sauf si vous configurer .htaccess pour un acces restreint mais la c un autre problème!!)
<?
function admin()
{
	$fpath="./log/.htadmin";
	if(is_readable($fpath))

// je teste si le fichier est lisible

	{
		if(!$f=fopen($fpath,'r'))

//j'ouvre le fichier

		{
			echo "Erreur d'ouverture du fichier.";
			exit;
		}
		else
		{
			$str=fgets($f);

//je lis la seule et unique ligne de mon fichier

			list($user,$pass)=split(":",$str);

//je separe cette chaine en deux chaines $user et $pass par ":" car mes deux chamsp dans mon fichier sont séparer par un ":"

			$host="sql.free.rr"; 

// je recupere l'adresse de mon hote qui contient ma bases de donnéé

			return array($host,$user,$pass);

// je renvoie un tableau (array) qui en premier index aura l'hote en deuxiéme l'utlisateur et en 3eme le mot de passe

		}
	}
	else
	{
		echo "Le fichier n'est pas lisible.";
		exit;
	}
}
?>

--------------------------htacess--------------------------
//dans htaccess pour interdire l'acces au repertoire vous mettez seulement cette ligne

deny from all

-----------fin------

Conclusion :


Bon suite aux mails reçu je v expliquer un peu plus en details (frbos c pour toa!!)

voila

apres y peut y avoir un complèment sur les feuilles de style
sinon fo connaitre un minimum les formulaires et php mais c pas dur et je peux vous expliquer mais cette fois en privée!! ;)

résultat sur http://nifhell.free.fre

si vous avez des suggestions et j'en suis avide => email!!

Alors c pour vous eMaylo et Julienmath:
Suite aux messages je précise la création des tables (c vraiment pour vous faire plaisir)...

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.