我正在为我的网站制作一个注册脚本,我注意到,当我注册时,我可以一遍又一遍地重新提交表单,我不知道为什么没有什么能阻止我。我的意思是,这是用于查看用户是否已经存在的PHP脚本:
function user_exists($username) {
$query = mysql_query("SELECT username FROM users WHERE username='$username'");
if (mysql_num_rows($query) != 0){
return true;
}
else{
return false;
}
}
并且是我用来创建表的SQL代码:
CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(1024) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`active` int(11) NOT NULL DEFAULT '0',
`ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '0.0.0.0',
`date` varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=61 ;
所以,如果有人能帮助我,那么任何帮助都会得到满足。
答案 0 :(得分:0)
这与回答你的问题毫无关系,但与提高你快速写出高效率的能力有关。编写良好的代码:
你的方式:
function user_exists($username) {
$query = mysql_query("SELECT username FROM users WHERE username='$username'");
if (mysql_num_rows($query) != 0){
return true;
}
else{
return false;
}
}
更好的书面方式:
function user_exists($username) {
$query = mysql_query("SELECT username FROM users WHERE username='$username'");
if(mysql_num_rows($query) > 0) return true;
return false;
}
sql语句似乎没问题,只要你正在调用你的函数并正确测试它就应该有效。虽然除非你在调用user_exists之前清理你的$ username输入,否则你的安全漏洞就会大不相同;)
答案 1 :(得分:0)
我在您的代码段中看到了一些问题。
1)你调用user_exists()函数的方式,每次调用它时都会传递“true”作为用户名。你有......
if (user_exists($_POST['username'] == true)) {
$errors[] = "Username already registered.";
}
所以你正在运行的实际查询是......
SELECT username FROM users WHERE username='1';
应该......
if (user_exists($_POST['username'])) {
$errors[] = "Username already registered.";
}
2)调用mysql_query()时缺少参数。连接应该有第二个参数。
$query = mysql_query($"SELECT userName FROM csg.user WHERE userName='$username'",$con);