Что не так с моим PHP/SQL Query (не читает из SQL)(система входа в систему)
Я кодирую систему входа в систему, и в написанном мной php-коде нет сообщений об ошибках, а когда я использую неправильный пароль, все равно не появляется сообщений об ошибках или успехах. У меня такое ощущение, что PHP не читает SQL, но может ли один из вас указать на это и сказать мне, как это исправить?
<?php
$accounts = mysql_connect("localhost" , "root" , "placeholder") or die (mysql_error());
$loginname = $_POST['loginname'];
$password = $_POST['password'];
$needle = '@';
$search = strpos($loginname, $needle);
if ( isset($loginname) )
{
mysql_select_db("nematznetwork", $accounts);
//$username = "test <br>";
//$password = 'pass';
//$accounts;
//echo $loginname . "<br>";
//echo $password;
if($search === FALSE)
{
//USERNAME
$username = $loginname;
$usernamesql = "SELECT * FROM users WHERE username='" . $username . "'";
$usernameresults = mysql_query($usernamesql, $accounts);
while($usernamerow = mysql_fetch_array($usernameresults))
{
$usernamecorrect = 'yes';
$dbpassword = $usernamerow['password'];
}
}
else
{
//EMAIL
$email = $loginname
$emailsql = "SELECT * FROM users WHERE email='" . $email . "'";
$emailresults = mysql_query($emailsql, $accounts);
while($emailrow = mysql_fetch_array($emailresults))
{
$usernamecorrect = 'yes';
$dbpassword = $emailrow['password'];
}
}
if($dbpassword == $password)
{
//COOKIE GOES HERE
//NO COOKIE YET
}
else
{
//PASSWORD ERROR GOES HERE
$error = 'true';
}
}
else
{
//NO USER NAME VARIABLE GOES HERE
$error = 'true';
}
if ( isset($usernamecorrect) )
{
}
else
{
//WRONG USER NAME VARIABLE GOES HERE
$error = 'true';
}
if ( isset($error) )
{
//ERROR MESSAGE FOR INCORRECT USERNAME/EMAIL/PASSWORD
echo "<script type='text/javascript'>\n";
echo "alert('The Username/Email or Password you entered was incorrect.');\n";
echo "window.location = “http://www.google.com;\n";
echo "</script>";
}
else
{
}
?>
2 ответа
Я бы порекомендовал использовать функцию для проверки входа в систему, так что вы можете использовать "return FALSE;" везде что-то пошло не так.
Вот пример, также добавлена константа DEBUG, которая может быть ИСТИНА или ЛОЖЬ в зависимости от того, хотите ли вы отладочный вывод или просто используете функцию.
<?php
define('DEBUG', TRUE);
if(login($_POST['loginname'], $_POST['password']))
{
// cookies and stuff
}
else
{
// error message and stuff
}
function login($username, $password)
{
$database_link = mysql_connect("localhost" , "root" , "placeholder");
if(!$database_link)
{
if(DEBUG)
{
die("Failed to connect to database: " . mysql_error());
}
return FALASE;
}
mysql_select_db("nematznetwork", $database_link);
if(strpos($username, '@'))
{
$search_field = 'email';
}
else
{
$search_field = 'username';
}
$query = "SELECT * FROM useres WHERE {$search_field} = '" . mysql_real_escape_string($_POST['loginname']) ."'";
$resource = mysql_query($query, $database_link);
if(!$resource)
{
if(DEBUG)
{
die("Failed to query database: " . mysql_error());
}
return FALASE;
}
$result = mysql_fetch_assoc($resource);
if(!$result)
{
if(DEBUG)
{
die("Username not found");
}
return FALSE;
}
if(!$result['password'])
{
if(DEBUG)
{
die("User have no password");
}
return FALSE;
}
if($result['password'] == $password)
{
return TRUE;
}
else
{
if(DEBUG)
{
die("Wrong password");
}
return FALSE;
}
}
?>
И как говорит Робертс, функции mysql_ устарели в PHP 5.5
Очень сложно дать вам четкий ответ, так как существует ряд причин, по которым вы можете не получить ни ответа, ни ошибок.
Проблема с компьютерами в том, что они делают то, что вы им говорите.
Во-первых, жизненно важно, чтобы вы не отправляли на свой сервер неэкранированный пользовательский ввод, особенно это так. Существуют "универсальные пароли", которые легко разблокируют эту систему. Убедитесь, что вы используете mysqli_real_escape_string или подготовленные операторы.
Во-вторых, пожалуйста, начните с правильного пути, используя mysqli_* или PDO, а не mysql_*, который скоро будет удален.
В-третьих, рассмотрите хранение паролей как хеш.
Чтобы отладить это, вам нужно протестировать каждый уровень. Выводим ваш SQL и выводим результат запроса. Скоро станет очевидно, что данные, которые вы получаете из вашей БД, не соответствуют ожидаемым данным.
В целом, я бы назвал этот код читателем и начал бы заново. Безопаснее и стоит вашего времени.