получить логин и зарегистрировать проблему с мобильного телефона - PullRequest
0 голосов
/ 08 мая 2019

Я создал страницу входа и регистрации, используя ajax и php. Какой-то пользователь отправил мне электронное письмо "мы не можем зарегистрироваться". Но я вижу, что они уже зарегистрированы из базы данных. Пользователи не перенаправляются после регистрации. Эту проблему иногда говорят, что они видели на компьютере, но с мобильного несколько раз.

Интересно, если бы я пропустил ошибку, ты бы проверил меня?

Код Ajax:

<script type="text/javascript">
    $(document).ready(function(){   
        var form = $('#registerform');
        var submit = $('#register');
        var firstname = $('#register_username'); 
        var fullnamereg = $("#reg_fullname"); 
        var regemail = $('#reg_email'); 
        var regpassword = $('#reg_password');   
        var validated = true;

        form.on('submit', function(e) {
            // prevent default action
            e.preventDefault(); 
            jQuery.ajax({
                type: "POST",
                url: URL+"register.php",
                data: form.serialize(),
                beforeSend: function(){},
                success:function(data){ 
                    if($.trim(data) === 'ok'){
                        setTimeout(function() {
                            $('.login_form').html("Registered!");   
                            setTimeout(function() {
                                window.location.href = siteurl;
                            }, 1000); 
                        }, 1000);
                    }
                },
                error: function(data){
                    $('#form_error').html('Error, intenta de nuevo.');      
                },              
            })  
        });  
    });
</script>

и код PHP здесь:

if(isset($_POST["reusername"]) && isset($_POST["fullname"]) && isset($_POST["password"]) && isset($_POST["regemail"])){
    $firstname = mysqli_real_escape_string($db, $_POST["reusername"]);
    $fullname = mysqli_real_escape_string($db, ucfirst(strtolower($_POST["fullname"])));
    $password = mysqli_real_escape_string($db, sha1(md5(trim($_POST["password"]))));
    $thisEmail = mysqli_real_escape_string($db, $_POST['regemail']); 
    $registerTime = time();
    $ip=$_SERVER['REMOTE_ADDR']; // user ip
    $saveUser = mysqli_query($db,"INSERT INTO `users` 
            (email,username,fullname ,password,registered,ip) 
            VALUES
            ('$thisEmail','$firstname','$fullname','$password','$registerTime','$ip')") or die(mysqli_error($db));  
    if($saveUser){
        $getUserID = mysqli_query($db,"SELECT user_id,username FROM users WHERE email = '$thisEmail' AND username = '$firstname'") or die(mysqli_error($db));
        $row=mysqli_fetch_array($getUserID,MYSQLI_ASSOC);
        $uid=$row['user_id']; // Get User ID
        $dbunm = $row['username'];  // Get User Username
        $_SESSION['user_id'] = $uid; // Session User ID 
        $hash = sha1($dbunm).$registerTime;  

        if($hash){
            setcookie($cookiename,$hash,time()+31556926 ,'/'); 
            mysqli_query($db, "INSERT INTO `session` (userid, auth) VALUES ('$uid', '$hash')"); 
            echo 'ok';  
        }
    }
}

1 Ответ

0 голосов
/ 08 мая 2019

Если вставка завершится неудачно из-за того, что пользователь уже существует, код PHP вернет 200 успешных состояний, но не отобразит ok.Итак, ваш код Javascript попадет в блок успеха, но затем пропустите оператор if.Таким образом, если пользователь попытается повторно зарегистрироваться, он не получит сообщения об ошибке и не будет перенаправлен.Вы могли бы заставить код PHP выдавать явный статус ошибки:

if($saveUser){
    ...
} else {
    http_response_code(500);
    exit;
}

Затем, если регистрация не удалась, вызов AJAX попадет в блок ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...