почему в моей форме отображается заполнение всех полей, хотя я их заполнил

#php #authentication

Вопрос:

Так что это мой код, и я понятия не имею, что я сделал не так. В результате того, что бы я ни сделал неправильно, каждый раз, когда я пытаюсь войти в систему с заполненными обоими полями, то есть с введенным паролем и именем пользователя, я получаю сообщение об ошибке, в котором говорится, пожалуйста, заполните все поля, как будто я не заполнял ни одно из них.

login.php

 include_once 'header.php';
?>
           
 <section class="signup-form" style="text-align:center;">
     <h2>Log In</h2>
     
     <form action="includes/login.inc.php" method="post">
         
         <input type="text" name="uid" placeholder="Username/Email">
         
         <br><br>
         
         <input type="password" name="pwd" placeholder="Password">
         
         <br><br>
         
         <button type="submit" name="submit">Log In</button>
     </form>
     
      <?php
  if(isset($_GET["error"])){
      
      if($_GET["error"] == "empty input") {
          
          echo "<p style='color:red; text-align:center;'>Please fill in all fields!</p>";
          
      }
     
       if($_GET["error"] == "wronglogin") {
          
          echo "<p style='color:red; text-align:center;'>wrong login info. Try again</p>";
          
      }
    
      
      
  }
  ?>
 </section>
  
 

login.inc.php

     <?php 

if(isset($_POST["submit"])){
    
    $username = $_POST['uid'];
    $pwd = $_POST['pwd'];
    
    require_once 'dbh.inc.php';
    require_once "functions.inc.php";
    
     if (emptyInputLogin($username, $pwd) !== false) {
        
         header('location: ../login.php?error=empty input');
        exit();
    }
loginUser($conn, $username, $pwd);

}
else {
    
    header('location: ../login.php');
    exit();
}

 

functions.inc.php

  function emptyInputLogin( $username, $pwd ) {

$resu<
if (empty($username) || empty($pwd)){
    
    $result = false;
    
} 

return $resu<

}

 

Комментарии:

1. Я думаю, что в этом и заключается проблема if(emptyInputLogin($username, $pwd) !== false)

2. Вам нужно показать функцию emptyInputLogin

3. Просмотрите функцию emptyInputLogin($имя пользователя, $pwd) …. Кажется, это возвращается на круги своя

4. Почему этот вопрос был поднят (даже дважды), когда в нем отсутствует ключевая информация, например, код, который выполняет фактическую проверку, о которой они спрашивают?

5. Вам нужно вернуть значение из функции return $resu< , иначе оно всегда будет оцениваться как null , что сделает !== false всегда истинным. php.net/manual/en/functions.returning-values.php

Ответ №1:

Вам нужно вернуться true , если какие-либо из них пусты, а false если нет.

 function emptyInputLogin( $username, $pwd ) {
    $result = false; // default value to return

    if (empty($username) || empty($pwd)){
        $result = true;
    } 

    return $resu<
}
 

Эта функция также может быть записана как:

 function emptyInputLogin( $username, $pwd ) {
    return empty($username) || empty($pwd);
} 
 

так empty($username) || empty($pwd) как будет оцениваться как истина/ложь.

Ваше утверждение if также можно изменить на просто

 if (emptyInputLogin($username, $pwd))
 

что облегчает чтение.

Или еще проще, вообще пропустите эту функцию в своем login.inc.php файле:

 if (empty($username) || empty($pwd)) {
    header('location: ../login.php?error=empty input');
    exit;
}
 

Комментарии:

1. @sketchmanluke — loginUser() не является встроенной функцией PHP. Вам нужно написать свою собственную систему аутентификации (или использовать фреймворк, готовый к использованию, поскольку аутентификация может быть небезопасной, если вы не знаете, что делаете). Существует множество различных способов аутентификации пользователей, поэтому для PHP было бы невозможно использовать универсальную функцию «LoginUser ()».