PHP: как возвращаемое значение функции не может быть прочитано

#php #jquery #authentication

#php #jquery #аутентификация

Вопрос:

Я хочу создать систему входа с модальной загрузкой и PHP и jQuery, у меня этот режим отображается после нажатия кнопки входа :

 <div class="modal fade" id="loginModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalCenterTitle">Login Page</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">amp;times;</span>
        </button>
      </div>
      <div class="modal-body">
            <div class="form-group">
                <label for="exampleInputEmail1">Username</label>
                <input type="text" name='username' class="form-control" id="username">
            
            </div>
            <div class="form-group">
                <label for="exampleInputPassword1">Password</label>
                <input type="password" name='password' class="form-control" id="password">
            </div>
            <div class="form-group form-check">
                <input name='remember' type="checkbox" class="form-check-input" id="remember">
                <label class="form-check-label" for="exampleCheck1">Remember me</label>
            </div>
            <button type="button" name='login' id='login' class="btn btn-primary mr-auto">Login</button>
      </div>
    </div>
  </div>
</div>
  

итак, у меня есть эта функция входа в систему, которая зависит от класса пользователя :

 function login($username ,$password)
{
    $database = new Database();
    $db = $database->connect();
    $user = new User($db);    
    $user->username=$username;    
    if($user->check_user()){    
        $user->get_profile();    
        if( md5($password)==$user->password){    
            return 'logined successfully';
        } else {
            return 'password is wrong';
        }
    } else {
        return 'username is wrong';
    }
}
  

и login.php код страницы :

 <?php
include_once('../includes/functions.php');
    //login
if(isset($_POST['login'])){    
    $username = $_POST['username'];
    $password = $_POST['password'];
    $remember = $_POST['remember'];    
    $message=login($username ,$password); /// the error is here   
    if($message=='logined successfully' amp;amp; $remember =='on'){
        $domain = ($_SERVER['HTTP_HOST'] != 'localhost:3308') ? $_SERVER['HTTP_HOST'] : false;
        setcookie("username",$username,time() 31556926, '/', $domain, false );
    } elseif($message=='logined successfully' amp;amp; $remember !='on') {
        session_start();
        $_SESSION['MM_Username'] = $username;            
    }
}
echo $message;
// end of login
?>
  

и JavaScript является :

 <script>
$(document).ready(function(){
    $('#login').click(function(){
        var username =$('#username').val();
        var password =$('#password').val();
        if(document.getElementById("remember").checked==true){
            var remember ='on';
        } else {
            var remember ='off';
        }           
        if(username!='' amp;amp; password!=''){
            console.log(remember);
            $.ajax({
                url:'login.php',
                method : 'POST',
                data :{username:username,password:password,remember:remember},
                success:function(data){
                    if(data =='logined successfully'){
                        console.log(data);
                        $('#loginModal').hide();
                        location.reload();                          
                    } else {
                        console.log(data);
                        $('#loginModal').hide();
                        alert(data);                                
                    }
                }
            });
        } else {
            alert('Both username and password required!');
        }
    })
})
</script>
  

когда я регистрирую значение данных на консоли, оно выдает мне переменную сообщения, которая поступает из login.php не определено, я не знаю, в чем моя ошибка

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

1. просто верните true / false из функции login(), затем установите сообщение, реорганизуйте его. logined — это не слово

2. но в функции входа в систему у меня должны появиться три разных сообщения

3. затем верните массив ['status' => true, 'message' => 'logined successfully'] но на самом деле вы хотите проверять значение true или false, а не строку

4. вы также можете создать исключение из функции и перехватить его, а затем установить любое сообщение

5. Пожалуйста, не создавайте собственное хэширование пароля, особенно не используя MD5() или SHA1() . PHP предоставляет, password_hash() и password_verify() пожалуйста, используйте их для безопасности ваших пользователей.

Ответ №1:

вы используете индекс «login» в переменной posts в строке 4, но в jQuery ajax вы не передаете никаких данных для входа в запрос

итак, после завершения процесса в вашем php-файле нет переменной $message для эха, и ваш запрос возвращается пустым

используйте это как данные в jQuery ajax (мое предложение):

 data: { login: 1, username: username, password: password, remember: remember },
  

или используйте это в файле php вместо «isset($_POST[‘login’])»:

 if(isset($_SERVER['REQUEST_SCHEME']) AND $_SERVER['REQUEST_SCHEME'] == 'POST'){
  

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

1. Большое спасибо, проблема заключалась в том, что я создал login.php внутри index.php поэтому сначала я использовал «isset ($ _POST[‘login’])», после того, как я переместил его в отдельный файл, я забыл удалить эту строку, я просто удалил ее, и это решило