我正在开发我的网站应用程序,以提供生活反馈,无论用户名是否可用或被占用。我走到了死胡同,我想知道我是否可以得到一些帮助。这是我的js代码:
$('#username').keyup(function() {
var username = $(this).val();
$('#username_status').text('Searching...');
if (username !='') {
$.post('username_check.php', { username: username}, function(data) {
$('#username_status').text(data);
});
} else{
$('#username_status').text('');
}});
这是我的PHP代码:
<?php require_once("../includes/session.php"); ?>
<?php require_once("../includes/db_connection.php"); ?>
<?php require_once("../includes/functions.php"); ?>
<?php
if (isset($_POST['username'])) {
$username = mysqli_real_escape_string($_POST['username']);
if (!empty($username)){
$username_query = mysqli_query($con"SELECT COUNT('id') FROM 'attendant' WHERE 'username'='$username'");
$username_result = mysqli_result($username_query, 0);
if ($username_result == 0) {
echo 'Username availabe!';
} else if ($username_result == 1){
echo 'sorry, that username is taken.';
}
}
}
?>
正如我之前在评论中已经概述的那样,您的代码存在一些问题,因此如果您没有看到它,我决定在这方面发布一个答案。很多时候,评论是看不见的,和/或被误解的。
$con
和"SELECT
之间缺少逗号mysqli_query($con"SELECT
应改为mysqli_query($con,"SELECT
-
mysqli_real_escape_string()
需要将数据库连接作为第一个参数传递。
应改为:
$username = mysqli_real_escape_string($con, $_POST['username']);
- 对表和列使用错误的标识符,即引号
'
在:
SELECT COUNT('id') FROM 'attendant' WHERE 'username'
^ ^ ^ ^ ^ ^
删除引号:
SELECT COUNT(id) FROM attendant WHERE username
或用反引号替换它们:
SELECT COUNT(`id`) FROM `attendant` WHERE `username`
调试/故障排除:
编写代码时,将or die(mysqli_error($con))
添加到mysqli_query()
并使用错误报告。
旁注:错误报告只应在暂存中完成,而不应在生产环境中完成。
一个见解:
确保表单的元素与变量相对应。
另外,请确保您的数据库连接
mysqli_
,而不是mysql_
或 PDO。很多时候,人们将这些不同的 API 混合在一起;它们不混合。我这样说是因为我不知道你用哪个 API 连接;您的代码/问题中没有指示。
特别提示:
- 您应该考虑将
mysqli
与预处理语句一起使用,或者将 PDO 与预处理语句一起使用,它们更安全。