2011-09-17 50 views
0

我用下面的代碼搶我的表單數據發送到MySQL:如何使用PHP爆炸功能和插入值到MySQL

$id=$_POST['id']; 
$tag=$_POST['tag']; 
$race=$_POST['race']; 
$city=$_POST['city']; 
$pic=($_FILES['photo']['name']); 

後插入我的表使用:

mysql_query("INSERT INTO `people` VALUES ('$id', '$tag', '$race', '$city', '$pic')") ; 

我的問題是我需要允許用戶在我的表單的'標記'字段中輸入多個值(用逗號或空格分隔),以允許多個人在同一圖像中進行標記。

所以我有2個問題。首先,爲每個「圍兜」標籤創建全新的數據庫條目是最佳做法嗎?或者,將逗號分隔列表存儲在單個列中會更好嗎?其次,我被建議使用爆炸功能。但是,我一直無法弄清楚如何將其轉換爲我當前的INSERT查詢。如果任何人都能引導我走向正確的方向,我會非常感激。對PHP很新,只​​是試圖教給自己一些基礎知識。

謝謝。

回答

1

所以我有2個問題。首先,爲每個「圍兜」標籤創建全新的數據庫條目是最佳做法嗎?或者,將逗號分隔列表存儲在單個列中會更好嗎?

在數據庫列中存儲逗號分隔列表通常是一個錯誤。這會使編寫查詢試圖找出(例如)某個給定人員被加了標籤的圖像變得非常困難。您應該閱讀數據庫規範化。通常情況下,在這種情況下,如果給定的照片可以包含任意多個人,您將執行的操作是使用兩列表image_person:一列指定圖像ID,另一列指定一個人。表中的一行對應於「此人已被標記在該圖像中」的陳述。這使查詢您存儲的信息變得更加容易。

其次,我被建議使用爆炸功能。

假設你不用逗號分隔列表的方式(如我推薦的那樣),那麼你可能需要在這段代碼中使用的唯一地方是爆炸,如果你傳遞了被標記爲在其中一個POST變量中使用逗號分隔列表。在這種情況下,你可能會做這樣的事情:

$tags = explode(',', $_POST['tags']); 

然後,您可以採取以下兩種方法:

  • 遍歷所有的標籤在代碼中的適當位置,併發出一個INSERT查詢在每次通過循環
  • 構建一個INSERT查詢一次將所有的標籤。

附加註釋

請閱讀有關SQL注入,並確保你寫安全代碼。您在問題中發佈的代碼非常不安全。

+0

非常感謝你。這會給我一些下午的工作。對不起......關於您的建議的另一個問題: – Chance

+0

下面是我的代碼,它允許用戶搜索已標記的照片。選擇一個比賽名稱並輸入標籤號碼。如果我把東西分成兩張桌子(一張桌子上有照片ID /標籤,另一張桌子上有我的比賽名字和城市),那麼搜索將如何從這兩個來源中獲取? $ tag = $ _POST ['tag']; $ race = $ _POST ['race']; $數據=請求mysql_query( 「從運動員選擇*,其中標籤LIKE '%$標籤%' 和種族LIKE '%$種族%'」); – Chance

+0

我不明白原始表格是用來建模的 - 原始表格中的行對應於比賽嗎?給運動員?圖像?如果不理解表格的外觀,我很難回答你的問題。您應該考慮提出另一個問題,在這個問題中,您解釋表格的當前設計,徵求對此的反饋,並要求人們解釋如何解決您不知道如何解決的問題。要麼是這樣,要麼花一些時間查找關於數據庫規範化的更多信息。 – Hammerite

0

如果僅用於表格中的一列,那麼可以使用逗號分隔標籤。

爆炸功能這次不會使用。它將用於從db中提取這些值以供進一步處理。

如果逗號分隔字符串保存在數據庫那麼當你需要它回來,你可以做這樣的事情

$arr = explode(",",$_row['tag']); 

其中$ _row [「標籤」]是在獲取標籤的數據值。

+0

難道不存儲在一列是針對數據庫標準化數據的列表?另外如果你想從標籤列表中只刪除一個標籤?你將不得不讓標籤,做了str_replace函數,然後將它放回桌上,如果標籤是一個單獨的表,你只需要一個delete語句 – thegaffney

0
在$標記

= $ _ POST [ '標籤'];

你包含標籤列表,所以現在你只需使用爆炸函數來獲取這些值的塊。

爲此,你必須按照給定的代碼

$tag=$_POST['tag']; 

$arrs=explode(", ",$tag); 

foreach($arrs as $arr){ 

$insertTag .= $arr; 

} 
echo $insertTag; 

mysql_query("INSERT INTO `people` VALUES ('$id', '$insertTag', '$race', '$city', '$pic')") ;