无法访问 post 消息中的 html 表单数据 (PHP)

Cannot access html form data in a post message (PHP)

我正在尝试此处给出的 php 示例代码:https://www.tutorialrepublic.com/php-tutorial/php-mysql-login-system.php

这给出了一个登录表单,您可以在其中注册用户名密码,然后使用注册用户登录。欢迎页面仅在您登录后可见,欢迎页面显示当前登录帐户的特定用户名。

我正在尝试修改上面 link 中给出的 welcome.php,以添加一个数据输入表单,将一些个人数据(如姓名和年龄)保存到 mariadb 数据库中。这是我的 welcome.php 文件版本:

<?php
// Initialize the session
session_start();
 
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}

$uname=htmlspecialchars($_SESSION["username"]);
$name = "";
$age = 0;

if($_SERVER["REQUEST_METHOD"] == "POST"){
    // /*
    echo '<script language="javascript">';
    echo 'alert("submit button clicked")';
    echo '</script>';
    // */
    // /*
    $tempvar = trim($_POST["name"]);
    // $tempvar='sdsd';
    var_dump($tempvar);
    if($tempvar == "")
        echo $tempvar.' found';
    // */
}

?>

 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        body{ font: 14px sans-serif; text-align: center; }
    </style>
</head>
<body>
    <div class="page-header">
        <h1>Hi, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Welcome to our site.</h1>
    </div>
    <p>
        <a href="reset-password.php" class="btn btn-warning">Reset Your Password</a>
        <a href="logout.php" class="btn btn-danger">Sign Out of Your Account</a>
    </p>
    <p>Enter your data here:</p>
    <!-- <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> -->
    <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
        Name: <input type="text" name="name"><br>
        Age: <input type="text" name="age"><br>
        <input type="submit" name="save" value="submit">
        <!-- <input type="submit" class="btn btn-primary" value="submit"> -->
    </form>
    
</body>
</html>

如果我理解正确,点击提交按钮应该会生成一个 post 消息,该消息应该被文件开头的 php 脚本捕获。发生了这么多,但我无法显示 <input type="text" name="name"> 给出的文本框的内容。开头的php代码中的var_dump($tempvar);出来的是String(0) ""。我曾尝试将 php 代码移动到单独的文件(如 insert.php 中给定的 here),而不是尝试在同一文件中处理 post 消息,但我得到相同的结果。我没有收到任何错误。

如何访问 post 消息处理程序中文本框的内容?我正在 Windows 10.

的 XAMPP 中对此进行测试

你的代码对我来说工作正常。我在我的系统中 运行 它显示提交的名称 var_dumpstring(18) "Md Shabbir Hossain".

登录示例是否正常工作?这将证明 POSTing 数据有效。

您使用的 PHP 是哪个版本?有一个名为 register_globals up to 5.4.0 的功能允许通过命名变量访问 POST 数据。由于您正在设置 $name = "" 这可能会覆盖您的数据。无论如何我都会在那个位置把它去掉(必要时使用 else 子句)。如果您 register_globals 处于活动状态,请更新 PHP 或将其关闭以避免混淆。

调试问题的下一步是打印 $_POST 的整个数组,就像提到的 here 但更漂亮

if($_SERVER["REQUEST_METHOD"] == "POST"){
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';
    die();

这将向您显示实际值 POSTed

同样可以用 $_SERVER 数组来完成

echo '<pre>';
print_r($_SERVER);
echo '</pre>';
die();
$uname=htmlspecialchars($_SESSION["username"]);

die() 命令将停止执行,因此您需要在希望脚本继续执行时将其删除。

我会修复一些缺陷。

初始用户到达 Welcome.php。

<?php
// Initialize the session
session_start();
 

// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}

$uname=htmlspecialchars($_SESSION["username"]); //username is not defined or it does not exists yet.
$name = "";
$age = 0;

if($_SERVER["REQUEST_METHOD"] == "POST"){
    // /*
    echo '<script language="javascript">';
    echo 'alert("submit button clicked")';
    echo '</script>';
    // */
    // /*
    $tempvar = trim($_POST["name"]);
    // $tempvar='sdsd';
    var_dump($tempvar);
    if($tempvar == "")
        echo $tempvar.' found';
    // */
}

我会这样做:

<?php
// Initialize the session
session_start();
 //Check if the user already logged.
if(!isset($_SESSION["loggedin"])){
    //Redirect
    header("location: login.php");
    exit;
}

// Check if post to login is submitted
if(isset($_POST['save'])){
  // /*
    echo '<script language="javascript">';
    echo 'alert("submit button clicked")';
    echo '</script>';
  $uname = '';
  //Check if Username is submitted
  if(isset($_POST['username'])){
     $_SESSION["username"] = $_POST['username'];
     $uname=htmlspecialchars($_SESSION["username"]);
  }
  $name = "";
  $age = 0;
  

  //For test
  var_dump($_POST[]);
}