【发布时间】:2022-11-25 13:26:27
【问题描述】:
我尝试使用 ajax 和 PHP 创建一个 DB 注册,但结果不是我想要的。它总是返回 201 状态代码。
这是我的代码
<script>
$(document).ready(function() {
$('#butregister').on('click', function() {
$("#butregister").attr("disabled", "disabled");
var fullname = $('#fullname').val();
var username = $('#username').val();
var password = $('#password').val();
var mobilenumber = $('#mobilenumber').val();
if(fullname!="" && username!="" && mobilenumber!="" && password !=""){
$.ajax({
url: "includes/save",
datatype: "JSON",
type: "POST",
data: {
type: 1,
fullname: fullname,
username: username,
password: password,
mobilenumber: mobilenumber
},
cache: false,
success: function(dataResult){
var dataResult = JSON.parse(dataResult);
if(dataResult.statusCode==200){
$("#butregister").removeAttr("disabled");
$('#register_form').find('input:text').val('');
$("#success").show();
$('#success').html('Registration successful !');
}
else if(dataResult.statusCode==201){
$("#error").show();
$('#error').html('Username already exists !');
}
}
});
}
else{
alert('Please fill all the field !');
}
});
});
</script>
这是我创建的 php 代码
<?php
include 'connect.php';
session_start();
if($_POST['type']==1){
$fullname=$_POST['fullname'];
$username=$_POST['username'];
$password=$_POST['password'];
$mobilenumber=$_POST['mobilenumber'];
$md5password=md5($password);
$datetime = new DateTime();
$timezone = new DateTimeZone('Asia/Manila');
$datetime->setTimezone($timezone);
$dateregistered = $datetime->format('m/d/Y g:i A');
$duplicate=mysqli_query($conn,"select * from userlists where username='$username'");
if (mysqli_num_rows($duplicate)<0)
{
$sql = "INSERT INTO `userlists`( `realname`, `contactnumber`, `username`, `md5password`, `dateregistered`)
VALUES ('$fullname','$mobilenumber','$username','$md5password','$dateregistered')";
if (mysqli_query($conn, $sql)) {
echo json_encode(array("statusCode"=>200));
}
}
else{
echo json_encode(array("statusCode"=>201));
}
mysqli_close($conn);
}
现在,在我运行它之后,结果总是 statusCode=>201
有什么我可以做的吗?谢谢
【问题讨论】:
-
来自 PHP 的 md5 手册:“警告 由于此散列算法的快速特性,不建议使用此功能来保护密码。有关详细信息和最佳实践,请参阅Password Hashing FAQ。" PHP 有 password_hash 和 password_verify
-
mysqli_num_rows() 可以小于
0吗? -
@brombeer 出现错误我相信
mysqli_num_rows可以返回-1 -
您的代码很容易受到 SQL 注入攻击并且不安全。您需要努力确保 AJAX 发送的数据是干净的,并且 MySQL 使用 Prepared Statements。
-
比
mysqli_num_rows更好的是在你的 SQL 查询本身中使用SELECT COUNT(*),这会给你一个更可靠的结果;即你总是会得到一个结果。