无法访问 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_dump
即 string(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[]);
}
我正在尝试此处给出的 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_dump
即 string(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[]);
}