php
  • mysql
  • 2015-11-05 77 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

    相關問題