アンケートの作り方

とにかく需要が多いのがアンケート。業務でも趣味でもページにこれ付けたいって人は多い。
例えば「このページは参考になりましたか? はい いいえ」とか、 「このページはいかがでしたか? 5択」とか。 凝った物などは理解しにくいので、ここでは最もシンプルなものを作り、 そこから拡張する方法を解説する。

基本は$_POSTでデータ受信と同じ。
同じようにアンケートの入力ページを作る。

<form name="form" method="post" action="anke-to.php">
<input type="radio" name="answer" value="0">
<input type="radio" name="answer" value="1">
<input type="submit" name="submit" value="送信">
</form>

これをanke-to.htmlなどとする。

次に上で送られてきたデータを処理するPHPを作るわけだが、基本はデータの書き込み。 やってる事は超簡単。
流れとしては

データを保存するファイルを開く
 ↓
ファイルの内容を配列に格納
 ↓
回答があった数字をプラス
 ↓
データをファイルに書き込み

これだけ。

<?php
$data=@file('anke-to.txt');

for($i=0; $i<2; $i++){
 $data[$i]=rtrim($data[$i]);
}

if($_POST['submit']){
 $data[$_POST['answer']]++;
 $read_txt=fopen('anke-to.txt','w');
 if(flock($read_txt , LOCK_EX)){
  for($i=0; $i<2; $i++){
   fwrite($read_txt,$data[$i]."\n");
  }
 }
 fclose($read_txt);
}
header("Location: thanks.html");
?>

これをanke-to.phpなどとする。
HTMLの送信部分である
<input type="radio" name="answer" value="0">
で、答えとなる変数名answerにvalue値として0を送信。
ここで項目を増やすたびにvalueを1、2、3と増やしていくわけ。
今回は2択なのでvalue=0と=1の2行なので$i<2としている。
こうして送られてきたデータは$_POST["answer"]で受け取れる。
PHP部分ではまず先に保存しているデータを
$data=@file('anke-to.txt');
として全ての行を$dataに格納し、
for($i=0; $i<2; $i++){
 $data[$i]=rtrim($data[$i]);
}
の部分で格納した配列$data[]に改行を取り除きながら入れていく。(今回の場合2択なので2行なのが固定)
if($_POST['submit']){
データが送られてきた場合に処理を開始、
$data[$_POST['answer']]++;
この場合value値の0が送られてきたら$data[0]、1が送られてきたら$data[1]の値がプラスされる。
書き込みモードでファイルを開き(今回の場合全データをすでに読み込んでいるのでwモードで開く)、
一応ファイルをロックして、行数分データを書き込む。
最後にアンケートを受け取った事を書いたページthanks.htmlなどを用意し、そのページに移動する。

恐らくこれが最も基本となるので、
1行ずつ確実に理解できるとあとの拡張は応用だけなので簡単。
それぞれの関数やオプションなども知らなければリファレンスなどをざっと目を通しておくべき。

ラジオボタンは選択できるのは1つだけなので、 3択でも5択でも個数を増やすだけ。
つまり、form部分のラジオボタンの数、PHPの読み込み&書き込み部分の$i<○の数をそれぞれ必要な分だけ増やす。 また、いくつものアンケートを載せる場合はname="answer"を変更したフォームを必要な数だけ書き、 その分の$i<○の数を増やし、$data[$_POST['answer']]++;のanswerを書き換えたものを同じ数だけ書けばいい。(form間の送信ボタンは最後にひとつだけでいい)

テキストボックスを追加するにしてもその変数を受け取るだけなので「POSTでデータ受信」が理解できていれば問題ない。 チェックボックスは若干面倒で、 複数回答可などの場合はname="checkbox[]"(選択項目全て同じ変数名+[]、数字は入れない)とすると$_POST["checkbox"][0](選択項目の数だけ0、1、2と増えていく)で取り出せる。
どういった形でデータが送られてくるかなども受け取ったデータをprint_r($_POST);で表示させたりして試して欲しい。

もちろん「はい いいえ」だけならわざわざラジオボタンではなく単にボタンでいいのだが、 アンケートの基本サンプルという意味でそうしている。

ちなみに、アンケートページそのものなら別に必要ないのだが、 ページ最下部やサイドメニューにちょっと表示させるだけなら、 アンケート部分はiframeやjavascriptなどを使い、アンケートを送信してもその部分だけが書き換わるようにしていると、 ページ全体が変位しないので見ている人にやさしいかもしれない。



サンプル

著作権について
ファイルからデータの読み込み
ファイルへのデータの書き込み
フォルダ内のファイル名取得
アクセスカウンターの作り方
アンケートの作り方
フォームからのデータの取得
フォーム以外のページからのデータの取得
ファイル内、文章内の文字列の検索
パスワード認証の方法と作り方

0から始めるPHP

PHPのすすめ(これ飛ばしてもいい)
必要な環境とPHPへのアクセス
開発に使うもの
初めての方への注意点
PHPの基本(何らかの言語経験者向け)
PHPの基本(初めての人向け)
書き方
ファイルの読み込み

プログラミング講座
文字などの出力
PHPにおける変数
ifによる条件比較
forによる繰り返し処理
PHPにおける配列
これまでとこれからの学び方

PHPの使える
おすすめレンタルサーバー

スタードメイン

レンタルサーバーの選び方


その他

プログラミングのコツ
プログラマーと年齢
誰でも簡単にできるサーバー負荷対策
社内や自宅サーバーのグローバルIPアドレスが変わってもアクセスできるようにする

日記

2014年
日本語形態素データとキーワード出現回数
Androidベースのゲーム機に期待
4月末に判明したIEの脆弱性について
フラッシュプレーヤーの製作
ホームページとウェブサイトの違い
WIFIなどの用語は正しく使いたい
国産ゲーム会社のサイトについて
検索エンジンの開発について
プレインストールWindowsからの脱却
Android・iPhoneとアプリ開発
Windows8、スタートボタンはもういらない?
サイトの作成とやるやらないは別
あの人は詳しいと言う人と言われる人
index.htmlと/の正規化について
AndroidOSとLinuxOS
モバイル端末で必ず見るもの
ユーザー参加型市民アプリ

2013年2月
2013年1月
2012年12月
2012年11月
2012年10月
2012年9月