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 :

problème avec login et pass


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 26
    Points : 19
    Points
    19
    Par défaut problème avec login et pass
    salut je suis débutant en php .
    je ne sais pas comment on réalisé le code pour se loguer :

    j'ai tenté de faire un code mais je sais pas pourquoi ça marche pas .
    quelqu'un pour m'aider par ici ?

    voici mon code :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <?php
    // on teste si le visiteur a soumis le formulaire de connexion
    if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
     
    		include("connection.php"); 
     
    		// on teste si une entrée de la base contient ce couple login / pass
    		$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
    		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    		$data = mysql_fetch_array($req);
     
    		mysql_free_result($req);
    		mysql_close();
     
    		// si on obtient une réponse, alors l'utilisateur est un membre
    		if ($data[0] == 1) {
    			session_start();
    			$_SESSION['login'] = $_POST['login'];
    			header('Location: logo.php');
    			exit();
    		}
    		// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
    		elseif ($data[0] == 0) {
    			$erreur = 'Compte non reconnu.';
    		}
    		// sinon, alors la, il y a un gros problème :)
    		else {
    			$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
    		}
    	}
    	else {
    		$erreur = 'Au moins un des champs est vide.';
    	}
    }
    ?>
    <html>
    <head>
    <title>Accueil</title>
    <style type="text/css">
    <!--
    .Style1 {
    	color: #FFFFFF;
    	font-weight: bold;
    }
    .Style6 {color: #FFFFFF; font-style: italic; font-weight: bold; }
    -->
    </style>
    </head>
     
    <body>
    <br />
    <form action="index.php" method="post">
    <br />
    <table width="536" height="139" border="0" align="center" bgcolor="#FF00FF">
      <tr>
        <td colspan="2"><div align="center" class="Style1">
          <h1>Connexion &agrave; l'espace membre :</h1>
        </div></td>
        </tr>
      <tr>
        <td width="109">&nbsp;</td>
        <td width="417">&nbsp;</td>
      </tr>
      <tr>
        <td><span class="Style6">Login : </span></td>
        <td><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></td>
      </tr>
      <tr>
        <td><span class="Style6">Mot de passe : </span></td>
        <td><input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></td>
      </tr>
      <tr>
        <td colspan="2"><table width="82" border="0" align="center">
            <tr>
              <td width="76"><input type="submit" name="connexion" value="Connexion"></td>
            </tr>
          </table>
          <table width="100" border="0" align="right">
            <tr>
              <td width="94"><a href="inscription.php">Vous inscrire</a></td>
            </tr>
          </table></td>
        </tr>
    </table>
    <br />
    </form>
     
    <?php
    if (isset($erreur)) echo '<br /><br />',$erreur;
    ?>
    </body>
    </html>

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    Enlève le
    déjà.

    Ensuite, le session_start() doit se mettre au tout début de ton code.

    Puis, ta partie HTML, elle est appelée après le script PHP ou bien c'est cette partie qui est utilisée pour se connecter ?

  3. #3
    Membre du Club
    Homme Profil pro
    au
    Inscrit en
    Mars 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : au
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2011
    Messages : 41
    Points : 52
    Points
    52
    Par défaut
    Bonsoir à toi, explique bien ton problème, quand tu exécute ton script il y a quoi comme erreur ?

    Voilà j'ai rectifié quelque lignes :

    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
     
    session_start();
    $login=mysql_escape_string($_POST['login']);
    $pass=md5(mysql_escape_string($_POST['pass']));
    		// on teste si une entrée de la base contient ce couple login / pass
    		$sql = 'SELECT * FROM membre WHERE login="'.$login.'"';
    		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    		$data = mysql_fetch_array($req); 
    		// si on obtient une réponse, alors l'utilisateur est un membre
    		if ($data['pass_md5'] == $pass) {
     
    			$_SESSION['login'] = $login;
    			header('Location: logo.php');
    			exit();
    		}
    		// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
    		else {
    		echo 'Compte non reconnu.';
    		}

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])))
    Il y a des redondances dans le code ci-dessus. !empty teste si la variable existe, est non nulle et différente de 0, et isset si elle existe et est non nulle. Pour le même résultat, tu peux donc utiliser la plus grande contrainte et faire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($_POST['login']) && !empty($_POST['pass']))

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Hormis tout ce qui a été dit, je remarque un point qui pourrait poser problème.


    Dans le déroulement, il est prévu de vérifier le login/pass, et si il existe, alors il est prévu de juste initialiser/modifier la valeur du login dans la session ouverte précédemment.
    Problème.

    Imaginons qu'un utilisateur ait créé 2 comptes membre différents (2 login/passe différents).
    Imaginons qu'il soit déjà identifié (un des 2 comptes) puis qu'il tente de se ré-identifier avec son 2ème compte, et bien se qu'il va se passer, c'est qu'au démarrage de la session (session_start()), toutes les données dans la session seront liées à celles de son 1er compte actuel, et non celles du 2ème compte.
    Pas tout à fait en faite : ça sera les données du 1er compte mais avec le login du 2ème, ce qui devient incohérent.


    En somme, plusieurs choses pourraient ce faire dans un tel cas.
    - Soit démarrer la session dès le début (comme cela a été suggéré), puis de vérifier si une session d'un membre est présent, comme vérifier la présence du login par exemple, ensuite refuser la nouvelle identification.

    - Ou alors, accepter quand même la nouvelle identification, mais juste avant d'initialiser le login, de remettre à zéro (si on peu dire) le tableau de session.
    C'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $_SESSION = array(); // Remise à zéro / destruction de toutes les données actuelles
    $_SESSION['login'] = $_POST['login'];
    header('Location: logo.php');
    exit();
    Il y a surement d'autres moyens de gérer cela.


    Tout cela sauf erreur bien sûr, faut voir.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. Problème avec mot de passe
    Par Marc_3 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 27/07/2014, 19h43
  2. Réponses: 2
    Dernier message: 16/07/2008, 23h52
  3. problème avec un tableau passé en paramètre
    Par curley dans le forum Débuter
    Réponses: 1
    Dernier message: 28/10/2007, 02h54
  4. Réponses: 6
    Dernier message: 28/05/2004, 09h39

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