php
  • sql
  • key
  • 2014-02-19 50 views 0 likes 
    0

    我目前正在为我的网站开发一个注册脚本,并且我注意到当我注册时,我可以重复提交表单,我不知道为什么没有什么能阻止我。我的意思是,这里的PHP脚本使用,看是否有用户已经exsists:SQL primary_key不工作?

    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 ; 
    

    所以如果有人能帮助我这,任何帮助将appriciated。

    +0

    什么叫'user_exists'?它是如何处理'true' /'false'的呢? –

    +0

    如果用户名已被占用,您是否正在创建要显示的错误? – Newbi3

    +0

    如果您对JS/AJAX感到满意,我会使用Javascript来调用您的PHP函数并检查用户名是否已经存在,如果是,则阻止用户提交表单。 – Newbi3

    回答

    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用户名,那么你就有一个大胆的安全漏洞;)

    +0

    不,它仍然注册一个用户,尽管它已经被注册了,它会返回一个成功的消息并且把它的数据插入到表中。我在这里调用函数: 'if(user_exists($ _ POST ['username'] == true )){ $ errors [] =“用户名已经注册。”; }' –

    +0

    哦,就是这样,你说错了。它应该很简单:if(user_exists($ _ POST ['username'])){$ errors [] =“用户名已注册。”; } – skrilled

    +0

    [link] http://mc-heads.net/inc/src/register.php.txt –

    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); 
    
    相关问题