2017-07-28 51 views
-3

我有一個桌面應用程序與MySQL數據庫(不能更改),我想用PHP創建一個Web界面。 在這個應用程序中一個表格包含兩個複選框可以同時選擇一個列表/選項框。就像下面這個例子一樣。如何重新在php中的MySQL值如果多個表單元素值的總和存儲爲MYSQL中的單個值

<p> 
 
    chk value 4- 
 
    <input name="chk1" type="checkbox" id="chk1" value="4" /> 
 
    <label for="sel"></label> 
 
    </p> 
 
    <p> 
 
    chk value 1024- 
 
    <input name="chk2" type="checkbox" id="chk2" value="1024" /> 
 
    <label for="chk2"></label> 
 
    </p> 
 
    SELECT <select name="sel" id="sel"> 
 
    <option value="0">None</option> 
 
    <option value="8">option-1 val 8</option> 
 
    <option value="16">option-2 val 16</option> 
 
    <option value="8192">option-3 val 8192</option> 
 
    <option value="16384">option-4 val 16384</option> 
 
    </select>

和在儲存有SUM 3輸入的,就像如果選擇兩個複選框,選項1中選擇的MySQL單個值..值存儲1036(CHK1值= 4 + CHK2值= 1024 + option1值= 8)。

我想要的是一個公式來反轉這個MySQL值來獲取回聲的實際元素值。

到目前爲止,只有工作方式,我有我的頭是如果條件

if($value == '4'){ 
chk1 will be selected | option none 
}else if($value == '1024'){ 
chk2 will be selected | option none 
}else if($value == '8'){ 
option 1..... 
}else if($value == '16'){ 
option 2 
}else if($value == '8192'){ 
option 3 
}else if($value == '16384'){ 
option 4 
}else if($value == '1028'){ 
chk1 and option 1 will be selected 
}else if($value == '1032'){ 
chk1, chk2 and option 1 will be selected 
}.... and on 

有沒有得到它,除非條件做任何公式? 在此先感謝。

+0

您需要d來**嘗試自己編寫代碼**。在[**做更多的研究**之後](https://meta.stackoverflow.com/q/261592/1011527)如果你有問題**發佈你已經嘗試了**的**明確的解釋不工作**並提供[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。閱讀[如何問](http://stackoverflow.com/help/how-to-ask)一個很好的問題。請務必[參觀](http://stackoverflow.com/tour)並閱讀[this](https://meta.stackoverflow.com/q/347937/1011527)。 –

+0

簡單邏輯'chk1' +'chk2' +'sel' ='總值' –

+0

@JayBlanchard感謝您的建議。到目前爲止,如果有人仔細閱讀,我認爲我的問題非常清楚。用我的小知識我可能無法解釋得更清楚。 – Rezbin

回答

0

假設的形式發佈後,您可以:

$checkboxes = [ 'chk1', 'chk2' ]; // for convenience since unchecked boxes don't appear in the POST array 
$sum = 0; 
foreach ($checkboxes as $c) { 
    if (isset($_POST[$c)) { 
     $sum += (int)$_POST[$c]; 
    } 
} 
$sum += (int)$_POST['sel']; 

設置在表單中的值,你可以使用這樣的事情:

function getBits($sum) { 
    $bit = 1; 
    $vals = []; 
    for (; $bit < $sum; $bit <<=1) { 
     if ($sum & $bit) { 
      $vals[] = $bit; 
     } 
    } 
    return $vals; 
} 
$vals = getBits($sum); 

對於選擇,你可以刪除已知數組中的複選框值,如果還有任何值,則選擇值:

$nonCheckBox = array_filter($vals, function($v) { return $v != 4 && $v != 1024; }); 
$selected = count($nonCheckBox) ? $nonCheckBox[0] : 0; 

T母雞在你的表格,您可以在$瓦爾斯陣列:

<input type="checkbox" name="chk1" value="4" <?php echo in_array(4,$vals) ? 'CHECKED' : '' ?> > 

和$選擇的選擇...

<option value="0" <?php echo $selected==0 ? 'selected' : '' ?>>None</option> 
<option value="8" <?php echo $selected==8 ? 'selected' : '' ?> >option-1 val 8</option> 

如果從服務器上加載,我更願意把選項中的數組和在循環中生成選項以設置選擇。所以在PHP中我會:

$options=[ 
    0 => 'None', 
    8 => 'Option-1 Val 8', 
    //... etc 
]; 

和我的渲染:

<select ...> 
    <?php foreach ($options as $k=>$v) : ?> 
     <option value="<?php echo $k ?>" <?php echo $selected==$k ? 'selected' : '' ?>><?php echo $v ?></option> 
    <?php endforeach; ?> 
</select> 
+0

我想要的是扭轉張貼值和回聲形式。 – Rezbin

+0

我已經更新了我的反向案例的答案。 – RichGoldMD

+0

感謝您的輸入。至少你讓我的權利..我會檢查它,一定會回到你身邊。 「你可以從數組中刪除已知的複選框值,如果還有任何東西,它的選擇值」。好點+1,雖然我沒有代表投票給你。 :-( – Rezbin

1

您可以在序列化格式的所有選定的值存儲在由這樣一列。

假設你選擇的值

$check1 = $_POST['chk1']??$_POST['chk1']; 
$check2 = $_POST['chk2']??$_POST['chk2']; 
$sel = $_POST['sel']??$_POST['sel']; 
$array = array($check1,$check2,$sel); 
$data = serialize($array); 

而當你從數據庫通過這種方式

$selected_data = unserialize($serialize_data); 

獲得序列化的數據,然後unserialise的那列數據,現在想獲得選定的值總和。然後您可以使用array_sum()功能

$selected_values_sum = array_sum($selected_data); 

/// Iterate stored values as required 

foreach($selected_data as $value){ 

} 
+0

似乎我的問題是令人困惑的,所以我編輯了我的問題......編輯:Mysql值是1036,我需要將其分解爲4,1024,8 ..如果查詢結果是12則分解它到4,8。意味着chk1和選項1被選中。我無法更改mysql數據庫 – Rezbin

相關問題