Проблема с входом в MySQL и переполнением стека

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

Вот с чем я работаю:

<?php

//begin our session
session_start();

//Check the username and password have been submitted
if(!isset( $_POST['Username'], $_POST['Password']))
{
$message = 'Please enter a valid username and password';
}

else
{
//Enter the valid data into the database
$username = filter_var($_POST['Username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['Password'], FILTER_SANITIZE_STRING);

//Encrypt the password
$password = sha1($password);

//Connect to the database
$SQLusername = "root";
$SQLpassword = "";
$SQLhostname = "localhost";
$databaseName = "jfitness";

try
{
//connection to the database
$dbhandle = mysql_connect($SQLhostname, $SQLusername, $SQLpassword)
or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";

//select a database to work with
$selected = mysql_select_db($databaseName, $dbhandle)
or die("Could not select database");

$query = "SELECT * FROM
customers WHERE name =
('$_POST[Username]' AND password = '$_POST[Password]')";

$result = mysql_query($query) or die(mysql_error());
$count = mysql_num_rows($result);

if($count == 1)
{
$_SESSION['username'] = $username;
}
else
{
echo "Invalid Login Credentials";
}

if(isset($_SESSION['username']))
{
$username = $_SESSION['username'];
echo "Hello " . $username;
}

}
catch(Exception $e)
{

$message = 'We are unable to process your request. Please try again later"';
}}
?>
<html>
<head>
<title>Login</title>
</head>
<body>
</body>
</html>
<html>
<head>
<title>Login</title>
</head>
<body>
<h2>Login Here</h2>
<form action="loginSubmit.php" method="post">
<fieldset>
<p> <label for="Username">Username</label>
<input type="text" id="Username" name="Username" value="" maxlength="20" />
</p>
<p>
<label for="Password">Password</label>
<input type="text" id="Password" name="Password" value="" maxlength="20" />
</p>
<p>
<input type="submit" value="Login" />
</p>
</fieldset>
</form>
</body>
</html>
//Enter the valid data into the database
$username = filter_var($_POST['Username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['Password'], FILTER_SANITIZE_STRING);

//Encrypt the password
$password = sha1($password);

//Connect to the database
$SQLusername = "root";
$SQLpassword = "";
$SQLhostname = "localhost";
$databaseName = "jfitness";

try
{
//connection to the database
$dbhandle = mysql_connect($SQLhostname, $SQLusername, $SQLpassword)
or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";

//select a database to work with
$selected = mysql_select_db($databaseName, $dbhandle)
or die("Could not select database");

$sql = "INSERT INTO
customers (name, password)
VALUES
('$_POST[Username]','$_POST[Password]')";

if(!mysql_query($sql, $dbhandle))
{
die('Error: ' . mysql_error());
}

//Unset the form token session variable
unset( $_SESSION['formToken'] );

echo "1 record added";

//close the connection
mysql_close($dbhandle);

}
catch (Exception $ex)
{
if($ex->getCode() == 23000)
{
$message = 'Username already exists';
}
else
{
$message = 'We are unable to process your request. Please try again later"';
}

1

Решение

Это может быть из-за того, как у вас есть скобки.
-Пожалуйста, смотрите мои заметки об использовании подготовленных заявлений и password_hash() ниже.

SELECT * FROM customers
WHERE name = ('$_POST[Username]'
AND password = '$_POST[Password]')

Измените это на:

SELECT * FROM customers
WHERE name = '$username'
AND password = '$password'

и в целях тестирования попробуйте удалить

$password = filter_var($_POST['Password'], FILTER_SANITIZE_STRING);

это может повлиять на / отклонение персонажей. Убедитесь также, что нет пробелов.

Также меняется if($count == 1) в if($count > 0)

или замена $count = mysql_num_rows($result); if($count == 1) { с if(mysql_num_rows($result) > 0){

Ваш пароль не хэшируется
После тестирования вашего кода Adduser я заметил, что ваш хешированный пароль не сохраняется как хеш.

+ Изменить ('$_POST[Username]','$_POST[Password]') на странице Adduser, чтобы ('$username','$password'),

Я предлагаю вам перейти к mysqli с подготовленными заявлениями, или же PDO с подготовленными заявлениями, они намного безопаснее.

В существующем коде ваш код открыт для SQL-инъекция.

Вот хороший сайт, использующий PDO с подготовленными заявлениями и password_hash(),

Смотрите также:

CRYPT_BLOWFISH или PHP 5.5 password_hash() функция.
Для PHP < 5.5 использовать password_hash() compatibility pack.

4

Другие решения

Попробуй это, приятель

$query = "select * from customer where name = '" .$username ."' and password = '" .$password ."'";
//use the SANITIZED data

$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
if($row) {
$_SESSION['name'] = $row['name'];
$_SESSION['password'] = $row['password'];}
else {  //not found
header('Location: go back.php?error=2');
}

echo "Hello " . $username;
0

По вопросам рекламы [email protected]