PHP:如何从另一个 php 文件中的 _POST 获取变量(使用 slim)
PHP: How to grab a variable from _POST in an other php file (using slim)
人
我正在尝试学习如何使用 slim 框架为网站创建注册和身份验证。我的 objective 是为 POST 创建一个处理程序,当正确验证后,该网站将保存用户名和名称。这样下次用户访问该页面时,网站就会通过说出他们的名字来迎接他们。我将通过两个单独的 PHP 文件来执行此操作,但我认为问题出在这个 PHP 文件中。
这是我目前拥有的:
$app->post('/users', function (Request $request, Response $response, array $args) {
$user = array('username'=> $_POST['username'], 'password' => $_POST['password'], 'name' => $_POST['name']);
$res = saveUser($user);
if($result === true) { return $response->withRedirect('login.html', 302); }
return $response->withRedirect('registration.html#',$result,302); });
$app->post('/auth', function (Request $request, Response $response, array $args) {
if(isset($_POST['username']) {
return $response->withRedirect('welcome.php', 302);
}
if(authUser($_POST['username'], $_POST['password']) === true) {
$_SESSION["username"] = $_POST['username'];
$_SESSION["name"] = $_POST['name'];
return $response->withRedirect('welcome.php', 302);
}
else { //authentication doesn't work, destroy session and go to login page
session_destroy();
return $response->withRedirect('login.html',302);
}
根据我的理解,用户名、密码和用户的真实姓名应该保存在_POST中。但是,当我使用:
var_dump($_POST);
密码和用户名是调用时唯一显示的。这让我相信这就是为什么我的 "welcome.php" 不问候用户。
这是我的 welcome.php 的内容:
<?php session_start(); ?>
!DOCTYPE html
<title> Welcome! </title>
<h1> Welcome Page </h1>
<section>
<p>
<?php
if(isset($_SESSION['name'])) { echo "Grettings " . $_SESSION['name']. "! ";}
?> Click <a href="login.html">here to login</a> OR <a href="registration.html"> here for registration</a>.
</p>
</section>
我想我的错误一定是我尝试调用它的方式或在 isset 函数中,但是同样,我不知道为什么名称没有被正确保存。
大多数人认为以这种方式访问全局变量是一种不好的形式。由于您 运行 苗条,他们有一个请求对象可供您使用,您已经传入:
$myArgs = $request->getQueryParams();
foreach($myArgs as $key => $value){
echo $key . '=>' . $value . PHP_EOL;
}
也就是说,您的问题的原因是:
$response->withRedirect(..)
这 returns 给浏览器一个 http 302 重定向到一个新的 url。这是第二次打击。第一次命中是对 /auth 的 POST,第二次命中是对 /welcome.php
的 GET 请求
另一件让我印象深刻的事情是你在 /auth 上的逻辑路径。如果在 $_POST 中设置了 'username',那么您首先要将它们发送到 welcome.php,其他代码(如对 authUser(..) 函数的调用)永远不会得到执行。由于您从未将 $_SESSION['username'] 设置为任何内容,它仍然是空白的。
我最后要说的只是风格点;我个人尝试尽可能对字符串使用单引号 (') 并避免使用双引号 ("),因为双引号告诉 PHP 该字符串可能包含可能需要解析的特殊标记。如果您不这样做解析标记,只需使用单引号。除此之外,欢迎来到 PHP,我很高兴看到你做了什么!
人
我正在尝试学习如何使用 slim 框架为网站创建注册和身份验证。我的 objective 是为 POST 创建一个处理程序,当正确验证后,该网站将保存用户名和名称。这样下次用户访问该页面时,网站就会通过说出他们的名字来迎接他们。我将通过两个单独的 PHP 文件来执行此操作,但我认为问题出在这个 PHP 文件中。
这是我目前拥有的:
$app->post('/users', function (Request $request, Response $response, array $args) {
$user = array('username'=> $_POST['username'], 'password' => $_POST['password'], 'name' => $_POST['name']);
$res = saveUser($user);
if($result === true) { return $response->withRedirect('login.html', 302); }
return $response->withRedirect('registration.html#',$result,302); });
$app->post('/auth', function (Request $request, Response $response, array $args) {
if(isset($_POST['username']) {
return $response->withRedirect('welcome.php', 302);
}
if(authUser($_POST['username'], $_POST['password']) === true) {
$_SESSION["username"] = $_POST['username'];
$_SESSION["name"] = $_POST['name'];
return $response->withRedirect('welcome.php', 302);
}
else { //authentication doesn't work, destroy session and go to login page
session_destroy();
return $response->withRedirect('login.html',302);
}
根据我的理解,用户名、密码和用户的真实姓名应该保存在_POST中。但是,当我使用:
var_dump($_POST);
密码和用户名是调用时唯一显示的。这让我相信这就是为什么我的 "welcome.php" 不问候用户。
这是我的 welcome.php 的内容:
<?php session_start(); ?>
!DOCTYPE html
<title> Welcome! </title>
<h1> Welcome Page </h1>
<section>
<p>
<?php
if(isset($_SESSION['name'])) { echo "Grettings " . $_SESSION['name']. "! ";}
?> Click <a href="login.html">here to login</a> OR <a href="registration.html"> here for registration</a>.
</p>
</section>
我想我的错误一定是我尝试调用它的方式或在 isset 函数中,但是同样,我不知道为什么名称没有被正确保存。
大多数人认为以这种方式访问全局变量是一种不好的形式。由于您 运行 苗条,他们有一个请求对象可供您使用,您已经传入:
$myArgs = $request->getQueryParams();
foreach($myArgs as $key => $value){
echo $key . '=>' . $value . PHP_EOL;
}
也就是说,您的问题的原因是:
$response->withRedirect(..)
这 returns 给浏览器一个 http 302 重定向到一个新的 url。这是第二次打击。第一次命中是对 /auth 的 POST,第二次命中是对 /welcome.php
的 GET 请求另一件让我印象深刻的事情是你在 /auth 上的逻辑路径。如果在 $_POST 中设置了 'username',那么您首先要将它们发送到 welcome.php,其他代码(如对 authUser(..) 函数的调用)永远不会得到执行。由于您从未将 $_SESSION['username'] 设置为任何内容,它仍然是空白的。
我最后要说的只是风格点;我个人尝试尽可能对字符串使用单引号 (') 并避免使用双引号 ("),因为双引号告诉 PHP 该字符串可能包含可能需要解析的特殊标记。如果您不这样做解析标记,只需使用单引号。除此之外,欢迎来到 PHP,我很高兴看到你做了什么!