IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Aide authentification par session PHP MySql (Débutant) [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable d'équipe
    Inscrit en
    Novembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'équipe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 42
    Points : 72
    Points
    72
    Par défaut Aide authentification par session PHP MySql (Débutant)
    Bonjour à tous,
    Je sollicite votre aide pour la création d'un script d'ouverture de session via une base MySql.
    Je tiens à préciser que je débute avec php/mysql.
    Dans la mesure du possible quelqu'un pourrait-il m'envoyer un script déjà tout préparé pour que je comprenne.
    Ça fait plusieurs jours que je surf en essayant divers tuto mais à chaque fois ça bloque et les méthodes d'authentification diffèrent d'un site à un autre.
    Sinon si quelqu'un pouvait m'aiguiller...
    En partant d'un truc tout simple sans forcement avec les protocoles de sécurité je souhaite arriver à un truc du genre :
    index.php ==> Contient le formulaire d'authentification
    config.php ==> lié à toutes les pages du site par require_once et connecté à la base
    authentification.php ==> vérifie que le user et le password est conforme
    page1.php ==> si authentification réussi, session ouverte avec info de l'utilisateur enregistré sur la base.
    La ou je bloque c'est quel script ou méthode utiliser pour vérifier que les données du formulaire correspondent à la base.
    Toute aide serait le bienvenue
    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu as déjà essayé plein de tutos et que tu ne t'en sors pas, on ne va pas t'en redonner un de plus.
    Montre nous plutôt ton code le plus convaincant et dit nous ce que tu obtiens avec.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Responsable d'équipe
    Inscrit en
    Novembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'équipe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 42
    Points : 72
    Points
    72
    Par défaut
    Merci de m'avoir répondu.
    Le problème des tutos que j'ai essayé c'est qu'ils sont vieux et que certains scripts PHP sont inutilisable dans la version actuelle de PHP.
    J'essaie encore et dès que j'ai un truc un peu plus convenable je vous l'envoi.

  4. #4
    Membre régulier
    Homme Profil pro
    Responsable d'équipe
    Inscrit en
    Novembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'équipe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 42
    Points : 72
    Points
    72
    Par défaut
    Bon mes codes sont pas super c'est juste pour comprendre le fonctionnement voici ma page de connexion : index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    <?php
    include('config.php')
    ?>
    <!DOCTYPE>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>Index</title>
    <link href="style.css" rel="stylesheet" />
    </head>
    <body>
    <p>Bonjour</p>
    <p>Bienvenue sur notre site.</p>
    <div class="content">
        <form action="connexion.php" method="post">
            <p>Veuillez entrer vos identifiants pour vous connecter:<p/>
            <div class="center">
                <label for="username">Nom d'utilisateur</label><input type="text" name="username" id="username" /><br />
                <label for="password">Mot de passe</label><input type="password" name="password" id="password" /><br />
                <input type="submit" value="Connection"/>
    		</div>
        </form>
    </div>
    </body>
    </html>
    Voici ma page config.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
    //On demarre les sessions
    session_start();
    	//se connecte à la base de données
    			try
    			{
    				$bdd = new PDO('mysql:host=localhost;dbname=basededonne','root','')	;		
    			}
    			catch (Exception $e)
    			{
    				die('Erreur : '.$e->getMessage());			
    			}
    			$reponse = $bdd->query('SELECT * FROM users');
    			?>
    Voici ma page de connexion : connexion.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <?php
    include('config.php');
    ?>
    <!DOCTYPE>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>Connexion</title>
    <link href="style.css" rel="stylesheet" />
    </head>
    <body>
        	<div class="header">
    	    </div>
    <?php
    $username = ($_POST['username']);
    $password = ($_POST['password']);
    echo $username;
    echo $password;
    function getLoginCheck($username, $password) 
    {
    	$username = ($username);
    	$password = ($password);
    }
    ?>
    <?php
    if(getLoginCheck($username, $password) = true) 
    { 
    echo "ca marche";
    }
    ?>
    	</body>
    </html>
    Ça marche pas.

    Merci pou toute l'aide que vous pourrez m'apporter.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour savoir si le login et le mot de passe correspondent il faudrait peut être aller regarder dans la base de données
    Ici je fais comme si tes mots de passes sont stockés en clair dans ta base de données (ce qui n'est pas une bonne chose) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    include('config.php');
    $sth = $bdd->query ('SELECT username FROM users WHERE username = :username AND password = :password');
    $sth->execute(array(':username'=>$_POST['username'], ':password'=>$_POST['password']));
    if ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
         session_regenerate_id();
         $_SESSION['username'] == $row['username'];
         echo 'connecté';
    }
    Et ça (lire l'intégralité de la table users), tu le retires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query('SELECT * FROM users');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre régulier
    Homme Profil pro
    Responsable d'équipe
    Inscrit en
    Novembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'équipe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 42
    Points : 72
    Points
    72
    Par défaut
    Merci de ton aide.

    Ca a démarré la session. Mais j'ai un message d'erreur :

    Fatal error: Uncaught Error: Call to a member function execute() on boolean in /opt/lampp/htdocs/test9/connexion.php:28 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/test9/connexion.php on line 28

    Du coup j'ai mit un else mais j'ai toujours le même message d'erreur.

    Voici à quoi ressemble l'assemblage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <?php
    include('config.php');
    ?>
    <!DOCTYPE>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>Connexion</title>
    <link href="style.css" rel="stylesheet" />
    </head>
    <body>
        	<div class="header">
    	    </div>
    <?php
    $username = ($_POST['username']);
    $password = ($_POST['password']);
    echo $username;
    echo $password;
    function getLoginCheck($username, $password) 
    {
    	$username = ($username);
    	$password = ($password);
    }
    ?>
    <?php
    include('config.php');
    $sth = $bdd->query ('SELECT username FROM users WHERE username = :username AND password = :password');
    $sth->execute(array(':username'=>$_POST['username'], ':password'=>$_POST['password']));
    if ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
         session_regenerate_id();
         $_SESSION['username'] == $row['username'];
         echo 'connecté';
    }
    else {
        echo"erreur";
    }
    ?>
    	</body>
    </html>
    En te remerciant.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pardon c'est prepare et pas query :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth = $bdd->prepare('SELECT username FROM users WHERE username = :username AND password = :password');
    Tu dois aussi retirer tout le code au dessus du mien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre régulier
    Homme Profil pro
    Responsable d'équipe
    Inscrit en
    Novembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'équipe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 42
    Points : 72
    Points
    72
    Par défaut
    Merci de ton aide.

    J'ai un autre message d'erreur et je pense que mon niveau en php est trop faible pour l'instant.

    Je ne comprend pas tout et je vais retourner à mon apprentissage avant d'essayer de comprendre le mécanisme des sessions via mysql.

    Je retournerai dans ce post dès que mon niveau s'améliore un peu.

    A bientôt.

  9. #9
    Membre régulier
    Homme Profil pro
    Responsable d'équipe
    Inscrit en
    Novembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'équipe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 42
    Points : 72
    Points
    72
    Par défaut [Résolu]
    @sabotage

    Bon j'ai trouvé "une solution" même si elle est loin d'être optimisé.
    Au moins ça fonctionne et ça m'a permit de comprendre l'utilisation des conditions en comparant avec le résultat d'une requête.
    Je t'en fais part:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php
    // récupère les données du formulaire
    $pseudo=$_POST ['pseudo'];
    $mdp=$_POST ['mdp'];
    //Connexion à la Base de Données
    try
    {
    $bdd=new PDO('mysql:host=localhost;dbname=ach','root','');       
    }
    catch(Exception $e)
    {
    die('Erreur:'.$e->getMessage());       
    }
    //Si le pseudo existe dans la base le résultat sera 1
    $request="SELECT COUNT(pseudo) AS nombre FROM user WHERE pseudo='$pseudo'";
     
    $reponse=$bdd->query($request);   
     
    while($donnees=$reponse->fetch())
    {      
    $nb=$donnees['nombre'];
    echo $nb;
     }
    //Si le pseudo existe vérification si le mot de passe existe par la même méthode
    if($nb==1) 
    { 
     
    $request="SELECT COUNT(mdp) AS nombre2 FROM user WHERE mdp='$mdp' AND pseudo='$pseudo'";
     
    $reponse=$bdd->query($request);   
     
    while($donnees=$reponse->fetch())
    {      
    $nb2=$donnees['nombre2'];
    echo $nb2;
    }}
    $nb3=$nb+$nb2;
    echo $nb3;
    //Si le pseudo et mot de passe correspondent ouverture session + direction page1
    if($nb3==2) 
    {
    	session_start()+header('Location: page1.php');
    	$_SESSION['pseudo']=$pseudo;
    	}
    	?>
    Il faut le bon couplage pseudo et mdp pour que la session s'ouvre.

    Encore un grand merci pour ton aide.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    c'est étrange le + ligne 43.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre régulier
    Homme Profil pro
    Responsable d'équipe
    Inscrit en
    Novembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'équipe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 42
    Points : 72
    Points
    72
    Par défaut
    J'avais vu ça dans un autre tuto. J'ai essayé de le retirer et j'ai un message d'erreur.

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    session_start();
    header('Location: page1.php');
    Mais tu ne peux pas démarrer une session après avoir fait des echo, il faut revoir l'organisation de ton code.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre régulier
    Homme Profil pro
    Responsable d'équipe
    Inscrit en
    Novembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'équipe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 42
    Points : 72
    Points
    72
    Par défaut
    Bonjour.
    Les echo sont justes des tests et le résultats m'indiquent si mes requêtes sont correctes ou non.
    Débutant en PHP/Mysql je ne comprend pas trop pourquoi il ne faut pas faire d'echo avant l'ouverture de la session.
    Je pensais qu'on pouvais mettre un message d'erreur et ne pas lancer l'ouverture de session si pseudo et mot de passe ne correspondent pas.
    Après le 1er résultat de COUNT par exemple j'aurais pu mettre if $nb==0 echo Identifiant non reconnu.
    Merci pour tes éclaircissement.

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux écrire un echo dans le code evidemment, mais les conditions dans ce code doivent soit aller vers le echo soit aller vers la session.

    Un document HTTP est composé d'en-têtes et d'un corps. Les en-têtes sont envoyées avant le corps.
    Quand tu lances un echo, tu commences la phase corps, et donc les en-têtes sont terminées.
    À partir de ce moment, les éléments qui font partie de l'en-tête comme les sessions, les cookies, les redirections ne peuvent plus être envoyés.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre régulier
    Homme Profil pro
    Responsable d'équipe
    Inscrit en
    Novembre 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Responsable d'équipe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2015
    Messages : 42
    Points : 72
    Points
    72
    Par défaut
    Je comprend mieux pourquoi la structure n'est pas trop bonne. En plus le chemin de mes if n'est pas super non plus. Quand j'aurais un peu plus de temps j'essaierai de faire mieux. Encore merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Aide pour un code PHP/MySQL
    Par sara21 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/04/2010, 08h36
  2. get remplacer par session php
    Par kate59 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 03/06/2009, 18h46
  3. [Flash MX 2004] Php Mysql (débutant)
    Par mooky dans le forum Flash
    Réponses: 7
    Dernier message: 08/02/2006, 20h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo