php - 从某些手机获取登录和注册问题
问题描述
我已经使用 ajax 和 php 创建了登录和注册页面。一些用户给我发了一封电子邮件“我们无法注册”。但我看到他们已经从数据库中注册了。注册后不会重定向用户。这个问题有时说他们在电脑上看到过,但在手机上看到过多次。
我想知道我是否遗漏了一个错误,你会检查我吗?
阿贾克斯代码:
<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';
}
}
}
解决方案
如果插入失败是因为用户已经存在,那么 PHP 代码将返回 200 成功状态但它不会 echo ok
。因此,您的 Javascript 代码将落入成功块,但随后跳过 if 语句。因此,如果用户尝试重新注册,他们将不会收到错误消息和重定向。您可以让 PHP 代码发出明确的错误状态:
if($saveUser){
...
} else {
http_response_code(500);
exit;
}
然后,如果注册失败,AJAX 调用将落入错误块中。
推荐阅读
- java - 如何检查下拉菜单是否用硒展开
- php - SQL 验证与来自 php/html 文件的多个值的 AND 条件
- bots - 如何自动重新连接我的 Discord.js 机器人
- python - CUDA 函数不会在带有 Numba 的 Python 上执行 For 循环
- templates - 渲染
- php - 如何改变字符串的颜色,并弹出一些界面状态?
- excel - excel 公式 IF 最小 100% 值
- rxjs - 在 Redux-Observable / RxJS 中,你如何发出动作和辅助函数的组合
- npm - babel-loader 和 babel-core 版本不兼容
- c++ - SFINAE:它如何与派生类一起工作?