Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL登录时不返回1_Php_Mysql - Fatal编程技术网

PHP MySQL登录时不返回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)

如果($loginsucess==1),我下面的代码不会转到
。每次我尝试登录时,它都会将我指向代码的
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将自动将带引号的整数转换为整数。