PHP MySQL登录时不返回1
如果($loginsucess==1),我下面的代码不会转到PHP MySQL登录时不返回1,php,mysql,Php,Mysql,如果($loginsucess==1),我下面的代码不会转到。每次我尝试登录时,它都会将我指向代码的else{部分 <?PHP session_start(); $userid = $_POST['userid']; $password = $_POST['password']; $loginsuccess = 0; $con = mysqli_connect('localhost', 'root'); if (!$con)
。每次我尝试登录时,它都会将我指向代码的else{
部分
<?PHP
session_start();
$userid = $_POST['userid'];
$password = $_POST['password'];
$loginsuccess = 0;
$con = mysqli_connect('localhost', 'root');
if (!$con)
{
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con, 'btr');
$result = mysqli_query("SELECT * FROM user WHERE UserID='" . $userid . "'");
while($row = mysqli_fetch_array($result))
{
if ( $row['password'] == $password ){
$loginsuccess = 1;
}
}
mysqli_close($con);
?>
试验
$('.login').live(“页面创建”,函数(){
setTimeout(“重定向索引();”,3000);
});
试验
登录成功。您将在3秒钟内重定向到主页…
试验
$('.login').live(“页面创建”,函数(){
setTimeout(“重定向_login();”,3000);
});
试验
无效的id或密码。您将在3秒内重定向到登录页面…
试验
该方法需要以下参数:
- 数据库连接资源,以及
- 要运行的查询
$result = mysqli_query($con, "SELECT * FROM user WHERE UserID='" . $userid . "'");
while ($row = mysqli_fetch_assoc($result)) {
为了重申应用程序的安全性,您似乎正在以明文形式将用户密码存储在数据库中,并为自己设置SQL注入风险。下面的脚本通过使用准备好的语句(
prepare
,bind_param
和execute
)来减轻这些风险以及从5.5开始包含在PHP中的密码函数
请注意,在运行完密码后,必须将其插入数据库;然后,可以使用来验证密码
$successful_login = false;
$query = 'SELECT password FROM user WHERE UserID = ?';
$stmt = mysqli_prepare($con, $query);
$stmt->bind_param('s', $userid);
$stmt->bind_result($row_passwd);
$stmt->execute();
if ($stmt->fetch()) {
$successful_login = password_verify($password, $row_passwd);
}
if ($successful_login) {
echo 'Account validated.';
}
该方法需要以下参数:
- 数据库连接资源,以及
- 要运行的查询
$result = mysqli_query($con, "SELECT * FROM user WHERE UserID='" . $userid . "'");
while ($row = mysqli_fetch_assoc($result)) {
为了重申应用程序的安全性,您似乎正在以明文形式将用户密码存储在数据库中,并为自己设置SQL注入风险。下面的脚本通过使用准备好的语句(
prepare
,bind_param
和execute
)来减轻这些风险以及从5.5开始包含在PHP中的密码函数
请注意,在运行完密码后,必须将其插入数据库;然后,可以使用来验证密码
$successful_login = false;
$query = 'SELECT password FROM user WHERE UserID = ?';
$stmt = mysqli_prepare($con, $query);
$stmt->bind_param('s', $userid);
$stmt->bind_result($row_passwd);
$stmt->execute();
if ($stmt->fetch()) {
$successful_login = password_verify($password, $row_passwd);
}
if ($successful_login) {
echo 'Account validated.';
}
请检查这行代码:
$result = mysqli_query("SELECT * FROM user WHERE UserID='" . $userid . "'");
我认为SQL查询不需要单引号。(例如:SELECT*FROM user WHERE UserID='UserID'
)如果使用单引号,则UserID将被解释为文本而不是数字。在这种情况下,它将找不到任何用户条目,并且在一行中没有密码
$successful_login = false;
$query = 'SELECT password FROM user WHERE UserID = ?';
$stmt = mysqli_prepare($con, $query);
$stmt->bind_param('s', $userid);
$stmt->bind_result($row_passwd);
$stmt->execute();
if ($stmt->fetch()) {
$successful_login = password_verify($password, $row_passwd);
}
if ($successful_login) {
echo 'Account validated.';
}
试试这句话:
$result = mysqli_query("SELECT * FROM user WHERE UserID=" . $userid);
请检查这行代码:
$result = mysqli_query("SELECT * FROM user WHERE UserID='" . $userid . "'");
我认为SQL查询不需要单引号。(例如:SELECT*FROM user WHERE UserID='UserID'
)如果使用单引号,则UserID将被解释为文本而不是数字。在这种情况下,它将找不到任何用户条目,并且在一行中没有密码
$successful_login = false;
$query = 'SELECT password FROM user WHERE UserID = ?';
$stmt = mysqli_prepare($con, $query);
$stmt->bind_param('s', $userid);
$stmt->bind_result($row_passwd);
$stmt->execute();
if ($stmt->fetch()) {
$successful_login = password_verify($password, $row_passwd);
}
if ($successful_login) {
echo 'Account validated.';
}
试试这句话:
$result = mysqli_query("SELECT * FROM user WHERE UserID=" . $userid);
哪一部分?哪一部分?如果部分?SCNR从不存储纯文本密码!请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用
密码\u散列()
。在散列之前,无需对其执行或使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。说了解语句。即使是也不安全!无论你做什么,都不要使用此代码。还有哪部分?如果是哪部分?SCNR永远不要存储纯文本密码!请使用PHP处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用password\u hash()
。在散列之前,不必对其使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。说“了解”语句。即使是也不安全!无论您做什么,都不要使用此代码。谢谢。但更改为assoc后仍然不起作用。问题:您确定它是安全的吗进入while循环?您可以var\u dump($row)
在while循环中查看$row
采用的格式。如果添加该行后没有看到任何内容,则下一步要查看您的查询。我认为mysqli\u fetch\u数组
返回了两个索引。@chris85哇,你说得对。我想的是mysqli\u fetch\u row
是的,已解决。这是资源参数ter.现在这已经开始工作了。我将研究修改它以避免SQL注入。谢谢Chris Forrence和@chris85Thank。但是在更改为assoc后仍然不工作。问题:你确定它将进入while循环吗?你可以var\u dump($row)
在while循环中查看$row
采用的格式。如果添加该行后没有看到任何内容,则下一步要查看您的查询。我认为mysqli\u fetch\u数组
返回了两个索引。@chris85哇,你说得对。我想的是mysqli\u fetch\u row
是的,已解决。这是资源参数ter.现在,这已经起作用了。我将研究修改它以避免SQL注入。感谢Chris Forrence和@chris85Mysql将自动将带引号的整数转换为整数。Mysql将自动将带引号的整数转换为整数。