2013-02-12 108 views
0

當您不確切知道用​​戶可以選擇多少個選項時,我很好奇如何將所選項目插入到數據庫中。查詢多個選擇框

說我有下面的代碼:

<select name="foo[]" multiple="multiple"> 
    <option value="dog">Dog</option> 
    <option value="cat">Cat</option> 
    <option value="fish">Fish</option> 
</select> 

<?php 

$pets = $_POST['foo']; 

$query = mysql_query("INSERT INTO `pets` (`pet1`, `pet2`, `pet3`) VALUES ('".$pets[0]."', '".$pets[1]."', '".$pets[2]."')"); 
?> 

而且用戶只選擇選項「狗」或「狗」和「貓」或「貓」和「狗」等,基本上三者的任何組合。

我必須硬編碼查詢接受所有可能的選項,然後指定一個WHERE子句說「WHERE $pets != ''」或類似的東西嗎?

我很感激任何幫助。

+0

而是存儲一個序列化的字符串。 – j08691 2013-02-12 19:12:50

+0

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。請參閱[**紅框**](http:// j。熔點/ Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 – h2ooooooo 2013-02-12 19:19:59

+0

@ h2ooooooo感謝您的支持 – a7omiton 2013-02-12 19:23:17

回答

1

首先,不使用mysql_ *功能,因爲是棄用

如果您需要將其插入到多行,你可以簡單地使用循環這樣

foreach($pets as $pet) 
{ 
     Insert to db each single pet in different row 
} 

如果您想要將它們插入同一行中,您可以使用

$toInsert = implode(',',$pets); 

如果您有hav EN列數,我不認爲你可以使用第二個選項,併爲寵物

$petsColumns = array(); 

for($i = 1; $i <= count($pets); $i++) 
    $petsColumns[] = "pet".$i ; 

$petsColumnsString = implode(',',$petsColumns); 

數量的破滅功能,他們concate到查詢

如果希望這可以幫助你是什麼試圖做

+0

謝謝,我認爲第一個選項是我所需要的,並增加了鍵/值對 – a7omiton 2013-02-12 19:50:44

+0

歡迎您歡迎幫助 – Sedz 2013-02-12 20:03:07

0

這種情況有幾種選擇。

首先,您可以將數據存儲爲序列化字符串。這很好,如果你只需要使用PHP端的數據。主要的缺點是MySQL不會真正理解數據,所以它不能在數據到達PHP之前過濾數據。

第二個選項是SET數據類型列。 SET數據類型允許您在使數據庫更加了解數據的同時擁有可能選項的任意組合。 SET限制64名成員。 SET選項是最小選項,但在列上過濾不是最佳選擇。改變可能的值也有點困難。

第三個選項是將值標準化爲一個單獨的表格。你將擁有用戶表和寵物表。寵物表將具有用戶ID,寵物列和表格的唯一ID。然後,您只需在用戶選擇的每個條目的寵物表中插入一行。這使您可以爲每個用戶提供儘可能多的條目,並允許您輕鬆過濾數據。這通常是最好的方式。將可能的寵物值歸一化到第三個表中可能也是一個好主意。那張桌子上會有一個寵物ID,寵物名字,以及其他你可能想要的東西。然後,第二個表將作爲用戶和寵物之間的橋樑,具有用戶ID,寵物ID和表格的唯一ID。