2017-10-04 54 views
1

我有HTML多個選擇框:PHP開關罩HTML多種選擇

<option value="1">First selection item</option> 
<option value="2">Another selection item</option> 
<option value="3">Third selection item</option> 

的jQuery我發送POST請求到PHP,然後我檢查..:

switch($value) : 
    case 1: 
     $firstItem = 1; 
     break; 
    case 2: 
     $anotherItem = 1; 
     break; 
    case 3: 
     $thirdItem = 1; 
     break; 
    default: 
     $firstItem = $anotherItem = $thirdItem = 0; 
endswitch; 

然後...

$stmt = $this->db->prepare("UPDATE myTable SET firstItem = ?, anotherItem = ?, thirdItem = ? WHERE Nickname = ?"); 
$stmt->execute(array($firstItem, $anotherItem, $thirdItem, $nickname)); 

我不知道爲什麼代碼不工作。例如,如果我只選擇option with value = 2然後$firstItem = NULL$thirdItem = NULL。我認爲在每一個可能的選擇上做出很多if都是愚蠢的。我需要這樣的:選擇--- $ =與firstItem 1,$ anotherItem = $ thirdItem = 0

選項1;

option 1,2 selected - $ firstItem = $ anotherItem = 1,$ thirdItem = 0;

是的..如果任何選擇($value = 0)然後$firstItem = $anotherItem = $thirdItem = 0

有什麼建議?提前致謝。

+0

有些事情是錯誤的,你的開關將轉到只有*一個*的情況,這很好,如果你的用戶可以選擇只有一個選項,但是您要求的功能意味着用戶可以同時選擇多個值,這意味着'$ value'不是'int',但可能是數組 – Fanckush

+0

對不起,如果我誤解了這個問題,但是如何處理在switch-case之前用0初始化值。當f時,默認情況下不會被命中。一世。情況2被執行。這有幫助嗎? 是的......開關盒需要被沒有ELSE的IF語句取代,因爲你有一個多重選擇,你需要每次檢查每個值。 – elvirus

回答

1

交換機只做1的情況下,你希望始終將它們設置爲0。

這應該這樣做:

$firstItem = ($value == 1) ? 1 : 0; 
$anotherItem = ($value == 2) ? 1 : 0; 
$thirdItem = ($value == 3) ? 1 : 0; 

默認情況下,只有當$value不是1,2,或3,這就是爲什麼你都拿到空運行。另外,一個開關只跟隨一個分支(或者一個分支和所有後續分支,如果沒有中斷),所以你應該使用我們的if語句或者第三級語句。如果你可以將真/假設爲你的變量值(而不是1/0),那麼你可以做$firstitem = ($value == 1);

+0

感謝您的回覆,是的,現在我的代碼正在更新,但只有一個值,如果我選擇兩個值或更多,sql更新只有一行 – DisplayName

+0

實際上,不會打破總是會通過,所以選擇1總是會導致所有3被設置爲1.我會更新。在這種情況下,你只需要3個if語句。 – Loren

1

你沒有表現出你在哪裏得到$value,但你需要一個select,它需要定義成數組[]一個name,以獲得在PHP端陣列的多重價值。那麼只需將這些數組值設置爲1就更簡單了。

<select name="something[]" multiple> 
    <option value="1">First selection item</option> 
    <option value="1">Another selection item</option> 
    <option value="1">Third selection item</option> 
</select> 

所以,現在你可以創建0 S和$nickname一個默認的數組,從選擇的陣列替換,然後在使用execute

$params = array_replace(array(0,0,0,$nickname), $_POST['something']); 
$stmt->execute($params); 
+0

好的解決方案!:-) – elvirus