php
  • mysql
  • 2015-11-05 43 views 2 likes 
    2

    好吧,所以我一直在这一段时间了。 我想实现的目标是防止人们能够创建在name ='name'字段中输入的相同名称。这里是html代码。我不能似乎防止重复的名称输入

    <div class="fieldclass"><form action='/newlist.php' method='POST' id="formID"> 
    Name Your Card <input class='ha' type='text' name='name'><p> 
    <input type='submit' value='create'/> 
         </form> 
    

    这是我的mysql页面。

    <?php 
    $servername = "localhost"; 
    $username = "root"; 
    $password = "root"; 
    $dbname = "christmas"; 
    
    // Create connection 
    $dbhandle = mysqli_connect ($servername, $username, $password, $dbname) or die ("could not connect to database"); 
    
    
    $selected = mysql_connect('christmas', $dbhandle); 
    
    
    
    $query = mysql_query("SELECT * FROM list WHERE name='$name'"); 
    if(mysql_num_rows($query) > 0){ 
        echo 'that name already exists'; 
    }else{ 
        mysql_query("INSERT INTO list(name, one , two, three, four, five, six, seven, eight) VALUES ('$name' , '$one' , '$two' , '$three' , '$four' , '$five' , '$six', '$seven' , '$eight')"); 
    
    } 
    
    
    mysql_close(); 
    ?> 
    

    我做错了什么?

    +1

    阅读本http://stackoverflow.com/questions/17498216/can-i-mix-mysql-apis-in-php –

    +0

    再加上,我甚至给了你一个链接在你的另一个问题,这是一个经过验证的方法。你为什么不使用它? –

    +0

    你也在使用一个MySQL关键字'list'作为一个函数,而这仅仅会导致你的问题。我们也不知道'$ name'是从哪里来的。 –

    回答

    9

    这里有很多错误。

    您正在使用MySQL关键字list作为一项功能,而这一切都会导致您遇到问题。

    旁注:是的,我知道这是不是一个“保留”字,这是一个“关键词”,如果作为一个功能,这是你在你的第二个查询现在在做什么MySQL的对待特殊的关键字,并是MySQL解释它的方式;一个函数而不是一个表声明名称。

    我建议你该表重命名为列表,或在蜱包裹。

    您还在混合不混合的MySQL API /函数。

    所以,你的新代码将读作
    而下降$selected = mysql_connect('christmas', $dbhandle);

    $query = mysqli_query($dbhandle, "SELECT * FROM `list` WHERE name='$name'") 
         or die (mysqli_error($dbhandle)); 
    
    if(mysqli_num_rows($query) > 0){ 
        echo 'that name already exists'; 
    }else{ 
        mysqli_query($dbhandle, "INSERT INTO `list` (name, one, two, three, four, five, six, seven, eight) 
           VALUES ('$name' , '$one' , '$two' , '$three' , '$four' , '$five' , '$six', '$seven' , '$eight')") 
           or die (mysqli_error($dbhandle)); 
    
    } 
    
    
    mysqli_close($dbhandle); 
    

    您的代码也是开放的SQL注入。使用准备好的语句。

    现在,我们不知道在何处所有变量的来源。

    使用错误报告。


    我也建议你使用你的变量/输入条件empty()

    否则,您可能还会得到MySQL可能会抱怨的其他错误。

    即:

    if(!empty($var)){...} 
    

    最终并确保有你的数据库中没有重复条目,可以设置一个唯一约束。

    +0

    噢。把它放在那里作为一个清单。检查他们关闭OP – Drew

    +0

    @Drew Yepper ;-) –

    +0

    你错过了'SELECT * FROM list ...'的备注...' – Sean

    1

    你在混合mysql和mysqli。

    请尝试下面的代码。

    <?php 
    $servername = "localhost"; 
    $username = "root"; 
    $password = "root"; 
    $dbname = "christmas"; 
    
    // Create connection 
    $dbhandle = mysqli_connect ($servername, $username, $password, $dbname) or die ("could not connect to database"); 
    
    $query = mysqli_query($dbhandle, "SELECT * FROM list WHERE LOWER(name) = LOWER('$name') "); 
    if(mysqli_num_rows($query) > 0){ 
        echo 'that name already exists'; 
    }else{ 
        mysqli_query($dbhandle, "INSERT INTO list(name, one , two, three, four, five, six, seven, eight) VALUES ('$name' , '$one' , '$two' , '$three' , '$four' , '$five' , '$six', '$seven' , '$eight')"); 
    
    } 
    
    mysqli_close($dbhandle); 
    ?> 
    
    +0

    什么是原始查询错误'“SELECT * FROM list WHERE name ='$ name'”' –

    +0

    @ arif_suhail_123“SELECT * FROM list WHERE name ='$ name'”'但没有错误,但使用LIKE和'LOWER'会给出更精确的结果。 – Suyog

    +1

    它可以被认为是一个建议,而不是一个修复.. :-) – Suyog

    相关问题