[英]Check if username already exists in database
我想做一个if语句,检查MYSQL数据库中是否已经存在用户名。 我尝试了一些不同的东西,但是我无法使其工作。 每次在浏览器中进行测试时,我都会收到一条通知
注意:未定义的索引:etc中的用户名。
如果它与$ result变量或$ check变量有关,或两者都不相关,我感到困惑。
这是HTML表单和PHP脚本。 https://gist.github.com/anonymous/9704354
谢谢,祝您周末愉快!
您的代码中有些错误。
首先,永远不要将变量直接放在SQL查询中,这就是SQL注入的方式。 开始为MYSQL使用PDO或其他库。
您收到未定义通知的原因是由于此行。
$result = mysql_query("SELECT * FROM users WHERE username = '$_POST[create_user]'");
应该没有修复巨大的SQL Injection漏洞
$result = mysql_query("SELECT * FROM users WHERE username = '{$_POST['create_user']}'");
另外,您应该在选择查询的末尾添加“ LIMIT 1”,以加快处理速度。 无需寻找多个用户。
您可以通过仅检查row_count而不是检查文本值来验证用户。 由于MySQL对某些字段不区分大小写,因此用户名“ AAAaaa”将等于“ aaaAAA”。 如果改为查看行数,则将确保该文本的数据库中没有用户名。 或者,如果您要使用PHP进行检查,请确保通过strtolower()
传递用户名
当您开始使用PDO时,以下示例将为您提供帮助。
$dbh = new PDO() // Set the proper variables http://us2.php.net/pdo
if(empty($_POST['create_user'])) {
echo 'Username is Empty. Always check if POST and Get data is set';
die();
}
$query = "SELECT * FROM `users` WHERE `username` = ? LIMIT 1;"
$data = array($_POST['create_user']);
$sth = $dbh->prepare($query);
if(!$sth->execute($data)) {
echo 'Handle SQL Error';
die();
}
if($sth->rowCount() == 0) {
echo 'Unused Username';
}else{
echo 'Used Username';
}
这就是我发现的
$_POST['username']
应该类似于$_POST['create_user']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.