人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

checkboxのチェック状態をcookieを使って保存したいと考えています。
保存ボタンを押すと、その時点でのチェック状態が保存されるようにしたいのですが、
JavaScriptとPHP間での変数のやりとりがうまくいきません。


勉強して以下のようなコードを書いてみましたが動作してくれません。
どのようなコードを書けばいいのか教えて頂ければ助かります。
よろしくお願いしますm(_ _)m
(div id = time以外のチェックボックスもあります)

*HTML
<div id ="time" >
<input name="time[]" type="checkbox" value="morning">朝
<input name="time[]" type="checkbox" value="noon">昼
<input name="time[]" type="checkbox" value="evening">夜

*JavaScript
var req_prm = {};
var time_cb = $('div#time > input:checkbox:checked');
if (time_cb != undefined) {
req_prm.time = time_cb.map(function(){return $(this).val();})
}

*PHP
if (isset($_POST['time'])) {
setcookie('time', serialize($_POST['time']));
} else {
setcookie('time', '', time() - 3600);
}

if (isset($_COOKIE['time'])) {
$time = unserialize($_COOKIE['time']);
} else {
$time = array();
}

●質問者: toshistyle
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● TransFreeBSD

Javascript:PHP間で変数のやりとりを行うコードが見当たりません。

書かれているのは

で、Cookieの内容がHTMLに反映されていないし、JavaScriptがCookieを扱っていません。

ユーザ, HTML, Cookie, JavaScript, PHPそれぞれどうチェックボックスの値が伝達されるべきか整理してください。

前の質問ではJavaScript, PHPそれぞれの方法が示されています。JavaScriptが使いたいのであれば、PHPではなくJavaScriptでCookieを扱う事になります。


2 ● Lhankor_Mhy

挙げられていないコードは存在しないものとして回答します。

HTML

まず、「保存ボタン」がHTMLにないと思うのでそれを書くところから始めて下さい。

次にPOSTするためのform要素がないので、それを書いて下さい。

JavaScript

このコードだけでは何もしてませんので削除して下さい。

PHP

Cookieから受け取った値をフォームに反映するためのコードがありませんので、それを書いて下さい。



たぶん

JavaScriptのことは忘れた方が良さそうです。


3 ● tdoi
ベストアンサー

こんな感じのこと?


<?php
if (isset($_GET['record'])) {
 $times = $_GET['time'];
 setcookie('times', serialize($times), time() + 30 * 60);
 exit;
}

$time = array();
if (isset($_COOKIE['times'])) {
 $times = unserialize($_COOKIE['times']);
}
?>
<html>
 <head>
 <script type="text/javascript" src="./jquery.js"></script>
 <script language="JavaScript">
<!--
function recordTime()
{
 var checkList = new Array(document.getElementById('morning'),
 document.getElementById('noon'),
 document.getElementById('evening'));
 var times = new Array();
 for (i = 0; i < checkList.length; ++i) {
 if (checkList[i].checked) {
 times.push(checkList[i].value);
 }
 }
 $.get("./index.php", { "time[]": times, "record": 1 });
}
-->
 </script>
 </head>
 <body>
 <div id ="time">
 <input name="time[]" type="checkbox" value="morning" id="morning" onClick="recordTime()" <?php if (in_array('morning', $times)) {?>checked="CHECKED"<?php } ?> >
 <label for="morning">朝</label>
 <input name="time[]" type="checkbox" value="noon" id="noon" onClick="recordTime()" <?php if (in_array('noon', $times)) {?>checked="CHECKED"<?php } ?> >
 <label for="noon">昼</label>
 <input name="time[]" type="checkbox" value="evening" id="evening" onClick="recordTime()" <?php if (in_array('evening', $times)) {?>checked="CHECKED"<?php } ?> >
 <label for="evening" >夜</label>
 </div>

 </body>
</html>

追記:

ごめんなさい。保存ボタン押したときだったのですね。

もっとシンプルにこんな感じでしょうか?

<?php
$time = array();
if (isset($_GET['time'])) {
 $times = $_GET['time'];
 setcookie('times', serialize($times), time() + 30 * 60);
} else if (isset($_COOKIE['times'])) {
 $times = unserialize($_COOKIE['times']);
}
?>
<html>
 <head>
 </head>
 <body>
 <form action="./checkbox.php">
 <div id ="time">
 <input name="time[]" type="checkbox" value="morning" id="morning" <?php if (in_array('morning', $times)) {?>checked="CHECKED"<?php } ?> >
 <label for="morning">朝</label>
 <input name="time[]" type="checkbox" value="noon" id="noon" <?php if (in_array('noon', $times)) {?>checked="CHECKED"<?php } ?> >
 <label for="noon">昼</label>
 <input name="time[]" type="checkbox" value="evening" id="evening" <?php if (in_array('evening', $times)) {?>checked="CHECKED"<?php } ?> >
 <label for="evening" >夜</label>
 </div>
 <input type="submit" value="保存"/>
 </form>
 </body>
</html>
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