php
  • mysql
  • sql
  • 2013-11-24 77 views 1 likes 
    1

    我試圖檢查重複項的用戶名列,如果發現「用戶名被採取」應回顯。無論什麼輸入作爲用戶名「用戶名是好的」總是回顯......是什麼導致了這一點,我該如何改變它?檢查mysql表中的重複項在php

    $username = preg_replace('#[^a-z0-9]#i', '', $_POST['usernamecheck']); 
    $sql = "SELECT * FROM riders WHERE username='$username' LIMIT 1"; 
    $query = mysqli_query($connect, $sql); 
    $uname_check = mysqli_num_rows($query); 
    if ($uname_check == 0) { 
        echo '<strong style="color:#009900;">' . $username . ' is OK</strong>'; 
        exit(); 
    } else { 
        echo '<strong style="color:#F00;">' . $username . ' is taken</strong>'; 
        exit(); 
    } 
    
    +0

    什麼' echo $ sql;'在執行該查詢之前顯示? –

    +0

    這個:SELECT * FROM車手WHERE username ='test'LIMIT 1 – willi

    +0

    請顯示'var_dump(mysqli_num_rows($ uname_check))'的輸出是什麼。我的猜測是你的查詢出了問題。 –

    回答

    0

    我剛剛發現自己是沒有答案似乎幫助:

    $query = mysql_query($sql, $connect); 
    

    代替:

    $query = mysql_query($connect, $sql); 
    
    +0

    好,所以你用'mysql_ *'API連接,然後使用其餘的函數作爲'mysqli_ *',這就是爲什麼這段代碼無法捕獲這個錯誤,因爲在我的代碼中看到我使連接部分成爲評論,因爲你沒有'與我們分享。 –

    0

    變化的邏輯:

    $query = mysqli_query($connect, $sql) or die(mysqli_error($connect)); 
    
    if ($query){ 
        if($uname_check > 0) { 
        { 
         echo '<strong style="color:#F00;">' . $username . ' is taken</strong>'; 
         exit(); 
        } else { 
         echo '<strong style="color:#009900;">' . $username . ' is OK</strong>'; 
        } 
    } 
    else 
    { 
        echo 'An error occured while querying the new username'; 
    } 
    

    ,我們就能明白,如果你的SQL查詢是好的。

    +0

    如果$ query有效,則返回true,否則返回false。 – zkanoca

    +0

    它的假,現在什麼? – willi

    +0

    @ user2953987所以你的查詢不會被解僱。檢查sql語句 – zkanoca

    0

    首先,請在您的SQL請求之前嘗試echo $username以檢查值;

    其次,請嘗試刪除LIMIT 1,因爲這樣做無用,因爲您可以防止重複創建,所以它無論如何都是0或1。

    第三,試試這個:$username=preg_replace("#[^a-z0-9\.]#i", null, $_POST['usernamecheck']);

    +0

    還要確保你的名字字段被命名爲'usernamecheck'當然是 –

    4

    讓我們調試的正確方法。當你的代碼不起作用時debug it;不只是猜測事情。並且要從PHP調試MySQL問題,您必須查看這些函數的值爲returned?而不只是期望最好的情況。計算機科學不是猜測工作,對於大多數事情來說它是相當準確的

    第1步:

    // $connect = mysqli_connect("localhost", "my_user", "my_password", "world"); 
    
        if (mysqli_connect_errno()) { 
         printf("Connect failed: %s\n", mysqli_connect_error()); 
         exit(); 
        } 
    

    第2步:

    $username=mysqli_real_escape_string($connect,$username); 
        $sql = "SELECT 1 FROM riders WHERE username='$username' LIMIT 1"; 
        if ($result=mysqli_query($connect, $sql)) { 
        $uname_check=mysqli_num_rows($result); 
        } 
        else 
        { 
        printf("Error message: %s\n", mysqli_error($connect)); 
        } 
    

    第3步:

    echo intval($uname_check); 
    

    通過你到達這裏,你會時間確切地知道什麼是錯的。

    之後,你可以繼續你if

    if ($uname_check == 0) 
    { 
        echo '<strong style="color:#009900;">' . $username . ' is OK</strong>'; 
    } 
    else 
    { 
        echo '<strong style="color:#F00;">' . $username . ' is taken</strong>'; 
    } 
    exit(); 
    
    +0

    'SELECT *'實際上是不必要的。 'SELECT 1'就足夠了。 – Kermit

    +0

    謝謝王子,更新了 –

    +0

    +1;此外,計算機科學大多是「IT取決於」;) – Kermit

    相關問題