2013-04-11 9 views
-2

У меня возникли проблемы с моей функцией входа. Я искал часы, и я не мог найти никаких проблем. Надеюсь, вы, ребята, поможете мне. Я хочу получить регистрацию пользователей и проверить, существует ли она в моей БД. Проблема в том, что он возвращает меня: «Возможно, пароль был неправильным!». Я попробовал «echo ($ count)», он ничего не возвращает. То же самое для «echo ($ result)».PHP Login & MySql Query

Я довольно потерял право, я не могу понять, почему это не работает ...

PS: Я французский, так что вы можете увидеть некоторые французские слова.

Вот мой Войти Форма:

<?php 
    session_start(); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Applications</title> 
    <!--Chargement des feuilles de style--> 
    <link rel="stylesheet" type="text/css" href="./css/style.css" /> 
    <link rel="stylesheet" type="text/css" href="./css/styleLogin.css" /> 
    <script src="./js/login/modernizr.custom.63321.js"></script>  
</head> 
<body> 
    <div class="container"> 


     <header></header> 

     <section class="main"> 
      <form class="form-2" id="loginForm" action="./controller/checkLogin.php" method="post"> 
       <h1><span class="log-in">Se connecter</span></h1> 
       <p class="float"> 
        <label for="loginLabel"><i class="icon-user"></i>Nom d'utilisateur</label> 
        <input type="text" name="login" id="login"> 
       </p> 
       <p class="float"> 
        <label for="passwordLabel"><i class="icon-lock"></i>Mot de passe</label> 
        <input type="password" name="password" class="showpassword" id="password"> 
       </p> 
       <p class="clearfix">  
        <input type="submit" name="submit" value="Se connecter"> 
        <input type="button" name="submitVisit" value="Accès utilisateur"> 
       </p> 
      </form>​​ 
     </section> 

    </div> 
</body> 

А вот мой checkLogin.php:

<?php 

session_start(); 

try {   
    $bdd = new PDO('mysql:host=localhost;dbname=stage','root',''); 
    } 
    catch (Exception $e){ //en cas d'erreur de connexion, afficher le message   
    die('Erreur : '.$e->getMessage()); 
    } 

if(isset($_POST['submit'])){ 
    // username and password sent from form 
    $login = $_POST['login']; 
    $pass = $_POST['password']; 

    $qry = "SELECT login FROM users WHERE login = 'admin'"; 
    $result = mysql_query($qry); 


    // Mysql_num_row is counting table row 
    $count = mysql_num_rows($result); 

    if($count == 0){ 
     die("Password was probably incorrect!"); 
    } 
    // If result matched $myusername and $mypassword, table row must be 1 row 
    elseif($count == 1){ 

     // Register $myusername, $mypassword and redirect to file "login_success.php" 
     $_SESSION['login'] = $login; 
     header("location: ./login_success.php"); 
    } 

    else { 
     echo "Wrong Username or Password"; 
    } 
} 

mysql_close($bdd); 
?> 

Я хочу войти с этой парой: админ/админ.

Заранее спасибо.

+1

Почему вы используете PDO, а затем mysql _ * ??? – Class

+0

confusing: S где mysql_select_db, зачем смешивать PDO с mysql и, кроме того, mysql_query не рекомендуется! – Vimalnath

+0

OMG вы код беспорядок .. вы используете mysql_ * с pdo и логином без использования идентификатора и пароля и входа каждого пользователя в submit без подтверждения ввода. –

ответ

2

Есть несколько проблем с вашим скриптом.

Прежде всего, вы начинаете с использования PDO для подключения к базе данных, тогда вы используете функции mysql_* (которые устарели, придерживайтесь PDO !!!). Кроме того, вы не должным образом избегаете своих данных, и ваш код потенциально уязвим для SQL-инъекций.

Во-вторых, запрос, который вы используете, не ....

// this is not checking for either the user input data !!! 
$qry = "SELECT login FROM users WHERE login = 'admin'"; 

Ваш проверочный код должен быть что-то вроде этого:

$ps = $bdd->prepare("SELECT COUNT(*) FROM users WHERE login = :login AND pass = :password"); 
$params = array("login" => $_POST['login'], "password" => $_POST['password']); 
$ps->execute($params); 

$status = (bool) $ps->fetchColumn(0); 

if ($status) { 
    // login successful 
} else { 
    // login failed 
} 

Читайте на PDO и prepared statements (они автоматически избежать ваши данные, так что вам не придется).

Примечание:

Если вы не использовать подготовленные заявления в будущем кода, помните, чтобы всегда бежать от пользователей ввода и почти любой другой источник информации.

+0

Я думаю, это то, что мне нужно, спасибо. – Zhob

+0

Хорошо сделанный vlad ... Хороший ответ .. +1 – Ihsan

0

1) Вы смешиваете mysql и PDO, что является катастрофой. Интерфейс mysql_ осуждается использование MySQLi или PDO пожалуйста ...

2)

"SELECT login FROM users WHERE login = 'admin'"; 

находит только пользователей с логином администратора ... Так что вы должны

"SELECT login FROM users WHERE login = '$login'"; 

3) $ _POST переменных не являются безопасными. Пользователи могут внедрить вредоносный код ...

Например, если вы используете MySQLi затем

$login = mysqli_real_escape_string($_POST['login']); 

Чтобы дезинфицировать запись входа в систему и сделать то же самое для пароля тоже.

+0

Я довольно новичок в этом, так что спасибо, я думаю, я больше никогда их не перепущу. – Zhob

-1

Проблема заключается в том, что вы смешиваете mysql_ * функции и PDO .. код должен выглядеть следующим образом:

Обратите внимание на функцию, которая связывает параметры вашего запроса подготовить - он предотвращает инъекции SQL.

session_start(); 

try {   
    $pdo = new PDO('mysql:host=localhost;dbname=stage','root',''); 
    } 
    catch (Exception $e){ //en cas d'erreur de connexion, afficher le message   
    die('Erreur : '.$e->getMessage()); 
    } 

if(isset($_POST['submit'])){ 
    // username and password sent from form 
    $login = $_POST['login']; 
    $pass = $_POST['password']; 

    $sql = "SELECT login FROM users WHERE login = :login AND password = :password"; 
    $params = array('login' => $login, 'password' => $pass); 
    $sqlprep = $pdo->prepare($sql); 

    if($sqlprep->execute($params)) { 
     $count = $sqlprep->rowCount(); 
     if($count != 1){ 
      die("Incorrect login!"); 
     } else { 
      $_SESSION['login'] = $login; 
      header("location: ./login_success.php"); 
     } 
    } 
} 
0

поскольку все давали советы по общим вопросам я в погоню

изменение:

$login = $_POST['login']; 
    $pass = $_POST['password']; 

    $qry = "SELECT login FROM users WHERE login = 'admin'"; 

предполагающей IST пароль, сохраненный в поле базы данных с именем "Passwort" в:

 $login = $_POST['login']; 
     $pass = $_POST['password']; 

     $qry = "SELECT login FROM users WHERE login = '".mysql_real_escape_string($login)."' and password= '".mysql_real_escape_string($password)."'"; 

mysql_real_escape_string не позволяет вам взломать и запрос базы данных теперь использует значения от должности ...

+0

совет по общим вопросам: не используйте интерфейс mysql_ .... – Ihsan