お世話になります
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の後にどのように書けばよいのかわからず困っています。
きっとすごく簡単な事でお恥ずかしいのですがご教授いただければ幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
>Notice: Undefined index: _icon_memo1
>のエラーが出てしまいました。
チェックボックスが送信対象になるのは、「チェックされたとき」だけです。
画面でチェックされない場合にサーバー処理にて「穴あき」のチェックが必要になるのが嫌なら以下のようにすることで解決します。
<<画面側>>
<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 を
編集する仕掛けを用意します。
投稿2015/01/29 04:23
総合スコア1693
0
Notice: Undefined index: _icon_memo1が出てしまうのはosamuya さんのご指摘のとおりです。
どのような処理の流れなのかが読めないのでなんとも言えませんが、
この処理のあとに$_SESSION["_icon_memo1"]、$_SESSION["_icon_memo1"] 、$_SESSION["_icon_memo1"] を使うならfalseや""など入れてみてはどうでしょうか。
lang
1if(empty($_POST["_icon"])){ 2$_SESSION["_icon_memo1"] = $_POST["_icon"][0]; 3$_SESSION["_icon_memo2"] = $_POST["_icon"][1]; 4$_SESSION["_icon_memo3"] = $_POST["_icon"][2]; 5}else{ 6$_SESSION["_icon_memo1"] = false; 7$_SESSION["_icon_memo2"] = false; 8$_SESSION["_icon_memo3"] = false; 9}
htmlspecialcharsしてるようでしたのでfalseいれたら何が帰ってくるか試しました。
lang
1var_dump(htmlspecialchars(false,ENT_QUOTES));//結果→string(0) ""
投稿2015/01/29 03:00
総合スコア61
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/01/29 04:29
2015/01/29 06:58
0
たぶんunsetした後に
$_SESSION["_icon_memo1"]
$_SESSION["_icon_memo2"]
$_SESSION["_icon_memo3"]
の値をどっかで使っているので、Notice:が出てしまうのだと思います。この値を使うところで、
lang
1if (isset($_SESSION["_icon_memo1"])){ 2 ...... 3} else { 4 ...... 5} 6if (isset($_SESSION["_icon_memo2"])){ 7 ...... 8} else { 9 ...... 10} 11if (isset($_SESSION["_icon_memo3"])){ 12 ...... 13} else { 14 ...... 15}
というふうにすると大丈夫だと思います。
投稿2015/01/28 16:54
総合スコア241
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/01/29 02:43
2015/01/29 03:04
2015/01/29 03:57
2015/01/29 04:10
2015/01/29 06:01
2015/01/29 06:55
0
一度送信されSESSIONに保存され、今度は空で送信されてきた前提でしたらunsetでどうでしょうか。
lang
1if(empty($_POST["_icon"])){ 2$_SESSION["_icon_memo1"] = $_POST["_icon"][0]; 3$_SESSION["_icon_memo2"] = $_POST["_icon"][1]; 4$_SESSION["_icon_memo3"] = $_POST["_icon"][2]; 5}else{ 6unset($_SESSION["_icon_memo1"]); 7unset($_SESSION["_icon_memo2"]); 8unset($_SESSION["_icon_memo3"]); 9};
投稿2015/01/28 10:01
総合スコア61
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/01/28 11:08
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/01/29 05:05
2015/01/29 08:36
2015/01/29 09:32