php チェックボックスについて
解決済
回答 4
投稿
- 評価
- クリップ 0
- VIEW 3,080
***********
if(empty($_POST["_icon"])){
$_SESSION["_icon_memo1"] = $_POST["_icon"][0];
$_SESSION["_icon_memo2"] = $_POST["_icon"][1];
$_SESSION["_icon_memo3"] = $_POST["_icon"][2];
}else{
};
***********
上記のコードなのですが前画面でチェックボックスで渡ってきたものをSESSIONに格納するといった流れなのですがチェックされずに空だった場合のelseの後にどのように書けばよいのかわからず困っています。
きっとすごく簡単な事でお恥ずかしいのですがご教授いただければ幸いです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
>のエラーが出てしまいました。
チェックボックスが送信対象になるのは、「チェックされたとき」だけです。
画面でチェックされない場合にサーバー処理にて「穴あき」のチェックが必要になるのが嫌なら以下のようにすることで解決します。
<<画面側>>
<input type="hidden" name="_icon_memo1" value="false" />
<input type="checkbox" name="_icon_memo1" value="true" />
<<サーバー側>>
○チェックされている場合
_icon_memo1 が要素2個の配列のとき、[0] が hidden の値、[1] が checkbox の値になります。
○チェックされてない場合
_icon_memo1 が要素1個の配列 or 配列ではない場合は画面でチェックされてないので1つの要素は hidden の要素になります。
スクリプトなどで活性・非活性が切り替わる場合は、サーバー側のロジックで活性・非活性の制御が
可能ならば、上記のHTMLのままで。状態を送った方が良い場合は以下のようにします。
<<画面側>>
○初期表示チェック無し、活性
<input type="hidden" name="_icon_memo1" value="false, false" />
<input type="checkbox" name="_icon_memo1" value="true" />
○初期表示チェックあり、活性
<input type="hidden" name="_icon_memo1" value="true, false" />
<input type="checkbox" name="_icon_memo1" value="true" checked="checked" />
○初期表示チェック無し、非活性
<input type="hidden" name="_icon_memo1" value="false, true" />
<input type="checkbox" name="_icon_memo1" value="true" disabled="disabled" />
○初期表示チェックあり、非活性
<input type="hidden" name="_icon_memo1" value="true, true" />
<input type="checkbox" name="_icon_memo1" value="true" disabled="disabled" checked="checked" />
こうすることで、要素が1個のとき、要素が2個のときでチェックボックスの状態が判断できます。
HTMLだけで対処可能ですが、以下のケースを除きます。
初期表示非活性チェック無し、画面送信時に、チェックあり非活性の場合は、スクリプトを使う
しかありません。この場合は、チェックボックスの onclick を設定し、hidden 要素の value を
編集する仕掛けを用意します。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
if(empty($_POST["_icon"])){
$_SESSION["_icon_memo1"] = $_POST["_icon"][0];
$_SESSION["_icon_memo2"] = $_POST["_icon"][1];
$_SESSION["_icon_memo3"] = $_POST["_icon"][2];
}else{
unset($_SESSION["_icon_memo1"]);
unset($_SESSION["_icon_memo2"]);
unset($_SESSION["_icon_memo3"]);
};
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
$_SESSION["_icon_memo1"]
$_SESSION["_icon_memo2"]
$_SESSION["_icon_memo3"]
の値をどっかで使っているので、Notice:が出てしまうのだと思います。この値を使うところで、
if (isset($_SESSION["_icon_memo1"])){
......
} else {
......
}
if (isset($_SESSION["_icon_memo2"])){
......
} else {
......
}
if (isset($_SESSION["_icon_memo3"])){
......
} else {
......
}
というふうにすると大丈夫だと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
どのような処理の流れなのかが読めないのでなんとも言えませんが、
この処理のあとに$_SESSION["_icon_memo1"]、$_SESSION["_icon_memo1"] 、$_SESSION["_icon_memo1"] を使うならfalseや""など入れてみてはどうでしょうか。
if(empty($_POST["_icon"])){
$_SESSION["_icon_memo1"] = $_POST["_icon"][0];
$_SESSION["_icon_memo2"] = $_POST["_icon"][1];
$_SESSION["_icon_memo3"] = $_POST["_icon"][2];
}else{
$_SESSION["_icon_memo1"] = false;
$_SESSION["_icon_memo2"] = false;
$_SESSION["_icon_memo3"] = false;
}
htmlspecialcharsしてるようでしたのでfalseいれたら何が帰ってくるか試しました。
var_dump(htmlspecialchars(false,ENT_QUOTES));//結果→string(0) ""
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/01/29 14:05
ご回答ありがとうございました
******************登録画面*********************************
<script type="text/javascript">
/* チェックボックスの名前で全選択/全解除処理する例 */
function chkAll_name(bool) {
var frm=document.sinnki;
for(var i=1; i<=11; i++) {
frm.elements["_i"+i].checked=bool;
}
}
</script>
<input type="hidden" id="_i1" name="_icon[]" value="false">
<input type="checkbox" id="_i1" name="_icon[]" value="true"><label for="_i1">新着</label>
<input type="button" onclick="chkAll_name(true)" value="全選択" />
<input type="button" onclick="chkAll_name(false)" value="全解除" />
******************確認画面*********************************
if( isset( $_POST['_icon'] )) {
foreach( $_POST["_icon"] as $_icon ){
echo "{$_icon}<br> ";
}
}
******************確認画面*********************************
上記のように書いてあるのですが結果から申し上げますと同じエラーが出ました
またいくつか質問をさせていただきたいのですが
1.登録画面から確認画面にtrueとfalseという文言ではなく新着というのを送りたい
2.javascriptを活かすにはどうすればよいのでしょうか?
宜しくお願い致します
2015/01/29 17:36
/* チェックボックスの名前で全選択/全解除処理する例 */
function chkAll_name(bool) {
var frm = document.sinnki;
for (var i=0;i < frm.elements.length;i++) {
var ele = frm.elements[i];
if (/checkbox/i.test(ele.type)) {
ele.checked = bool;
}
}
}
</script>
<form name="sinnki">
<input type="hidden" id="_i1" name="_icon1[]" value="false">
<input type="checkbox" id="_i1_1" name="_icon1[]" value="true"><label for="_i1">新着</label>
<input type="hidden" id="_i2" name="_icon2[]" value="false">
<input type="checkbox" id="_i2_1" name="_icon2[]" value="true"><label for="_i2">新着</label>
<input type="button" onclick="chkAll_name(true)" value="全選択" />
<input type="button" onclick="chkAll_name(false)" value="全解除" />
</form>
<<確認画面のPHP>>
チェックボックスの活性・非活性が絡まない場合は、
○チェックされると要素2個
○チェックされないと要素1個
です。
それを踏まえ、配列の長さだけ見れば判断できますよね。
id は一意である必要があるので、例だとしても、id="_i1" を2個並べちゃいけません。
全部のチェックボックスを同じ名前にすると、PHP側で同じ名前のアイテムは自動的に集約されるのでチェックありなのか無しなのかの判断が付かなくなります。
確認画面のPHP画面イメージを描画する場所で、
_icon1[] の要素が2個なら、チェックされていることになるので "新着" を描画すればいいのでは?
_icon1[] の要素が1個なら、チェックされていないことになるので なにも出力しないようにするだけだと思います。
# JavaScript は直しておきました。
2015/01/29 18:32
上記のコードを試してみました登録画面の部分はJavaScriptも含めてうまく動きました
確認画面なのですが渡ってきた_icon1をvar_dumpしてみたところ中身が(_icon1)となっていました。
なので下記のように書いたのですがどごがまちがっていますでしょうか?
if(empty($_POST["_icon1"])){
if(($_POST["_icon1"]) == "_icon1"){
$_POST["_icon1"] = "新着";
$_SESSION["_icon_memo1"] = ($_POST["_icon1"]);
}
}else{
unset($_SESSION["_icon_memo1"]);
};