PHP: mysql 设置登录

标签 php mysql database mysqli

我很困惑, 我的代码输出这个:

posted login: login

posted password: pass

database login: login

database pass: pass

database id: 1

database user: IDKMyName

database creator: True

database admin: True

database master: True

failed

主要部分是最后一行“failed”,应该是logged in go。发布的用户和数据库用户是相同的,发布的通行证也是相同的,所以 idk。

附言。 echo 只是用于调试,不会出现在最终代码中。

 <?php

session_start();

$db_login = "";
$db_pass = "";
$db_id = "";
$db_user = "";
$db_creator = "";
$db_admin = "";
$db_master = "";

$servername = "localhost";
$username = "root";
$password = "";
$database = "main_db";

// Create connection
$conn = new mysqli($servername, $username, $password, $database);

$submitlogin = $_POST['user'];
$submitpass = $_POST['password'];

$query = $conn->query("SELECT * FROM main_table WHERE login = '$submitlogin' && pass = '$submitpass'", MYSQLI_USE_RESULT);

if ($query) {
   while ($row = $query->fetch_array()) {
       $db_login = $row['login'] . PHP_EOL;
       $db_pass = $row['pass'] . PHP_EOL;
       $db_id = $row['ID'] . PHP_EOL;
       $db_user = $row['user'] . PHP_EOL;
       $db_creator = $row['creator'] . PHP_EOL;
       $db_admin = $row['admin'] . PHP_EOL;
       $db_master = $row['master'] . PHP_EOL;
   }
}

echo "posted login: " . $submitlogin . "<br>";
echo "posted password: " . $submitpass . "<br>";
echo "database login: " . $db_login . "<br>";
echo "database pass: " . $db_pass . "<br>";
echo "database id: " . $db_id . "<br>";
echo "database user: " . $db_user . "<br>";
echo "database creator: " . $db_creator . "<br>";
echo "database admin: " . $db_admin . "<br>";
echo "database master: " . $db_master . "<br>";

if ($submitlogin != $db_login && $submitpass != $db_pass) {

    $_SESSION['ID'] = 'NULL';
    $_SESSION['loggedin'] = 'False';
    $_SESSION['login'] = '';
    $_SESSION['pass'] = '';
    $_SESSION['user'] = '';
    $_SESSION['creater'] = 'False';
    $_SESSION['admin'] = 'False';
    $_SESSION['master'] = 'False';


    echo"failed";
    echo"<a href = '/wip/login/>try again</a>";


}

else {

    $_SESSION['login'] = $db_login;
    $_SESSION['pass'] = $db_pass;
    $_SESSION['id'] = $db_id;
    $_SESSION['user'] = $db_user;
    $_SESSION['creator'] = $db_creator;
    $_SESSION['admin'] = $db_admin;
    $_SESSION['master'] = $db_master;
    $_SESSION['loggedin'] = 'True';

    echo "logged in";
    echo "<a href='/wip/>go</a>";

}

mysqli_close($conn);

?>

最佳答案

您正在向数据库中的数据附加换行符:

$db_login = $row['login'] . PHP_EOL; //<--here

所以你在比较:

"pass" == "pass\n"

如评论中所述,您还有许多其他问题,但这是问题的根本原因

关于PHP: mysql 设置登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46055797/

相关文章:

javascript - 广告内的服务器端图库(php、js?、ajax)

mysql 无法删除或更新父行 : a foreign key constraint fails

mysql - 如何记录没有索引的 mySQL 查询?

MySQL - ORDER BY 与 UNION 的一部分

database - Firebase - 使用云功能定位特定的 Firestore 文档字段

database - 在 codeigniter 中为我的模型更改数据库时遇到问题

php - 奇怪的意外 '$dbname' (T_VARIABLE)

php - HTML ajax 响应不执行 javascript 函数

php - Magento 1.7 按订购数量排序 - 畅销产品问题

asp.net - db4o 与 asp.net MVC 共享主机