質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1027閲覧

cookieがあったらチェックボックスにチェックする(PHP)

ikkouenosenpai

総合スコア16

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/01/07 13:15

編集2019/01/07 14:12

あのすみません、**「cookieがあったらチェックボックスにチェックする」**って、PHPだとどうやるんですか?

cookieはcheck_colorというキーで、入る値はredとかgreenとかred%2greenとかです。
もしredが入ってたらname="check_red"にチェックしたいというイメージです。

html

1<div class="labels"> 2 <label id="check_red"> 3 <input name="check_red" type="checkbox" value="red"> 4 <span>red</span> 5 </label> 6 <label id="check_green"> 7 <input name="check_red" type="checkbox" value="green"> 8 <span>green</span> 9 </label> 10</div>

自分が考えたのは下記のように、**「cookieがあったらチェックボックス自体をチェックつきで出力する」**なんですけど、これじゃおかしいですよね?

php

1<div class="labels"> 2 <label id="check_red"> 3 <?php cookie_check_red(); //cookieがあったらチェックボックス自体をチェックつきで出力する?> 4 <span>red</span> 5 </label> 6 <label id="check_green"> 7 <?php cookie_check_green(); //cookieがあったらチェックボックス自体をチェックつきで出力する?> 8 <span>green</span> 9 </label> 10</div> 11 12<?php 13function cookie_check_red(){ 14 if (isset($_COOKIE["check_color"])){ 15 if ( 1 === preg_match( '/red/', $_COOKIE["check_red"] ) ) { 16 echo '<input name="check_red" type="checkbox" value="red" checked="">'; 17 }else{ 18 echo '<input name="check_red" type="checkbox" value="">'; 19 } 20 }else{ 21 echo '<input name="check_red" type="checkbox" value="">'; 22 } 23} 24function cookie_check_green(){ 25 if (isset($_COOKIE["check_color"])){ 26 if ( 1 === preg_match( '/green/', $_COOKIE["check_green"] ) ) { 27 echo '<input name="check_green" type="checkbox" value="green" checked="">'; 28 }else{ 29 echo '<input name="check_green" type="checkbox" value="">'; 30 } 31 }else{ 32 echo '<input name="check_green" type="checkbox" value="">'; 33 } 34} 35?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

「red%2green」は「red%20green」ですよね?

こんな感じでどうでしょう?
(js側でセットする処理を書いてあります)

php

