繁体   English   中英

检查数据库中是否已经存在用户名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM