2013-07-20 5 views
-4

Вот мой код Я не могу заставить оператор if работать, если имя не существует, оно читает «Запись найдена», а page3.php говорит, что пароли не совпадают, может кто-то угодить помочь мне с этим СпасибоЧто я могу сделать, чтобы получить эту работу

<?php 
session_start(); 
//$_SESSION["authorized"]=0; 
$name = $_POST["name"]; 
$pass = ($_POST["password"]); 

$connect = mysql_connect("localhost","tina","tinapassword") or die("Could not connect"); 

$selected = mysql_select_db("tinadatabase", $connect) or die("Could not connect to database"); 

$query = "SELECT * FROM users WHERE Uname='$name'"; 
$result = mysql_query($query, $connect); 

$row = mysql_fetch_assoc($result); 

if ($result) 
{ 
    //$row ==1; 
    print "Record found"; 

} 
else 
{ 
    //$row == 0; 
    print "Record not found"; 
} 
print "<br>"; 

md5($pass); 
if($name == $result["Uname"] && md5('$pass') == $result["Upassword"]) 
{ 
    $_SESSION["authorized"] = 1;  
} 
else 
{ 
    $_SESSION["authorized"] = 0; 
} 
print "<br>"; 
print"<a href='page3.php'> continue</a>"; 
?> 
+0

Добро пожаловать в программисты. Пожалуйста, прочитайте страницу [about] (http://programmers.stackexchange.com/about). Этот вопрос относится к StackOverflow. Я поставлю флажок для переноса. –

+0

Извините, не знал, как использовать эту страницу Я ценю помощь –

+2

Вы используете [** устаревший ** API баз данных] (http://stackoverflow.com/q/12859942/19068) и должны использовать [современный замена] (http://php.net/manual/en/mysqlinfo.api.choosing.php). Вы также уязвимы для [SQL-инъекций] (http://bobby-tables.com/) **, что современный API упростит [защиту] (http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php). – Quentin

ответ

0

Как уже упоминалось, mysql_num_rows() - ваш ответ здесь. Главное здесь, что вы также используете $result в качестве ассоциативного массива, когда вы должны использовать $row. Я переписал ваш код:

<?php 

session_start(); 

$name = $_POST["name"]; 
$pass = $_POST["password"]; 

$conn = mysql_connect("localhost","tina","tinapassword") or die("Could not connect to MySQL server."); 

if (!$conn) { 
    echo "Unable to connect to DB: " . mysql_error(); 
    exit; 
} 

if (!mysql_select_db("tinadatabase")) { 
    echo "Unable to select <strong>tinadatabase</strong>: " . mysql_error(); 
    exit; 
} 

$sql = "SELECT * FROM users WHERE Uname='$name'"; 

$result = mysql_query($sql); 

if (!$result) { 
    echo "Could not successfully run query (<strong>$sql<strong>) on DB: " . mysql_error(); 
    exit; 
} 

if (mysql_num_rows($result) == 0) { 
    echo "Record not found."; 
    exit; 
} else 
    echo "Record found." 

$row = mysql_fetch_assoc($result); 

print "<br>"; 

md5($pass); 

if($name == $row["Uname"] && md5($pass) == $row["Upassword"]) { 
    $_SESSION["authorized"] = 1; 
    print "<a href='page3.php'>continue</a>"; 
} else { 
    $_SESSION["authorized"] = 0; 
    print "Username or password incorrect."; 
} 

mysql_free_result($result); 

?> 

Теперь я не тестировал его, но он выглядит прямо на меня. Дайте мне знать, если это сработает!

+0

Спасибо, что сделал работу. У меня есть чтение правильных данных. Теперь я очень благодарен за помощь. –

0

mysql_query возвращает ли преуспели запрос. Нулевые записи Findig - это успех.

Вы должны проверить $row или проверить длину результирующего набора.

Примечание: проверьте комментарии, у вашего кода много проблем.

+0

Спасибо, но что вы имели в виду? Примечание: проверьте комментарии? –

0

$result будет истинным значением - даже если строки не были возвращены - если не была ошибка с запросом. Вам нужно count the number of rows, чтобы узнать, были ли какие-либо совпадения.

(Но см. Мои комментарии к вопросу, вы не должны использовать этот API баз данных в первую очередь).

0

Я думаю, что приведенные выше комментарии полезны: посмотрите на команду prepare command и bind variables. Кроме того, вы ссылаетесь на $ result вместо $ row.

Я бы также сделал выборку после проверки на $ result. Также полезно использовать (! ($ Result === false)) (т. Е. Проверить, что это не является ложным). Я также думаю, что это хорошая практика для использования! Strcmp() для точного сравнения строк. Сказав все это, вы можете упростить все, выполнив подсчет совпадений для имени пользователя и пароля (хешированный). Очевидно, это не подходит, если вам нужно выбрать другие данные из таблицы пользователей в вашем запросе. Этот метод сохраняет вас сделать проверку на NUM_ROWS и т.д. выделенный текст

Я не использую MySQL так же, как Oracle и Postgres, так извините, если синтаксис немного неправильно, но .. предполагается, что ваш UPassowrd использует md5() хэш пароля ...

$hpass=md5($pass); 
$query = "SELECT count(1) FROM users WHERE Uname='$name' and UPassword='$hpass'"; 
$result = mysql_query($query, $connect); 

$_SESSION["authorized"] = 0; 
if (!($result === false)) 
{ 
    $row = mysql_fetch_row($result); 

    echo "Query Worked<br>"; 
    // count(1) result of anything other than 0 is a match - though any more than 1 might be an issue. 
    $_SESSION['authorized']=((intval($row[0]) == 0)?0:1); 
} else { 
    echo "Query Failed<br>"; 
    exit; 
} 
echo "<br>"; 
echo"<a href='page3.php'> continue</a>"; 

Не уверен в том, продолжать HREF к PAGE3 является conditonal об уполномоченной стоимости.

+0

yes my page3.php зависит от разрешенного значения, и это то, что это такое
You must log in first"; } ?> Теперь он говорит, что пароли не совпадают,

Смежные вопросы