我想制作一个if语句来检查用户名是否已经存在于MYSQL数据库中。我尝试了一些不同的东西,但我不能让它工作。每次我在浏览器中测试它时都会收到一条通知:"注意:未定义的索引:用户名等等#34;
如果它与$ result varible或$ check varible或两者都没有关系,我很困惑。
这是HTML表单和PHP脚本。 https://gist.github.com/anonymous/9704354
谢谢你,周末愉快!
答案 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']