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

时间:2014-03-22 10:38:21

标签: php html mysql

我想制作一个if语句来检查用户名是否已经存在于MYSQL数据库中。我尝试了一些不同的东西,但我不能让它工作。每次我在浏览器中测试它时都会收到一条通知:"注意:未定义的索引:用户名等等#34;

如果它与$ result varible或$ check varible或两者都没有关系,我很困惑。

这是HTML表单和PHP脚本。 https://gist.github.com/anonymous/9704354

谢谢你,周末愉快!

2 个答案:

答案 0 :(得分:4)

您的代码中存在一些错误。

首先,永远不要将变量直接放在SQL查询中,这就是SQL注入的发生方式。开始为您的MYSQL使用PDO或其他库。

您收到未定义通知的原因是因为此行。

 $result = mysql_query("SELECT * FROM users WHERE username = '$_POST[create_user]'");

应该是没有修复巨大的SQL注入漏洞

 $result = mysql_query("SELECT * FROM users WHERE username = '{$_POST['create_user']}'");

另外你应该添加一个" LIMIT 1"在select查询结束时加快速度。无需寻找多个用户。

您只需检查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';
}

答案 1 :(得分:0)

这就是我发现的

$_POST['username']应该像$_POST['create_user']