当前位置: 首页 > 知识库问答 >
问题:

php登录页面-当我插入有效数据时,它不工作,但当我插入无效数据时,它工作正常[重复]

宗政小林
2023-03-14

我有个问题。我正在建立自己的登录页面,我有一些麻烦。当我测试我的页面,我插入无效的用户名和密码代码作品伟大。但是当我插入数据库中存在的数据时,它只是跳过了if(isset($_POST[but_submit]))部分。这里会出什么问题?这是我的代码:

PHP:

  <?php include ("config.php");

 if(isset($_POST['but_submit'])){

     $uname = mysqli_real_escape_string($con,$_POST['txt_uname']);
     $password = mysqli_real_escape_string($con,$_POST['txt_pwd']);

     if ($uname != "" && $password != ""){

         $sql_query = "select count(*) as cntUser from users where Username='".$uname."' and passwrd='".$password."'";
         $result = mysqli_query($con,$sql_query);
         $row = mysqli_fetch_array($result);

         $count = $row['cntUser'];

         if($count > 0){

             $_SESSION['uname'] = $uname;

             header('Location: welcome.php');
         }else{
             echo "Invalid username and password";
         }

     } }

 ?>

超文本标记语言

<div class="container">
            <form method="post" action="">
            <div id="div_login">
                <h1>Login</h1>
                    <div>
                        <input type="text" class="textbox" id="txt_uname" name="txt_uname" placeholder="Username" />
                    </div>
                    <div>
                        <input type="password" class="textbox" id="txt_uname" name="txt_pwd" placeholder="Password"/>
                    </div>
                    <div>
                        <input type="submit" value="Submit" name="but_submit" id="but_submit" />
                    </div>
                </div>
            </form>
        </div>

我真的很高兴有人能帮我:)谢谢!

共有1个答案

储法
2023-03-14

也许这会奏效?先调试是否缺少字段,然后执行SQL。

require_once 'config.php';

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

if (mysqli_connect_errno()) die(mysqli_connect_error());

# Debug what the issue is
foreach(array('but_submit', 'txt_uname', 'txt_pwd') as $arg)
    if(!isset($_POST[$arg]))
        die("{$arg} field is not set or empty");

# Prevent SQL injection
$stmt = $con->prepare("SELECT COUNT(*) as cntUser FROM users WHERE Username ? AND passwrd = ?");
$stmt->bind_param("ss", $_POST['txt_uname'], $_POST['txt_pwd']);
if(!$stmt->execute()){ mysqli_error($con); }
$stmt->store_result();

# Check the row count is more than 0
if($stmt->num_rows != 0) {
    session_start(); # Start session, if config.php already does this you can remove this
    $_SESSION['uname'] = $_POST['txt_uname']; # Think about injects here - use the database record not untrusted POST data
    header('Location: ' . sprintf("%s://%s/welcome.php", isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', $_SERVER['SERVER_NAME']));
    exit();
}

# Nothing was returned
die('Incorrect username / password combination');

需要注意的是,您不应该在会话中存储用户名,这应该是一个令牌,在您的案例中,用户名作为参数提供给该令牌:

$_SESSION['token'] = \Firebase\JWT\JWT::encode(array('username' => $_POST['uname']), 'your secret');

然后在您的Welcome.php文件中,您可以像这样解码它(建议构建某种控制器来完成此操作):

$user = \Firebase\JWT\JWT::decode($_SESSION['token'], 'your secret', array('HS256'));
echo $user['username'];

另一件需要注意的事情是,最好将数据从数据库中取出,这样您就可以使用它们的唯一ID创建一个令牌以及您希望包含的其他标识(远离敏感信息)。

 类似资料:
  • 我的PHP代码中的插入数据sql命令不工作。有人能帮帮忙吗? 我有一个注册表,它从输入字段(姓名、姓氏、电子邮件、用户名和密码)中获取值 用户在此字段中输入的值应保存到我的表“users”中,该表有以下列(ID[主键/INT]、name[文本]、lastname[文本]、e-mail[变量字符]、username[变量字符]和password[变量字符])。 这是我目前的代码:

  • 我是javafx的新手,所以请原谅我的愚蠢错误,我使用javafx创建了一个注册fxml,但是当我试图存储数据时,它总是会把它扔到我的modelcontroller的catch块中,在那里我有一个sql的insert查询 这是我的modelcontroller将我的注册数据插入数据库 它总是抛出modelContoller中的catch块,我通过调试器检查过它

  • 我试图一次将多行插入数据库。 用户最多可以添加5个新行,以便将血液结果插入数据库。 有一个添加更多按钮允许他们这样做。 我有一个循环来遍历每个条目,但是当我单击submit时,只会提交一个条目。第一,我不确定我哪里出了问题,任何帮助都将不胜感激。 循环在这个代码块的底部,但我不确定这就是问题所在。

  • 我必须向MySQL数据库发送一个INSERT查询,假设所有变量都设置正确,我使用以下代码: 变量被正确设置为result,正如我在使用时看到的那样,但现在在数据库中插入了行。 奇怪的是,如果调用MySQL错误日志,可以清楚地看到insert被正确地发送到数据库,如下所示: 但它没有出现在表格中。 有什么建议吗?谢谢

  • 当我想从inflxdb备份一些数据时,会发生这样的情况: [root@bj-collection-01 opt]#inflxd backup-database clireport-host localhost:8086/opt/clireportbak/ 2018/04/16 10:17:12将metastore备份到/opt/clireportbak/meta.00 2018/04/16 10: