プロが教えるわが家の防犯対策術!

PHPでチェックボックスの内容を保存する方法

2点の質問があります。

経験者に相談ですが、

1番目の質問
フォームによるチェックボックスの内容をカンマ区切りのデータとして内容を取得保存する場合に皆様はどのようにしてるか教えてください。


みかん チェックあり
りんご チェックなし
ばなな チェックあり

(1)データ1,データ2,データ3,みかん,  ,ばなな (チェックがない項目は空にする)
(↑この場合はチェック項目を跡で追加する場合は結構面倒)

(2)データ1,データ2,データ3,みかん: :ばなな (カンマ間で適当な区切り記号)
(↑この場合はログを戻す時に:でスプリットさせて処理する)



2番目の質問
ログに書き込んだデータを再度カンマ区切りでスプリットさせてフォームのチェックボックスとして元に戻して表示する方法がわかりません。サイト検索しましたがサンプルになりそうなものが見つからず、もし参考になりそうなサイトやヒントになるようなサンプルを教えて下さい。



お願いします。

A 回答 (3件)

すみません、間違えてました。



<?php
$fruit[1] = "りんご";
$fruit[2] = "みかん";

$ckb = split( ":", $a);
foreach($fruit as $val){
if(in_array($val,$ckb)){
echo '<input type="checkbox" value="'.$val.'" checked>'.$val;
}
else{
echo '<input type="checkbox" value="'.$val.'">'.$val;
}
}
?>

でした。
    • good
    • 0
この回答へのお礼

なるほどですね!
非常にためになりました。
また、コード処理も教えていただきまして助かりました。
また、何かありまましたらお願いします。

お礼日時:2010/05/06 05:21

質問1への回答


私はこのやり方でやっています。
http://9jp.info/archives/200
ファイル管理の場合でもファイルを一つ追加するなどして応用出来ると思います。

質問2への回答
カンマで分割した後のチェックボックスのデータを$aとします。

$ckb = split( ":", $a);
if(in_array("りんご",$ckb)){
echo "りんごはある";
}
else{
echo "りんごはない";
}

という形であるか無いかは判定出来るので
$fruit[1] = "りんご";
$fruit[2] = "みかん";
などと予めチェックボックス項目の配列を作成しておき、
$ckb = split( ":", $a);
foreach($fruit as $val){
if(in_array("りんご",$ckb)){
echo '<input type="checkbox" value="'.$val.'" checked>'.$val;
}
else{
echo '<input type="checkbox" value="'.$val.'">'.$val;
}
}

こんな感じでどうでしょう?項目がある場合にのみchecked属性を付加しています。
    • good
    • 0

こんにちは(^^)



カンマ切りといっても、最終的にどのような恰好にするかによる気もしますが、CSVを思い浮かべればよいでしょうか? それならばユーザーの回答データ毎に改行をいれ、1行=1ユーザー分=1レコードというように、データベースに似た形になりますよね。

で、それを前提として(「データ1,データ2,データ3」とありますが、これは「みかん、りんご、ばなな」とは別のデータでしょうか? それとも表題(ex.みかん=データ1)? このデータ○の存在意義がわからないので、お望みの回答ではないかもしれませんが、2番目の質問にあるように、後ほど取り出す事を考えるのであれば)(1)の方が個人的にはやりやすそうな気がします。

例1:「みかん」と「ばなな」を選択
"みかん","","ばなな"

こうしておくと、のちのち、PHPでCSVデータ(今回はログに該当)を取得する際に、配列で取得できますよね。このデータを入れる変数を$hogeとすると、

$hoge[0] = "みかん"
$hoge[1] = ""
$hoge[2} = "ばなな"

というような感じで取得することになると思います。こうなれば、「選択されていない=空」「選択されている=空でない」となりますので、2番目の質問への回答としては、条件分岐で処理が可能です。例えば、

for($i=0;$i<count($hoge);$i++){
if($hoge[$i] != ""){
$checked[$i] = 'checked="checked"';
}
}

などとして、あらかじめ、空でなければ(=選択されていれば)何かしらの変数に(ここでは$checkedとしています)「checked="checked"」をいれるようにし、HTMLの表示部分にてechoしてやればよいと思います。

例:
<input type="checkbox" name="" value="みかん" <?php echo $checked[0] ?> />
<input type="checkbox" name="" value="りんご" <?php echo $checked[1] ?> />
<input type="checkbox" name="" value="ばなな" <?php echo $checked[2] ?> />

みたいな感じで。
流れとしては、こんな感じが分かりやすくて、作りやすいのではないかと。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!