2014-01-24 2 views
0

На данный момент я работаю над своим первым скриптом входа. В моем сценарии я пытаюсь подтвердить, существует ли имя пользователя, если пользователь активен, то, что является идентификатором пользователя, и если имя пользователя и пароль совпадают или нет. (См. Код ниже)Запрос не работает над скриптом входа

function sanitize($con, $data) { 
return mysqli_real_escape_string($con, $data); 
} 

function user_exists($username, $con) { 
$username = sanitize($con, $username); 
$query = mysqli_query($con, "SELECT COUNT(*) FROM users WHERE username='$username'") or die (mysqli_error()); 
$result = mysqli_fetch_row($query); 
return ($result[0] == 1) ? true : false; 
} 

function user_active($username, $con) { 
$username = sanitize($con, $username); 
$query = mysqli_query($con, "SELECT COUNT(*) FROM users WHERE username='$username' AND active=1") or die (mysqli_error()); 
$result = mysqli_fetch_row($query); 
return ($result[0] == 1) ? true : false; 
} 

function user_id_from_username ($username, $con) { 
$username = sanitize($con, $username); 
$query = mysqli_query($con, "SELECT user_id FROM users WHERE username='$username'") or die (mysqli_error()); 
$result = mysqli_fetch_row($query); 
return $result[0]; 
} 

function login($username, $password, $con) { 
$user_id = user_id_from_username($con, $username); 
$username = sanitize($con, $username); 
$password = md5($password); 
$query = mysqli_query($con, "SELECT COUNT(*) FROM users WHERE username='$username' AND password='$password'") or die (mysqli_error()); 
$result = mysqli_fetch_row($query); 
return ($result[0] == 1) ? true : false; 
} 

Я попытался подтвердить вывод правильных данных, написав приведенный ниже код.

if (user_exists('susievanveen', $con) === true) { 
echo 'user exists'; 
} 
else { 
echo 'user doesn\'t exist'; 
} 

if (user_active('susievanveen', $con) === true) { 
echo ' and user is active.'; 
} 

else { 
echo ' and user is not active yet.<br><br>'; 
} 

echo 'User ID = ', user_id_from_username($username='susievanveen', $con); 
echo '<br>Active = ', user_active($username='susievanveen', $con); 
echo '<br>Match found between username and password = ', login($username='susievanveen', $password='password', $con); 

Я получаю правильные результаты о пользователе, независимо от того, активен он или нет, и это идентификатор пользователя. Но он не вернет никаких данных о том, соответствуют ли имя пользователя и пароль или нет. Так может кто-нибудь сказать мне, что не так с этим кодом?

+0

Просто пара мыслей: в состоянии возврата: '$ результата [0] == 1', вы должен обязательно изменить его на '$ result [0] === 1' (обратите внимание на extra =). Кроме того, MD5 не подходит для хранения паролей. Кроме того, ваши вызовы функций в операторах echo должны быть просто: 'user_id_from_username ('susievanveen', $ con)', оставьте часть '$ username ='. –

+0

Имеет ли пароль какие-либо символы, нуждающиеся в дезинфекции? это может быть беспорядок с паролем пользователя md5. –

ответ

0
echo '<br>Match found between username and password = ', login($username='susievanveen', $password='password', $con); 

Вы кома вместо полной остановки должно быть: -

echo '<br>Match found between username and password = ' . login($username='susievanveen', $password='password', $con); 
+0

Спасибо за комментарий, но это не решило проблему. – Tijmen

+0

Хорошо, какие биты вы уверены в правильности - попробуйте повторить каждый шаг - или используя 'print_r ($ result [0])' на каждом шаге - он СМОТРЕТЬ, как будто он должен работать, но поскольку мы не можем видеть базу данных или вывод I не вижу, где проблема может быть –

+0

Я ее исправил. Я удалил user_id_from_username из функции и поместил ее в возвратную часть. Не знаю, почему это работает сейчас. Вы? Например: function login ($ username, $ password, $ con) { $ username = sanitize ($ con, $ username); $ password = md5 ($ password); $ query = mysqli_query ($ con, "SELECT COUNT (*) FROM users WHERE username = '$ username' AND password = '$ password'") или die (mysqli_error()); $ result = mysqli_fetch_row ($ query); return ($ result [0] == 1)? user_id_from_username ($ username, $ con): false; } – Tijmen

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