PHP:如何从另一个php文件中的_POST获取变量(使用苗条)

时间:2018-09-29 00:16:52

标签: php authentication post slim

我正在尝试学习如何使用苗条的框架为网站创建注册和身份验证。我的目标是创建一个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函数中,但是同样,我也不知道为什么未正确保存名称。

1 个答案:

答案 0 :(得分:1)

通常认为以这种方式访问​​全局变量是错误的形式。在运行苗条的过程中,它们具有一个供您使用的请求对象,供您使用,它已经传递给您:

$myArgs = $request->getQueryParams();
foreach($myArgs as $key => $value){
    echo $key . '=>' . $value . PHP_EOL;
}

也就是说,您的问题的原因是:

$response->withRedirect(..)

这会向浏览器返回http 302重定向到新网址的信息。这是第二击。第一个匹配项是对/ auth的POST,第二个匹配项是对/welcome.php的GET请求

让我惊讶的另一件事是您在/ auth上的逻辑路径。如果在$ _POST中设置了“用户名”,则首先要将它们发送给welcome.php,其他代码(如对authUser(..)函数的调用)将永远不会执行。由于您从未将$ _SESSION ['username']设置为任何值,因此它仍然为空。

最后我要说的只是一个风格点;我个人尝试尽可能在字符串上使用单引号(')并避免使用双引号(“),因为双引号告诉PHP字符串中可能包含特殊标记,可能需要对其进行解析。如果您不解析标记,则只需使用单引号。除此之外,欢迎使用PHP,很高兴看到您的作品!