php problème
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

php problème



  1. #1
    invite9a71f253

    Exclamation php problème


    ------

    Salut tout le monde !

    alors voilà comme j'ai crée un site php enfin j'ai commencé.. j'ai un soucis embettant.

    je vous explique:

    quand je rentre un mauvais mot de passe, là ok il me dit que le mot de passe est mauvais.
    quand je rentre rien, ok il me dit que j'ai oublié de remplir une case.
    Mais quand je rentre les bons ID, il me dit que le mot de passe est faux ! ..

    j'ai essayé comme on ma conseillé c'est à dire comme sa:
    j'ai mis un session_start(); mais je ne sais pas si c'est bon comme sa ?

    config.php

    Code PHP:
    <?php

    session_start
    ();


    $DB_HOST "localhost";
    $DB_LOGIN "root";
    $DB_PASS "";
    $DB_DATA "site";

    mysql_connect($DB_HOST,$DB_LOGIN,$DB_PASS) or die ("erreur de connexion ࡬a BDD");
    mysql_select_db($DB_DATA ) or die ("database introuvable");





    ?>
    je vous donne les autres page au cas ou sa viendrait de làbas.

    connexion.php

    Code PHP:
    <?php

    include("config.php");

    if(!empty(
    $_POST['login']) && !empty($_POST['pass'])){

         
    $_POST['login'] = htmlentities($_POST['login']);
         
    $_POST['pass'] = htmlentities($_POST['pass']);

         
    $sql "SELECT * FROM users WHERE login='".$_POST['login']."' ";
         
    $req mysql_query($sql) or die("erreur SQL");
         
    $data mysql_fetch_assoc($req);
         
         if(!empty(
    $data['login'])){
         
         
                 
    $_POST['pass'] = md5($_POST['pass']); 
         
                 if(
    $data['pass'] == $_POST['pass']){
                 
                          
    header("Location: index_membre.php");
                 
                 
                    }else{
                            echo 
    "login ou mot de pass incorrect ! ";
                            }
         
         
         
         }else{
             echo 
    "login ou mot de passe inccorect";
            }
             
    }else{
           echo 
    "Tout les camps doivent être remplies !";
    }       

    ?>

    index_membre.php (qui est sensé s'ouvrir quand on se connecte)

    Code PHP:
    Tu es connecté 
    et index.php (la page principal, pour s'identifier.)

    Code PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <
    html xmlns="http://www.w3.org/1999/xhtml">

    <
    head>
        <
    title>New g?ration</title>
        <
    meta http-equiv="content-type" 
            
    content="text/html;charset=utf-8" />
    </
    head>

    <
    body>


         <
    center>
         <
    form method="post" action="connexion.php" >
         
    Login :<br />
         <
    input type="text"name="login" /><br /><br />
         
    Mot de passe : <br />
         <
    input type="password" name="pass" /><br /><br />
         <
    input type="submit" value="Se connecter" />
         </
    center>
         </
    form>
         <
    p>
         <
    center>
         <
    input type="button" value="S'inscrire" onclick="window.location='inscription.php"
         </
    center>
         </
    p>
         <
    p>
         <
    center>
         <
    img src="img/icone1.png" alt"icone1">
         </
    center>
         </
    p>


    </
    body>
    </
    html

    Aidez moi svp, merci beaucoup

    -----

  2. #2
    snoosha

    Re : php problème

    affiche déja ce que tu compares et tu verras ainsi les valeurs que tu compares ...

  3. #3
    Xoxopixo

    Re : php problème

    Bonjour,

    j'ai un doute sur la possibilité d'affectation de la variable $_POST
    Peut-on changer la variable $_POST['truc'] ?
    Sachant qu'elle renvoi la valeur indexé par l'indice 'truc'.
    Peut-on aussi affecter une valeur au sein de cette chaine ?

    Par exemple ici:
    Code:
    $_POST['login'] = htmlentities($_POST['login']);
    Essai peut-être avec une variable de travail $login comme ça :
    Code:
    $login = htmlentities($_POST['login']);
    En bon vivant, rien ne vaut un bonne logique ternaire.

  4. #4
    Dormeur74

    Re : php problème

    Il faut bien comprendre que les sessions n'ont rien à voir avec le fait de se connecter avec une base de données, de l'ouvrir et d'en changer le contenu.
    Dans l'immédiat, laisse tomber la technologie des sessions. Quand tout fonctionnera normalement, tu pourras ajouter la sécurité des sessions.
    Surtout qu'elle varie selon qu'on est chez Free (et peut-être d'autres) ou pas.

    En reprenant ce qu'il reste de ton code :
    Code:
    <?php
    $DB_HOST = "localhost";
    $DB_LOGIN = "root";
    $DB_PASS = "";
    $DB_DATA = "site";
    
    mysql_connect($DB_HOST,$DB_LOGIN,$DB_PASS) or die ("erreur de connexion ࡬a BDD");
    mysql_select_db($DB_DATA ) or die ("database introuvable");
    
    ?>
    Pour moi, ton code est bien construit et correct. A condition bien sûr que les variables "localhost", "root", "" et "site" soient strictement identiques dans le fichier de configuration de ton serveur Apache.

    Si tu exécutes le code ci-dessus et n'as pas de message d'erreur, c'est que tout va bien et que c'est un problème d'encodage ou de stockage de données. En gros, ce que tu tapes au clavier ne correspond pas à ce qui se trouve dans la base.

    Si tu veux t'en assurer et pouvoir tout contrôler, installe PhpMyAdmin sur ton serveur local. cela te permettra d'éditer un dump de la base "site", de nous la proposer et surtout d'apprendre à importer/exporter tes données (sécurité vitale !).

  5. A voir en vidéo sur Futura
  6. #5
    lucas.gautheron

    Re : php problème

    Quelques commentaires...

    Premièrement, c'est inutile d'échapper les caractères spéciaux HTML (avec htmlentities). Ce n'est utile que si tu souhaites "afficher" une variable au sein d'une page HTML sans évaluer le code HTML qu'elle pourrait contenir (à cause d'une injection à des fins malveillantes, par exemple). Donc tu peux virer tes appels à htmlentities puisque tu n'affiches jamais ces valeurs. En plus ça risque de poser problème si quelqu'un a un caractère spécial dans son mot de passe ou login.

    Ensuite, ton code est vulnérable. On peut réaliser une injection SQL dans tes requêtes, càd insérer des caractères particuliers de sorte à pouvoir modifier un peu la requête (ce qui peut avoir des conséquences graves)
    Il faut échapper les caractères sql. Pour cela utilise mysql_real_escape_string.
    Code PHP:
    $login mysql_real_escape_string($_POST['login']); 
    Enfin il serait mieux de faire effectuer la vérification du login et du mot de passe au SGBD, donc tout ça en une seule requête :
    Code PHP:
    $login mysql_real_escape_string($_POST['login']);
    $pass md5($_POST['pass']);
    $sql "SELECT * FROM users WHERE login='$login' AND pass='$pass' ";
    $req mysql_query($sql) or die("erreur SQL");
    if(
    mysql_num_rows($req))
    {
        echo 
    'Login réussi';
    }
    else
    {
        echo 
    'Login ou mot de passe incorrect';


  7. #6
    Dormeur74

    Re : php problème

    Ton fichier connexion.php (et non pas index_membre.php) ne colle pas pour plusieurs raisons :
    - nulle part tu essaye de rapprocher le login et le mot de passe de la base "site" avec ce que l'utilisateur a tapé dans le formulaire.
    - ton algorithme est tellement compliqué que le bug (il y en a plusieurs) ne saute pas aux yeux.
    - tu indiques le même message d'erreur dans deux chemins logiques différents ("Login ou mot de passe différent.". Heureusement on peut les distinguer grâce à l'orthographe.

    A l'avenir, utilise la méthode du "rouleau compresseur". On ne passe jamais à l'étape E(n) si E(n-1) cloche.

    Exemple de méthode :
    A - Récupérer les données du formulaire
    B - Vérifier le contenu des champs obligatoires. Si un champ est vide ou contient des chaînes à base d'espaces, on éjecte.
    C - Mettre une barrière anti-injection comme l'a fort bien conseillé lucas.gautheron.
    D - Rechercher les identifiants dans la base
    E - Traiter si tout va bien

    Essaye ceci et tu seras déjà mieux.
    Code:
    <?php
    
    include('config.php');
    
    // Si un des deux champs est vide on arrête tout
    if(empty($_POST['login']) || empty($_POST['pass'])){
      exit ("Tout les champs doivent être remplis !");
    }
    
    // Si les deux champs ont un contenu on continue
    $login = $_POST['login'];
    $pass = $_POST['pass']; 
    
    $sql = "SELECT * FROM users WHERE login='$login' AND pass='$pass'";
    $req = mysql_query($sql) or die("erreur SQL");
    echo("On continue");
    
    ?>
    Dernière modification par Dormeur74 ; 20/02/2012 à 18h39.

Discussions similaires

  1. Php page problème
    Par invite9a71f253 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 15/02/2012, 19h41
  2. problème avec le PHP
    Par invite99a31ef7 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 14/06/2008, 19h03
  3. problème de php !!!
    Par nams2590 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 20/01/2007, 20h41
  4. Insérer une page php avec variables (ex : page.php?nom=jean) grâce au javascript
    Par invite991c0955 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 21/05/2005, 17h37
  5. Problème PHP Include()
    Par inviteb90ba831 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 3
    Dernier message: 18/11/2004, 18h47