1<?PHP 2$cookie=filter_var_array($_COOKIE,["check_color"=>FILTER_DEFAULT]); 3print_r($cookie); 4$checked=[ 5 "red"=>preg_match("/(^| )red(?= |$)/",$cookie["check_color"])?" checked":"", 6 "green"=>preg_match("/(^| )green(?= |$)/",$cookie["check_color"])?" checked":"", 7]; 8?> 9<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 10<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> 11<script> 12$(function(){ 13 //$.removeCookie('check_color'); 14 console.log(document.cookie); 15 $('#btn1').on('click',function(){ 16 location.href=location.href; 17 }); 18 $('#btn2').on('click',function(){ 19 setcolor('red'); 20 }); 21 $('#btn3').on('click',function(){ 22 delcolor('red'); 23 }); 24 $('#btn4').on('click',function(){ 25 setcolor('green'); 26 }); 27 $('#btn5').on('click',function(){ 28 delcolor('green'); 29 }); 30}); 31function setcolor(c){ 32 var color=$.cookie('check_color')||''; 33 var reg=new RegExp("(^| )"+c+"(?= |$)"); 34 if(!color.match(reg)){ 35 if(color!=='') color+=' '; 36 color+=c; 37 $.cookie('check_color',color); 38 } 39} 40function delcolor(c){ 41 var color=$.cookie('check_color')||''; 42 var reg=new RegExp("(^| )"+c+"(?= |$)"); 43 color=color.replace(reg,''); 44 color=color.replace(/^ | $/,''); 45 if(color==""){ 46 $.removeCookie('check_color'); 47 }else{ 48 $.cookie('check_color',color); 49 } 50} 51</script> 52<div class="labels"> 53 <label id="check_red"> 54 <input name="check_red" type="checkbox" value="red"<?=$checked["red"];?>> 55 <span>red</span> 56 </label> 57 <label id="check_green"> 58 <input name="check_red" type="checkbox" value="green"<?=$checked["green"];?>> 59 <span>green</span> 60 </label> 61</div> 62 63<input type="button" id="btn1" value="reload"> 64<input type="button" id="btn2"value="set red"> 65<input type="button" id="btn3" value="del red"> 66<input type="button" id="btn4" value="set green"> 67<input type="button" id="btn5" value="del green"> 68

調整

PHP

1<?PHP 2$cookie=filter_var_array($_COOKIE,["check_color"=>FILTER_DEFAULT]); 3$checked=["red"=>"","green"=>""]; 4$val=["red"=>"","green"=>""]; 5print_r($cookie); 6if(preg_match("/(^| )red(?= |$)/",$cookie["check_color"])){ 7 $checked["red"]=" checked"; 8 $val["red"]="red"; 9}; 10if(preg_match("/(^| )green(?= |$)/",$cookie["check_color"])){ 11 $checked["green"]=" checked"; 12 $val["green"]="green"; 13}; 14 15?> 16<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 17<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> 18<script> 19$(function(){ 20 //$.removeCookie('check_color'); 21 console.log(document.cookie); 22 $('#btn1').on('click',function(){ 23 location.href=location.href; 24 }); 25 $('#btn2').on('click',function(){ 26 setcolor('red'); 27 }); 28 $('#btn3').on('click',function(){ 29 delcolor('red'); 30 }); 31 $('#btn4').on('click',function(){ 32 setcolor('green'); 33 }); 34 $('#btn5').on('click',function(){ 35 delcolor('green'); 36 }); 37}); 38function setcolor(c){ 39 var color=$.cookie('check_color')||''; 40 var reg=new RegExp("(^| )"+c+"(?= |$)"); 41 if(!color.match(reg)){ 42 if(color!=='') color+=' '; 43 color+=c; 44 $.cookie('check_color',color); 45 } 46} 47function delcolor(c){ 48 var color=$.cookie('check_color')||''; 49 var reg=new RegExp("(^| )"+c+"(?= |$)"); 50 color=color.replace(reg,''); 51 color=color.replace(/^ | $/,''); 52 if(color==""){ 53 $.removeCookie('check_color'); 54 }else{ 55 $.cookie('check_color',color); 56 } 57} 58</script> 59<div class="labels"> 60 <label id="check_red"> 61 <input name="check_red" type="checkbox" value="<?=$val["red"];?>"<?=$checked["red"];?>> 62 <span>red</span> 63 </label> 64 <label id="check_green"> 65 <input name="check_red" type="checkbox" value="<?=$val["green"];?>"<?=$checked["green"];?>> 66 <span>green</span> 67 </label> 68</div> 69 70<input type="button" id="btn1" value="reload"> 71<input type="button" id="btn2"value="set red"> 72<input type="button" id="btn3" value="del red"> 73<input type="button" id="btn4" value="set green"> 74<input type="button" id="btn5" value="del green">

投稿2019/01/08 02:34

編集2019/01/08 09:36
yambejp

総合スコア114777

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikkouenosenpai

2019/01/08 09:21 編集

ありがとうございます。いろんな機能をつけてくれてめちゃうれしいんですが、実は事情があって(ajaxでそのvalueを拾っているため)、greenのcookieがないときは「greenにチェックをはずす」だけでなく、「greenのvalueを空」にしたかったんです。そのために質問コードのifで「greenが空ならvalue=""」と書いてました。書いてるだけで説明がなくてすみませんでした。
yambejp

2019/01/08 09:27

総じてcheck_colorの値をみてcheck_redとcheck_greenのvalueを変えるのでしょうか?
ikkouenosenpai

2019/01/08 09:32 編集

そうです。でvalueをajaxで拾って別のことに使いたかったんです。 チェックを付けたり外したり →チェックした、という見た目を変える。 valueを入れたり空にしたり →チェックしたことでvalueを拾ってajaxで表示内容を変える。 みたいな感じです。
yambejp

2019/01/08 09:37

調整版をあげました
ikkouenosenpai

2019/01/08 09:45

圧倒的…っっ!圧倒的感謝…!!どうもありがとうございます。
guest

0

全体的に違和感があります。

php

1<?php 2// $_COOKIE["select_green"] = true; 3$checked = isset($_COOKIE["select_green"])? "checked" : ""; 4echo '<input name="radio1" type="checkbox" value="red" ' . $checked . '>';

radio でもだいたい同じ

投稿2019/01/07 13:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikkouenosenpai

2019/01/07 15:04 編集

すいません、cookieのキーは「2つとも」check_colorです。
guest

0

おかしくはないですが、cookieが設定されていなかったら、value=""にするのはおかしいですね。

投稿2019/01/08 01:21

kasa0

総合スコア578

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikkouenosenpai

2019/01/08 09:21

はい、cookieがなかったらvalueを空にしたかったんです。
kasa0

2019/01/08 09:31

valueはチェックボックスがチェックされたときに返す値なので、それを空にしてしまうとチェックされても"red"や"green"が返らなくなってしまいます。 あくまでもチェックされたかどうかは、"checked"で設定します。
ikkouenosenpai

2019/01/08 09:36

「var test = $('.box input').val()」とするとき、もし「.box input」にチェックが入ってなくても、「test」には「.box input」のvalueが入っちゃいません?で、入っちゃうと困るんで、空にしておきたい。という考えなんですけど、おかしいですかこれ?
kasa0

2019/01/08 09:42

チェックボックスの場合は、「var test = $('.box input:checked').val()」とするのが普通ですね。
ikkouenosenpai

2019/01/08 09:43

うおすげー!知んなかったです!そーするとチェックされたときだけvalue拾えるってことですよね?ありがとうございます!!
kasa0

2019/01/08 09:44

はい、便利ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問