dポイントプレゼントキャンペーン実施中!

PHPで投票カウンタを作成したいと思います。
構造としてはラジオボタンが3つ並んでいて、そのどれかを選び
下にあるOK(ひとつだけ)ボタンをクリックすると、ラジオボタンの横に数値がカウントされるという簡易的なものです。
下記のコードに足りないところやいらないところを教えてください。

ド素人のためご教授願います。

<?php
if(isset($_COOKIE["tohyo"])){
$tohyo = $_COOKIE["tohyo"];
$tohyo++;
}else{
$tohyo = 0;
}
setcookie("tohyo", $tohyo, time()+60);
?>
<html>
<head>
<title>投票カウンター</title>
</head>
<body>
<form action="count2.php">
<p>
<input type="radio" name="tohyo" value="1"><?php print $value["$kekka"][1]; ?><br>
<input type="radio" name="tohyo" value="2"><?php print $value["$kekka"][2]; ?><br>
<input type="radio" name="tohyo" value="3"><?php print $value["$kekka"][3]; ?>
</p>
<input name="submit" type="submit" value="投票">
</form>
</body>
</html>

A 回答 (3件)

ANo.1さんの言うようにcookieに保存する意味はまるでないですが、


まぁ練習ということで。しかし60秒で消えるのは早すぎなので、
30分にしました。各関数についてはマニュアルを参照。

<?php
$value = unserialize($_COOKIE['value']);
for ($i = 1; $i <= 3; $i++) {
// やっとかないと何も表示されなかったりする
if ($value[$i] == '') { $value[$i] = 0; }
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$value[$_POST['tohyo']]++;
}
setcookie('value', serialize($value), time() + 1800);
?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=EUC-JP" />
<title>投票カウンター</title>
</head>
<body>
<form action="count2.php" method="post">
<p>
<?php
for ($i = 1; $i <= 3; $i++) {
echo "<input type=\"radio\" name=\"tohyo\" value=\"$i\" />$i ($value[$i])\n";
}
?>
</p>
<input name="submit" type="submit" value="投票" />
</form>
</body>
</html>
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
この問題は練習のためのものですので、投票するのは自分のPCからだけです。
ですので、自分が書いたコードを少し発展させた形にしたいのです。
unserializeや$_SERVERなどを使用しないで作成することはできないでしょうか?
無理いってすみません。

お礼日時:2007/11/11 13:46

ANo.2 ulmoです。



練習なら、なおさら自分でやりましょう。
私のコードは、たぶんあなたの希望通りに動作してると思います。
しっかり解析して下さい。

ヒントとして、
 ・$value を表示してますが、元のコードでは何もセットされてないことに気づいてますか?
  フォームから送信される変数は、method="post" なら $_POSTに、
  でなければ $_GET に保存されます。この場合、$_GET['tohyo'] に値がセットされます。
 ・$_SERVER['REQUEST_METHOD'] をチェックしないで外部変数を取り込むには、
  $_POST と $_GET の両方をチェックする必要があります。
  素直に $_SERVER['REQUEST_METHOD'] を使うべきでしょう。
 ・serialize()を用いずに cookie に配列を保存するには、
  要素を一つずつ setcookie() しなくてはなりません。
 ・ちなみに <?php print $foo; ?> は <?=$foo?> とも書けます。
    • good
    • 1

結果はCOOKIEに保存するのですか?


それだとPC毎にカウンタが違いますが・・・その仕様でいい?
    • good
    • 0
この回答へのお礼

>結果はCOOKIEに保存するのですか?
はい。結果はCOOKIEに保存します。

お礼日時:2007/11/09 21:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!