переместить пользователя на другую страницу, введя правильный пароль с помощью php

0

У меня есть страница входа в систему. Я хочу, чтобы, когда пользователь вводит правильное имя пользователя и пароль, страница, которую он хочет открыть для него. и если пароль и имя пользователя неверны, он получает сообщение об ошибке на текущей странице. и еще одна проблема заключается в том, что при первом открытии страницы у вас есть неопределенная ошибка индекса PHP.

<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post">
       <div class="data">
       <label for="name">username: </label>
          <input type="text" name="UserName"/>
       </div>
       <div class="data">
       <label for="name">password: </label>
          <input type="password" name="PassWord"/>
       </div>
       <input type="submit" value="Log In" name="submit" id="submit"/>
<?php
$dbUserName = "alex";
$dbPassWord = "1234";
 $UserName = $_POST["UserName"];
 $PassWord = $_POST["PassWord"];
 if($UserName = $dbUserName&&$PassWord = $dbPassWord){
    //the code which moves the user to another page.
 }else echo "please enter the correct username and password";
?>
   </form>

Благодарю.

Теги:

6 ответов

3
Лучший ответ

Вы должны перенести свой PHP-код в начало своего файла, чтобы сделать его сервером (что было бы правильно делать), чтобы избежать ошибок с выходом перед настройкой заголовков. Кроме того, ваше условие присваивает значения переменных (=) вместо сравнения значений (==).

Пример (непроверенный) установки, которая могла бы работать:

<?php
$dbUserName = "alex";
$dbPassWord = "1234";

if(isset($_POST['UserName']))
{
    $UserName = $_POST["UserName"];
    $PassWord = $_POST["PassWord"];

    if($UserName == $dbUserName && $PassWord == $dbPassWord)
    {
        header("Location: http://example.com/the/page/where/your/user/should/end/up");
        exit;
    }
    else
    {
      $error = true;
    }
} 
?>

<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post">
       <div class="data">
       <label for="name">username: </label>
          <input type="text" name="UserName"/>
       </div>
       <div class="data">
       <label for="name">password: </label>
          <input type="password" name="PassWord"/>
       </div>
       <input type="submit" value="Log In" name="submit" id="submit"/>
</form>
<?php if(isset($error)): ?>
please enter the correct username and password
<?php endif; ?>
2

В вашем случае if вы случайно ставите символ "=", когда он должен быть двойным:

if($UserName == $dbUserName&&$PassWord == $dbPassWord){
  • 0
    Репокс дал более законченный ответ. В любом случае спасибо +1
2

Попробуй это -

<?php
$dbUserName = "alex";
$dbPassWord = "1234";
if (isset($_POST["UserName"]) && isset($_POST["PassWord"])) {
   $UserName = $_POST["UserName"];
   $PassWord = $_POST["PassWord"];
   if($UserName == $dbUserName && $PassWord == $dbPassWord){
      header('location:path/location');
      exit;
   } else echo "please enter the correct username and password";
}
?>

Undefined index ошибки приходит, потому что UserName и password не будет присутствовать там, пока форма была размещена. поэтому добавили чеки.

  • 1
    Я согласен с этим ответом. Также я хотел бы отметить, что лучше всего выполнять запрос к базе данных внутри оператора if.
  • 0
    мы всегда должны правильно добавлять чеки. :)
1

Как и другие, используйте == вместо =.

Ответ на вопрос о перенаправлении см. В ответе Repox.

  • 0
    Это даст ошибку относительно установки заголовков после того, как вы сделали вывод.
  • 0
    Вы правы, ваш ответ - хорошее решение.
1

В вашем случае = оператор присваивает значение переменной (оператор присваивания).

С помощью == и === вы делаете условие и проверяете значение.

if($UserName == $dbUserName&&$PassWord == $dbPassWord) {

http://php.net/manual/en/language.operators.comparison.php

0
if($UserName == $dbUserName && $PassWord == $dbPassWord){

Как сказал Фэнсен, вы фактически используете оператор присваивания, который всегда будет равен true.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню