2013-03-02 2 views
0

Может ли кто-нибудь сказать мне, почему этот простой код входа в PHP/MySQL всегда показывает «Неверное имя пользователя или пароль», даже если я ввожу правильное имя пользователя/пароль? Я потратил немало времени, пытаясь понять это.PHP/MySQL Login Not Working

<?php 
// Database Connection 
mysql_connect("IP", "charlesfries", "Password") or die(mysql_error()); 
mysql_select_db("charlesfriessdatabase") or die(mysql_error()); 

// Variables 
$username = $_POST["username"]; 
$password = $_POST["password"]; 

$result = mysql_query("SELECT * FROM accounts WHERE username = '$username' and password = '$password'"); 

// Success 
$count = mysql_num_rows($result); 
if ($count == 1) // Checks for Single Record of Given Username & Password 
{ 
    session_register("username"); // Registers Username Key in Session 
    session_register("password"); // Registers Password Key in Session 
    header("location:http://charliefries.tk/"); 
} 

// Failure 
else 
{ 
    echo "Wrong Username or Password"; 
} 
?> 

Кроме того, пожалуйста, не говорите мне, что мой код предназначен для инъекций. Я знаю, это.

Вот мой код формы:

<form action="signinprocess.php" method="post"> <!-- Sign In Process --> 
Username: <input type="text" name="username" style="width:150"> 
<br /> 
Password: <input type="password" name="password" style="width:153"> 
<br /> 
<br /> 
<input type="submit" value="Sign In"> 
</form> 
+0

Вы пробовали его в phpmyadmin и т. Д.? – kennypu

+0

сделал. Пароль и имя пользователя находятся в таблице, но этот код не извлекает их. –

+0

Вы уверены, что значения находятся в массиве '$ _POST'? – prodigitalson

ответ

4

Try LIMIT 1 в SELECT, чтобы иметь только 1 строку.

+0

Это сработало! Благодаря! –

+0

Оказывается, у меня были дубликаты записей. –

+0

if ($ count == 1) // Проверяет одиночную запись данного имени и пароля. данные вашей базы данных могут содержать дублируемое имя пользователя или пароль, который возвращает результат более 1. попытайтесь отфильтровать и сделать уникальным имя пользователя, чтобы не дублировать учетные записи и не шифровать ваш пароль. :) – Snippet

1

Есть несколько «плохих идей» в вашем коде:

  1. Не используйте mysql_ * для новых проектов. Это устарело. Переключиться на mysqli_ * http://php.net/manual/en/book.mysqli.php
  2. Выбор по имени пользователя и паролю не всегда является хорошей идеей. В большинстве случаев лучше искать имя пользователя и проверять, правильно ли пароль. С подготовленными заявлениями вы получите что-то вроде этого

    SELECT * FROM accounts ГДЕ username =?

    На следующем шаге вы можете проверить, совпадает ли ваш пароль с базой данных, например. г. с оператором if $ _POST ['password'] == $ dataFromDB ['password'].

  3. В настоящее время вы сохраняете пароль в виде обычного текста. Это действительно плохая идея. Посмотрите на bcrypt. См. How do you use bcrypt for hashing passwords in PHP?
  4. session_register устарел. Используйте что-то вроде

    $ _SESSION [ 'имя пользователя'] = $ dataFromDB [ 'имя пользователя']

Как я понимаю, проблема заключается в (не существующей) LIMIT. Надеюсь, эти подсказки вам все равно помогут.

+0

Спасибо за эту замечательную информацию! –