2013-03-24 36 views
0

我想問一下這裏。 現在我製作表格插入數據的表格。 此表kemaskini已經有如何追蹤重複數據

+------+----------+----------+ 
| no | Item | kuantiti |  
+------+----------+----------+ 
| 1 | Speaker | 10  | 
+------+----------+----------+ 
| 2 | Laptop | 10  | 
+------+----------+----------+ 
| 3 | Mouse | 10  | 
+------+----------+----------+ 

,當我在表單中輸入「揚聲器」,然後我提交。 它跟蹤並說再試一次。它因爲已經有了。我在這裏編寫的編碼是 。它只跟蹤表kemaskini的第1行。 當我在表單中輸入「Laptop」時,我提交它。它通常插入到 。

我更多的事情我可以跟蹤「揚聲器」和「揚聲器」是一樣的。

 if (isset($_POST['submit'])) 
     { 
     $result = mysql_query("SELECT Item FROM kemaskini"); 
     $test = mysql_fetch_array($result); 
     $trace=$test['Item']; 


     if($_POST['Item']==$trace) 
     { 

     echo "Try Again"; 

     } 

     else 
     { 
     $item=$_POST['Item'] ; 
     $kuantiti= $_POST['kuantiti'] ; 

     mysql_query("INSERT INTO `kemaskini`(Item,kuantiti) 
     VALUES ('$item','$kuantiti')"); 

     header("Location: kemaskini.php"); 

     } 
     } 

回答

1

的原因是因爲你沒有循環從mysql_fetch_array()的結果,這就是爲什麼你只檢查結果的第一個值。如果你不想迭代,你可以更改查詢到:

$itemToSearch = "Speaker"; 
$result = mysql_query("SELECT COUNT(*) result 
         FROM kemaskini 
         WHERE Item = '$itemToSearch'") 

它會給你找到的項目總數,

$test = mysql_fetch_array($result); 
$trace = $test['result']; 

if($trace > 0) 
{ 
    echo "Try Again"; 
} 
else 
{ 
// insert value 
} 

一點題外話,查詢如果變量的值(s)來自外部,則易受損於SQL Injection。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

+0

先生,我嘗試它..它的工作,但我嘗試我插入像電話。它顯示再試一次。 ..它跟蹤電話已經有,但電話沒有插入。 – 2013-03-24 04:09:27

0

至於,你怎麼可以跟蹤「主講」和「揚聲器」是一樣的,你可以使用上()或下()函數,大多數數據庫引擎的支持。我不使用mysql,所以我在這裏做一個假設。你的檢查會是這樣的:

select count(*) records 
from kemaskini 
where lower(item) = 'speaker' 

說到這裏,我不得不提醒你的是,在使用功能,其中這樣的條款讓您的查詢的運行速度較慢。

如果JW關於PreparedStatements的評論包括使用查詢參數(我也不使用php),這是非常好的建議。它們不僅會增加應用程序的安全性,還會轉義特殊字符,如撇號。由於您正在進行字符搜索,因此如果用戶嚮應用程序提交了諸如「戴夫鍵盤」之類的東西,則不希望查詢崩潰。

+0

,好的,先生,謝謝。我會把這當作我的新知識。我會嘗試。 – 2013-03-24 04:25:13