2017-07-28 4 views
-3

私はphpでウェブインタフェースを作成したいmysqlデータベース(変更できない)を持つデスクトップアプリケーションを持っています。このアプリの フォームには2つのチェックボックスがあり、リストとオプションの両方を選択できます。例えば以下のようにします。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>

とMySQL単一の値の両方のチェックボックスが選択され、オプション1を選択した場合のように、3入力の合計が格納されている..値1036(CHK1値= 4 + CHK2値= 1024 +に格納オプション1値= 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

あなたは期待していますあなた自身でコードを書こうとします**。あなたが問題を抱えている場合は** [もっと研究している**](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ならばそれを分解してください私はmysqlデータベースを変更することはできません – Rezbin

関連する問題