Pb d'authentification

Résolu
Maskk Messages postés 89 Statut Membre -  
Maskk Messages postés 89 Statut Membre -
Bonjour,

Suite a ma question d'hier, je me permet de soliciter de nouveau votre aide ..
J'ai bien des utilisateurs dans ma bdd sql serveur , par contre on dirait qu'a partir de ma page php je n'arrive pas a les reconnaitre...
Voici mon code

// on teste si une entrée de la base contient ce couple login / pass
$sql ="SELECT count(*) FROM membre WHERE login='$condition_req' AND pass_user='$condition_pass'";
$req = odbc_do($connexion,$sql) or die('Probleme avec select !<br />'.$sql.'<br />'.odbc_error($req));
$data = odbc_fetch_array($req);

odbc_free_result($req);
odbc_close();

// si on obtient une réponse, alors l'utilisateur est un membre
if ($data[0] == 1) {
echo "ok";
session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: membre.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) {
echo "pas ok";
$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.';
}
}
?>
Suivi de
<form action="defaut.php" method="post">
Nom de l'utilisateur : </td><td><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></td></tr>
<tr><td>Mot de passe :</td><td><input type="text" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></td></tr>
<tr><td> </td><td><input type="submit" name="connexion" value="Connexion"></td></tr>
</form>

3 réponses

  1. dariumis Messages postés 583 Statut Membre 63
     
    Salut, je crois qu'il faut ouvrir le session au tous début du script, l'instruction "session_start(); " doit etre la premiere ligne de la page, si je ne m'embrouille.
    0
    1. Maskk Messages postés 89 Statut Membre 2
       
      Bonjour dariumis , j'ai essayé avec l'ajout de session_start au debut (bien que je l'appelais deja a partir du fichier membre.php) ca ne marche pas ... on dirait qu'il n'arrive pas a lire les resultat de mon fetch_array..., quand je fais un "echo $data;" il me met array apres je ne sais pas comment interpreter cela ..
      0
  2. Maskk Messages postés 89 Statut Membre 2
     
    Personne n'a d'idée ?
    0
  3. Maskk Messages postés 89 Statut Membre 2
     
    Bon j'ai reussi a me depatouiller , pour ceux qui sont interessés :

    un premier fichier defaut.php
    <?php
    function odbc_real_escape_string($string) //Fonction crée pour remplacer mysql_real_escape_string.. prend en compte les apostrophes.
    {
    $chars = array('NULL', '\x00', '\n', '\r', '\\', "'", '"', '\x1a');
    $escapes = array('\NULL', '\\x00', '\\n', '\\r', '\\\\', "''", '\"', '\\x1a');

    return str_replace($chars, $escapes, $string);
    }

    // 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 ('connexion.php');

    $condition_req=odbc_real_escape_string($_POST['login']);
    $condition_pass=odbc_real_escape_string($_POST['pass']);

    // on teste si une entrée de la base contient ce couple login / pass
    $sql ="SELECT count(*) AS login FROM membre WHERE (login='$condition_req') AND (pass_user='$condition_pass')";
    //$sql ="SELECT count(*) AS login FROM membre WHERE login='".$condition_req."' AND pass_user='".$condition_pass."'";
    $req = odbc_do($connexion,$sql) or die('Probleme avec select !<br />'.$sql.'<br />'.odbc_errormsg($req));
    $data =odbc_fetch_array($req);

    echo $data;
    // si on obtient une réponse, alors l'utilisateur est un membre
    if (($data['login'] == 1) AND ($data['pass_user'] ==0)) {

    session_start();
    $_SESSION['login'] = $_POST['login'];
    header('Location: membre.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.';
    }
    }
    ?>
    Mettre dans la page

    <form action="defaut.php" method="post">
    Nom de l'utilisateur : </td><td><input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"></td></tr>
    <tr><td>Mot de passe :</td><td><input type="text" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"></td></tr>
    <tr><td> </td><td><input type="submit" name="connexion" value="Connexion"></td></tr>
    </form>

    Un deuxieme membre.php dans lequel il y a le session()
    <?php
    session_start();
    if (!isset($_SESSION['login'])) {
    header ('Location: defaut.php');
    exit();
    }
    ?>

    <html>
    <head>
    <title>Espace membre</title>
    </head>

    <body>
    Bienvenue  <?php echo htmlentities(trim($_SESSION['login'])); ?>!<br />
    <a href="deconnexion.php">Déconnexion</a>
    </body>
    </html>

    Ca vous evitera de chercher pendant 2j comme moi ^^
    0