cookieでチェックボックスの状態を保存したい
保存ボタンを押すと、チェック状態をcookieで保存する機能を実装したいと考えています。
<form name="frmOutput" method="get" action="#">
<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>
<input type="submit" name="submit_1" value="保存" onClick="recordTime(); return false;" />
この保存ボタンを押すと、JavaScriptで書いたrecordTimeで、チェックされているcheckboxの値を取得します。
<script src="./jquery.js" type="text/javascript"></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>
値がセットされていればcookieに書き込みを行い、リロードすると保存時のチェック状態が再現されます。
<?php
if (isset($_GET['record'])) {
$times = $_GET['times'];
$tmp = serialize($times);
echo $tmp;
setcookie('times', $tmp, time() + 30 * 60*60*24);
exit;
}
$tmp = $_COOKIE['times'];
$tmp = stripslashes($tmp);
$times = unserialize($tmp);
if ($times === false) {
echo "unserialize failed.";
}
?>
以上のコードなのですが、うまくcookieに保存されません。
これとは別にcookieを削除するボタンも作っており、
この削除ボタンでcookieの有効期限を過去にして削除してから、
動作がおかしくなったように感じていますが、
原因がはっきり分かりません。
知識を持っておられる方がいらっしゃれば、
教えて頂ければ助かります。
よろしくお願いしますm(__)m
補足
早速の回答をありがとうございます。 ご指摘を受けた箇所を自分なりにまとめてみました。 >$Javas = '...'; に対する実行が行はれているか。 ><form></form>の内部の名前が一致しているか。 実行するPHPには ((~前略~)) <FORM NAME="F" ACTION="under.php" METHOD="'.MTYPE.'" TARGET="under" onSubmit="setTimeout("hgclear()",10)"> if (!empty($ws) && $topmode != "short") { # Whisper表示・非表示 echo ' || <B>Whisper</B> <INPUT TYPE="text" NAME="wsa" SIZE="10" CLASS="textform">'; } else { echo '<INPUT TYPE="hidden" NAME="wsa" VALUE="">'; } <B>直前の発言を削除</B><INPUT TYPE="checkbox" NAME="dl" VALUE="1" CLASS="checkform">'; if ($Dice) echo $DiceSelect; ((~後略~))</FORM> とあり、さらに質問に書いたJavaSprictを組み込んだPHPには $DiceSelect .= ' || <B>おみくじ</B> <INPUT TYPE="checkbox" NAME="di" VALUE="1" TABINDEX="-1">'; と書いてあります。NAME指定も間違っていないようなのですが…。 >$Javas = '...';の部分が埋め込まれているかということでしょうか。ソースには... 実行するPHPに埋め込むようになっているようです。 ブラウザで実行してみたところ、質問に書いた$Javasと同様のものがきちんとソースに反映されていました。 ちなみに「直前の発言を削除(dl)」も同じくチェックボックスですが こちらは実行するときちんと無効に戻ってくれるので、いろいろ真似てはみるのですがやはり素人の浅知恵ではうまくいきません;