【问题标题】:Php - How to get variable data from another file and echo it in another file?Php - 如何从另一个文件中获取变量数据并将其回显到另一个文件中?
【发布时间】:2017-01-04 17:54:56
【问题描述】:

我正在尝试制作登录表单,从数据库中检查用户名是否存在,如果为真,那么它将我重定向到另一个显示欢迎 + 用户名的页面,我想知道是否需要会话来实现条件或不是?因为我的代码没有错误,也没有显示欢迎信息。

让我解释一下,我在 login.php 中有一个名为“$welcome”的变量,假设在使用有效的用户名和密码提交登录表单时会回显它,然后它将我重定向到 admin-panel.php 并回显变量“$欢迎”。这是我的工作

login.php

<?php
session_start();
include "connection.php";
?>
<?php
if(isset($_POST['submit'])){
    $admin_user = isset($_POST['username']) ? $_POST['username'] : '';
    $admin_pass = isset($_POST['password']) ? $_POST['password'] : '';

    $sql = mysqli_stmt_init($conn);
    if ($sql = mysqli_prepare($conn, "SELECT username, password FROM account WHERE username = ? AND password = ?")){
        mysqli_stmt_bind_param($sql, "ss", $admin_user, $admin_pass);
        mysqli_stmt_execute($sql);
        mysqli_stmt_bind_result($sql, $username,$password);
        mysqli_stmt_fetch($sql);
        mysqli_stmt_close($sql);    
    }
    global $username, $password;

    if(empty($admin_user) || empty($admin_pass)){
        $msg = "<span class='text-danger'> Username or Password Can't be empty </span>";
    } elseif($admin_user != $username || $admin_pass != $password){
        $msg = "<span class='text-danger'> Username or Password is not valid </span>";

    } else{
        header("location:admin-panel.php");
        $welcome = "<h2>Welcome ". $admin_user ."!!!</h2>";
        $_SESSION['welcome'] = $welcome;
    }
    mysqli_close($conn);
}
?>

index.php

<?php
include "login.php";
global $msg;
?>
<!DOCTYPE html>
<html>
<head>
<title>Admin Panel</title>
</head>
<body>
<form method="post">
    <?php if(isset($msg)){ ?>
        <div>
            <?php echo $msg; ?>
        </div>
    <?php } ?>
    <div>
        <label for="username">Username:</label>
        <input type="text" name="username"> 
    </div>
    <div>
        <label for="password">Password:</label>
        <input type="password" name="password">
    </div>

    <div>
        <input type="submit" name="submit">
    </div>
</form>

admin-panel.php

<?php
  session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>Welcome Admin</title>
</head>
<body>
<div>
   <?php
       echo $_SESSION['welcome'];
   ?>
</div>
</body>
</html>

【问题讨论】:

标签: php mysqli


【解决方案1】:

当你重定向用户时:

header("location:admin-panel.php");

用户的浏览器对提供的 URL 发出 全新 请求(特别是 GET 请求)。所以刚才代码所做的一切都结束了,一个全新的请求开始了。该请求对先前请求中的任何内容一无所知。

所以当你包含其他脚本时:

include "login.php";

该脚本执行,但在这种情况下它什么也不做,因为所有内容都包含在一个条件中:

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

并且在这个新请求中条件是false。重定向不是表单提交。


不要尝试包含上一页(完全删除include "login.php";),而是将值存储在服务器的会话状态中并在重定向页面上读取该值。一些简单的事情:

// on the login page:
session_start();
$_SESSION['welcome'] = $welcome;

和:

// on the admin page:
session_start();
echo $_SESSION['welcome'];

请注意,这非常过于简单,只是为了向您介绍这个概念。您可能需要考虑其他一些事情,例如在显示之前检查值,根据需要清理值,并且您肯定想查看prepared statements with query parameterspassword hashing 作为目前您的代码非常容易受到攻击。

【讨论】:

  • @AmrAshraf:在尝试检索之前,该值是否成功存储在会话中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 2014-08-23
  • 2021-04-23
  • 2011-07-06
相关资源
最近更新 更多