PHP: Как получить переменную из _POST в другой файл php (используя slim) - PullRequest
0 голосов
/ 29 сентября 2018

ers

Я пытаюсь узнать, как создать регистрацию и аутентификацию для веб-сайта с использованием Slim Framework.Моя цель состоит в том, чтобы сделать обработчик для 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 голосов
/ 29 сентября 2018

Доступ к глобальным переменным таким способом в большинстве случаев считается дурным тоном.Когда вы работаете в slim, у вас есть объект запроса, который вы можете использовать, который вы уже передаете:

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

Тем не менее, причина вашей проблемы в следующем:

$response->withRedirect(..)

Возвращает браузеру перенаправление http 302 на новый URL.Это второй хит.Первое попадание - это POST для / auth, второе попадание - это запрос GET для /welcome.php

Еще одна вещь, которая бросается в глаза - это ваш логический путь к / auth.Если 'username' установлено в $ _POST, то вы сначала отправляете их в welcome.php, другой код (например, вызов функции authUser (..)) никогда не выполняется.Поскольку вы никогда не устанавливаете $ _SESSION ['username'] на что-либо, оно все еще пустое.

Последнее, что я скажу, это просто точка стиля;Лично я стараюсь использовать одинарные кавычки (') для строк везде, где это возможно, и избегать двойных кавычек ("), так как двойные кавычки говорят PHP, что в строке могут быть специальные токены, которые могут быть проанализированы. Если вы не анализируете токены, простоиспользуйте одинарные кавычки. Кроме того, добро пожаловать в PHP, и я рад видеть, что вы делаете!

...