Php - 如何从另一个文件中获取可变数据并在另一个文件中回显?

时间:2017-01-04 17:54:57

标签: php mysqli

我正在尝试创建登录表单,如果存在用户名,则从数据库进行检查,如果是,则将其重定向到另一个页面,其中显示welcome + username,我想知道是否需要会话来达到条件或不?因为我的代码没有错误,也没有显示欢迎消息。

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

的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>

管理-panel.php

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

1 个答案:

答案 0 :(得分:2)

重定向用户时:

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 parameters并且进入password hashing,因为目前您的代码非常对攻击开放。