[Tutoriel] Système de connexion avec BBD et COOKIE

Hypertext Pre-processor || Le code le plus puissant du Web!
Message(s) : 3
Inscrit(e) le : 13 Mars 2012, 12:47

[Tutoriel] Système de connexion avec BBD et COOKIE

Messagepar gilbert1995 » 23 Mars 2012, 17:29

Bon pour commencer le niveaux de connaissance requis
PHP(Intermédiaire)/MYSQL(Débutant)/HTML(???)


Les différentes étapes
1. Création de la table MYSQL
2. Création du fichier de configuration
3. Création de la page d'inscription
4. Création de la page de connexion
5. Exemple de récupération des données


1. Création de la table MYSQL

Commençons par crée la table MYSQL qui contiendra nos utilisateurs avec un utilisateur test qui se nomme toto
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `pass` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `nom` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `prenom` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `avatar` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `cle` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `activation` int(1) NOT NULL DEFAULT '0',
  `lastlogin` int(20) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;



INSERT INTO `users` (`id`, `user`, `pass`, `nom`, `prenom`, `email`, `avatar`, `activation`, `lastlogin`) VALUES
(1, 'toto', 'f71dbe52628a3f83a77ab494817525c6', 'Toto', 'Tutu', 'Tutu@toto.com', 'images/avatar/default.png', 1, 1332526146);

//Le mot de passe du compte toto est toto


2. Config.php

Nous avons notre table mysql ensuite il nous faut une page de configuration

config.php
<?php
     //En localhost SERVER=localhost USER=root PASS=Dépend de vos réglage
     mysql_connect("SERVER", "USER", "PASS");
   
    //Sélection de la base de donnée
    mysql_select_db("tuto");

    //Pour éviter des caractère du style é nous fesons ce query
    mysql_query("SET NAMES utf8");
   
   function secure($txt) {return mysql_real_escape_string($txt);}
?>


3. Inscription

Il serait ensuite intéressant que les usager puisse s'inscrire :)

Inscription.php
<?php
if($_POST) {
require_once("config.php");
   //Traite de l'avatar
if($_FILES['avatar']['name']!="") {
$dossier = 'images/avatar/';
$taille_maxi = 5242880;//En bytes ici 5Mo
$taille = filesize($_FILES['avatar']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['avatar']['name'], '.');
$fichier = $_POST["user"].$extension;
 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier,
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          $url = $dossier . $fichier;
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l'upload !';
     }
}
else
{
     echo $erreur;
}
} else {
$url = "images/avatar/default.png";
}

   //on vérifie l'adresse E-Mail
   if(!preg_match('#^(([a-z0-9!\#$%&\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&amp;','&',$_POST["mail"]))) {
      die("Adresse E-mail invalide !");
   }
   
   //on vérifie si le user existe
   $check = mysql_query("SELECT * FROM users WHERE user='".secure($_POST["user"])."'");
   if(mysql_num_rows($check)==1) {
      die("Nom d'utilisateur déja utiliser");
   }
   
   //un nombre au hasare
   $nb = rand(0,9999999);
   //définition de la requête SQL
   $sql = "INSERT INTO users (id,user,pass,nom,prenom,email,avatar,cle) VALUES ('' ,'".secure($_POST["user"])."', '".secure(md5($_POST["pass"]))."', '".secure($_POST["nom"])."', '".secure($_POST["prenom"])."', '".secure($_POST["mail"])."', '$url', '$nb')";
   
   //on exécute la requête
   mysql_query($sql) or die (mysql_error());

   //si tout s'est bien dérouler on envoit un messeage avec un lien d'activation
   $sujet = 'Activation de cotre compte';
   $message = "Bonjour,<br />
   Cliquez sur le lien suivant pour activer votre compte <a href='http://nomdedomaine.com/activation.php?nb=$nb'>http://nomdedomaine.com/activation.php?nb=$nb</a>";
   $headers = "From: \"expediteur moi\"<moi@domaine.com>\n";
   $headers .= "Reply-To: moi@domaine.com\n";
   $headers .= "Content-Type: text/html; charset=\"utf-8\"";
   if(mail($_POST["mail"],$sujet,$message,$headers))   
   {
         echo "Votre compte a bien été crée ! <br>L'email a bien été envoyé.";
   }
   else
   {
         echo "Une erreur c'est produite lors de l'envois de l'email.";
   }
   mysql_close();
} else {
?>
<!DOCTYPE html>
<html>
<head>
<title>Inscription</title>
</head>

<body>
   <center>
      <form action="" enctype="multipart/form-data" method="POST">
         <table width="500" border="1">
            <tr>
               <td>Nom ></td>
               <td><input name="nom" /></td>
            </tr>
            <tr>
               <td>Prenom ></td>
               <td><input name="prenom" /></td>
            </tr>
            <tr>
               <td>Nom d'utlisateur ></td>
               <td><input name="user" /></td>
            </tr>
            <tr>
               <td>Mot de passe ></td>
               <td><input name="pass" type="password"/></td>
            </tr>
            <tr>
               <td>Adresse e-mail ></td>
               <td><input name="mail" /><br><small>Obligatoire votre E-Mail seras utliser pour valider votre compte</small></td>
            </tr>
            <tr>
               <td>Avatar ></td>
               <td><input name="avatar" type="file" /></td>
            </tr>
            <tr>
               <td colspan=2 align=center><input type="submit" value="Inscription" /></td>
            </tr>
         </table>
      </form>
   </center>
</body>

</html>
<?}?>


