2010-04-27 68 views
0

我試圖檢查一個顏色是否已經輸入到數據庫中,如果是顏色不應該輸入並存儲到數據庫中並且應該顯示以下錯誤代碼<p>This color has already been entered!</p>。但由於某種原因,我無法得到這個工作,有人可以幫助我嗎?PHP和MySQL驗證問題

顏色名稱被輸入$_POST['color'],這是用戶輸入的數組。

這裏是收集顏色的html代碼。

<input type="text" name="color[]" /> 
<input type="text" name="color[]" /> 
<input type="text" name="color[]" /> 
<input type="text" name="color[]" /> 
<input type="text" name="color[]" /> 
<input type="text" name="color[]" /> 
<input type="text" name="color[]" /> 
<input type="text" name="color[]" /> 
<input type="text" name="color[]" /> 

這裏是PHP & MySQL的代碼。

for($i=0; $i < count($_POST['color']); $i++) { 
    $color = "'" . $_POST['color'][$i] . "'"; 
} 

$mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"SELECT * 
          FROM colors 
          WHERE color = '$color' 
          AND user = '$user_id' "); 

if(mysqli_num_rows($dbc) == TRUE) { 
    echo '<p>This color has already been entered!</p>'; 
} else if(mysqli_num_rows($dbc) == 0) { 
    // enter the color into the database 
} 
+0

你知道你想運行哪個SQL查詢嗎? – 2010-04-27 11:55:03

+0

您在for語句中覆蓋'$ color',因此只有最後一個被採用。但無論如何,如果你打印'

這種顏色已經進入!

'用戶如何知道**其中哪一個? – 2010-04-27 11:55:56

+0

@Col。彈片你是什麼意思? – IPADvsSLATE 2010-04-27 11:56:46

回答

1

爲了避免不必要的querys應先獲取所有顏色,並檢查了我。

$colors = array(); 
$mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
if($result = mysqli_query($mysqli,"SELECT color FROM colors WHERE user = '$user_id' ") { 
    while($row = mysqli_fetch_array($result)) { 
     $colors[] = $row['color']; 
    } 
    mysqli_free_result($result); 
} 

foreach($_POST['color'] as $color) { 
    if(in_array($color, $colors) { 
     echo '<p>Color ' . $color . ' has already been entered!</p>'; 
    } 
    else { 
     // enter the color into the database 
    } 
} 

確保消毒用戶輸入!

0

你有多種顏色,所以你應該使用下面的東西。

$mysqli = mysqli_connect("localhost", "root", "", "sitename"); 

for($i=0; $i < count($_POST['color']); $i++) { 
    $color = "'" . $_POST['color'][$i] . "'"; 

    $dbc = mysqli_query($mysqli,"SELECT * 
          FROM colors 
          WHERE color = '$color' 
          AND user = '$user_id' "); 

    if(mysqli_num_rows($dbc) == TRUE) { 
     echo '<p>'.$color.' color has already been entered!</p>'; 
    } else if(mysqli_num_rows($dbc) == 0) { 
    // enter the color into the database 
    } 
} 
+0

還記得注入問題。 'mysql_real_escape_string($ _ POST ['color'] [$ i])','htmlspecialchars($ color)'... – bobince 2010-04-27 12:00:19

+0

我得到以下錯誤:mysqli_num_rows()期望參數1爲mysqli_result,布爾給定,行'if(mysqli_num_rows($ dbc)== TRUE){' – IPADvsSLATE 2010-04-27 12:03:48

0

我猜你要運行的問題是數據庫連接在您嘗試將新值輸入到數據庫時已打開。 解決方案是首先從數據庫存儲中取出所有數據,然後運行檢查並相應地添加。

0

您應該使用IN運算符。例如,

$color = null; 
for($i=0; $i < count($_POST['color']); $i++) { 
    if ($color == null) 
     $sep = ''; 
    else 
     $sep = ','; 
    $color = $sep . "'" . $_POST['color'][$i] . "'"; 
} 

$mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"SELECT * 
          FROM colors 
          WHERE color IN ($color) 
          AND user = '$user_id' "); 
0

這其實不是一個答案,但很重要的是要了解:

我指的是簡單的事情:首先,你必須只處理SQL,PHP沒有或HTML。創建一個SQL查詢來檢查顏色,運行它,測試它,並且一旦你確定了它 - 去尋找PHP。嘗試從變量創建相同的查詢,並與示例1進行比較。一旦完成,你可以去HTML。

因此,發展過程中必須被分成3個階段:

  1. SQL階段。創建一個查詢。如果你不知道你想要什麼查詢,請在這裏提出一些問題,比如「我有3個顏色名稱和一個表格,如何檢查表格中是否存在任何這些顏色」。一旦完成 - 檢查出來,以確保查詢運行正常,並返回所需的結果。
  2. PHP階段。一旦你有一個查詢,從你的PHP腳本回聲。並寫下面的代碼,從一些變量產生這個查詢的代碼。打印出來進行比較,直到兩個查詢完全相同。
  3. HTML階段。製作一個HTML表單,它會將顏色名稱發送到PHP腳本中,該腳本將從它們創建SQL查詢並最終運行它。

記住:要知道你想運行哪個查詢是非常非常重要的!如果沒有這方面的知識,你就不能再進一步了。
這裏的每個答案都沒有提到SQL查詢本身。