Activation.php
<?php
require_once("config.php");
   mysql_query("UPDATE users SET activation=1 WHERE cle='".$_GET["nb"]."'") or die (mysql_error());
   echo "Votre compte a bien été active";
mysql_close();
?>


4. connexion.php
<?php
if($_POST) {
   require_once("config.php");
   
   //on check si le user existe et si sont compte est activer
   $sql = mysql_query("SELECT * FROM users WHERE user='".$_POST["user"]."' AND pass='".md5($_POST["pass"])."' AND activation=1");
   $data = mysql_fetch_array($sql);
   $nb = mysql_num_rows($sql);
   if($nb==1) {
      setcookie("Login", $data["id"], time()+3600, "/");
   } else {
      echo "Erreur mot de passe ou votre compte n'est pas activer";
   }
} else {
?>
<!DOCTYPE html>
<html>
<head>
<title>Connexion</title>
</head>

<body>
   <center>
      <form action="" method="POST">
         <table width="500" border="1">
            <tr>
               <td>Nom d'utlisateur ></td>
               <td><input name="user" /></td>
            </tr>
            <tr>
               <td>Mot de passe ></td>
               <td><input name="pass" type="password"/></td>
            </tr>
            <tr>
               <td colspan=2 align=center><input type="submit" value="Connexion" /></td>
            </tr>
         </table>
      </form>
   </center>
</body>

</html>
<?}?>



5. Utilisation des données

Mettre ce code sur une oage pour vérifier si le user est connecter
<?php
if(!isset($_COOKIE["Login"])) {die("Veuillez vous connecter !");}
?>


Pour les données
<?php
require_once("config.php");
   $sql = "SELECT * FROM users WHERE id='".$_COOKIE["Login"]."'";
   while($data=mysql_fetch_array($sql)) {?>
      Bonjour <?echo $data["prenom"]?> <?echo $data["nom"]?><br>
      Votre E-Mail est <?echo $data["email"]?><br>
      Votre avatar <img src='<?echo $data["avatar"]?>' /><br>
      Last login <?echo $data["lastlogin"]?>
   <?}?>


PS: N'oublier pas de crée le dossier images/avatar/

Message(s) : 3
Inscrit(e) le : 13 Mars 2012, 12:47

Re: [Tutoriel] Système de connexion avec BBD et COOKIE

Messagepar gilbert1995 » 28 Mars 2012, 10:55

Si vous voulez la page MODIFIER.php pm me :)

Retour vers PHP

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité