PHPで簡易アンケート
2011.02.25
この記事は最終更新日から1年以上が経過しています。
PHPで簡易アンケート実装方法です。
YES or NO方式でトータル人数とYESの人数を表示させます。
こんな感じに。
まずはHTMLとCSSで普通にマークアップ。
HTML
<div id="yesNoArea"> <p class="r1"><img src="title.gif" width="272" height="36" /></p> <p class="r2"><a href="#"><img src="yes_btn.gif" alt="はい" width="164" height="58" border="0" /></a> <a href="#"><img src="no_btn.gif" alt="いいえ" width="164" height="58" border="0" /></a></p> <p class="r3"><span class="total">500</span>人中 <span class="manTotal">369</span>人が<span class="man">男性</span>です。</p> </div>
CSS
#yesNoArea { width:374px; margin:0 auto; } #yesNoArea .r1, #yesNoArea .r2, #yesNoArea .r3 { text-align:center; } #yesNoArea .r3 { font-size:14px; } #yesNoArea .r3 .total { font-size:32px; font-weight:bold; color:#F26611; } #yesNoArea .r3 .manTotal { font-size:32px; font-weight:bold; color:#39F; } #yesNoArea .r3 .man { font-size:18px; font-weight:bold; }
上のテキストとボタンは単純に画像を置いてます。あえてa要素で実装しております。
当たり前ですがまだ設定を行っていないのでクリックしても何も起こりません。
では値を受け取れるようにformを追加します。
HTML
<form action="index.php" method="POST" name="yes"> <input type="hidden" name="yes" value="yes"> </form> <form action="index.php" method="POST" name="no"> <input type="hidden" name="no" value="no"/> </form>
と同時にaタグにもsubmitの設定を
<a href="javascript:void(0);" onclick="document.yes.submit()"> <a href="javascript:void(0);" onclick="document.no.submit()">
全体HTML
<body> <form action="index.php" method="POST" name="yes"> <input type="hidden" name="yes" value="yes"> </form> <form action="index.php" method="POST" name="no"> <input type="hidden" name="no" value="no"/> </form> <div id="yesNoArea"> <p class="r1"><img src="title.gif" width="272" height="36" /></p> <p class="r2"><a href="javascript:void(0);" onclick="document.yes.submit()"><img src="yes_btn.gif" alt="はい" width="164" height="58" border="0" /></a> <a href="javascript:void(0);" onclick="document.no.submit()"><img src="no_btn.gif" alt="いいえ" width="164" height="58" border="0" /></a></p> <p class="r3"><span class="total">500</span>人中 <span class="manTotal">369</span>人が<span class="man">男性</span>です。</p> </div> </body>
カウント用ファイル用意
ここまで出来たら、トータルカウント用にテキストファイル「total.txt」
YESのカウント用にテキストファイル「yes.txt」を用意します。
数字の「0」を記入し、同階層に配置。(数字を入れないと起動しません。)
配置したら、先ほどのHTMLファイルを拡張子「.php」のPHPファイルに変換します。
ではテキストファイルを扱うPHP構文を記述します。
PHP
<?php //全体人数 $fp = @fopen("total.txt","r+") or die("ファイルが開けません");//読み書きモードでオープン flock($fp, LOCK_EX);//ファイルの排他制御 $count = fgets($fp, 64); //64バイトorEOFまで取得、カウントアップ rewind($fp); //ポインタを先頭に、ロックして書き込み ?>
コメントの通り、読み書きモードでファイルをオープンし、
ファイルの排他制御を行います。
排他制御についてはこちらを参照。
PHP ファイル書き込みの排他制御
最後にポインタを先頭に合わせるためrewind()関数を記述。
同じように、YESのカウント用にPHP文を記述。
<?php //はい表示処理 $fp01 = @fopen("yes.txt","r+") or die("ファイルが開けません");//読み書きモードでオープン flock($fp01, LOCK_EX); //ファイルの排他制御 $yes = fgets($fp01, 64);//64バイトorEOFまで取得、カウントアップ rewind($fp01); ?>
フォームの値を受け取るPHP文を
<?php //値代入処理 $value01 = $_POST[yes]; $value02 = $_POST[no]; ?>
カウント処理のPHP文を
<?php //トータルカウント処理 if ($value01 == yes || $value02 == no) { $count++; rewind($fp); } //分岐処理 はい if($value01 == yes){ $yes++; rewind($fp01);//ポインタを先頭に、ロックして書き込み }; ?>
YESかNOの場合はトータルのカウント数を増加、
YESの場合のみYESのカウント数を増加。
最後に代入し、ファイルを閉じる構文
<?php fputs($fp, $count); //開けて代入 fclose($fp); //ファイルを閉じる fputs($fp01, $yes); fclose($fp01); ?>
完了!!!
簡易カウント式アンケート PHPファイル
<?php /* 簡易アンケート by d.t https://www.webcyou.com */ //全体人数 $fp = @fopen("total.txt","r+") or die("ファイルが開けません"); //読み書きモードでオープン flock($fp, LOCK_EX); //ファイルの排他制御 $count = fgets($fp, 64); //64バイトorEOFまで取得、カウントアップ rewind($fp); //ポインタを先頭に、ロックして書き込み //はい表示処理 $fp01 = @fopen("yes.txt","r+") or die("ファイルが開けません"); //読み書きモードでオープン flock($fp01, LOCK_EX); //ファイルの排他制御 $yes = fgets($fp01, 64); //64バイトorEOFまで取得、カウントアップ rewind($fp01); //値代入処理 $value01 = $_POST[yes]; $value02 = $_POST[no]; //トータルカウント処理 if ($value01 == yes || $value02 == no) { $count++; rewind($fp); } //分岐処理 はい if($value01 == yes){ $yes++; rewind($fp01);//ポインタを先頭に、ロックして書き込み }; fputs($fp, $count); //開けて代入 fclose($fp); //ファイルを閉じる fputs($fp01, $yes); fclose($fp01); ?>
に伴い、formのactionの値を同ファイル先に変更
action="./yes-no003.php"
トータル人数表示する場所にecho文を
<?php echo $count;?>
YESの人数表示部分に同じくecho文を
<?php echo $yes;?>
で、完了です!
簡易カウント式アンケート ファイル全文
<?php /* 簡易アンケート by d.t https://www.webcyou.com */ //全体人数 $fp = @fopen("total.txt","r+") or die("ファイルが開けません"); //読み書きモードでオープン flock($fp, LOCK_EX); //ファイルの排他制御 $count = fgets($fp, 64); //64バイトorEOFまで取得、カウントアップ rewind($fp); //ポインタを先頭に、ロックして書き込み //はい表示処理 $fp01 = @fopen("yes.txt","r+") or die("ファイルが開けません"); //読み書きモードでオープン flock($fp01, LOCK_EX); //ファイルの排他制御 $yes = fgets($fp01, 64); //64バイトorEOFまで取得、カウントアップ rewind($fp01); //値代入処理 $value01 = $_POST[yes]; $value02 = $_POST[no]; //トータルカウント処理 if ($value01 == yes || $value02 == no) { $count++; rewind($fp); } //分岐処理 はい if($value01 == yes){ $yes++; rewind($fp01);//ポインタを先頭に、ロックして書き込み }; fputs($fp, $count); //開けて代入 fclose($fp); //ファイルを閉じる fputs($fp01, $yes); fclose($fp01); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>簡易アンケート</title> <style type="text/css"> #yesNoArea { width:374px; margin:0 auto; } #yesNoArea .r1, #yesNoArea .r2, #yesNoArea .r3 { text-align:center; } #yesNoArea .r3 { font-size:14px; } #yesNoArea .r3 .total{ font-size:32px; font-weight:bold; color:#F26611; } #yesNoArea .r3 .manTotal { font-size:32px; font-weight:bold; color:#39F; } #yesNoArea .r3 .man { font-size:18px; font-weight:bold; } </style> </head> <body> <form action="./yes-no003.php" method="POST" name="yes"> <input type="hidden" name="yes" value="yes"> </form> <form action="./yes-no003.php" method="POST" name="no"> <input type="hidden" name="no" value="no"/> </form> <div id="yesNoArea"> <p class="r1"><img src="title.gif" width="272" height="36" /></p> <p class="r2"><a href="javascript:void(0);" onclick="document.yes.submit()"><img src="yes_btn.gif" alt="はい" width="164" height="58" border="0" /></a> <a href="javascript:void(0);" onclick="document.no.submit()"><img src="no_btn.gif" alt="いいえ" width="164" height="58" border="0" /></a></p> <p class="r3"><span class="total"><?php echo $count;?></span>人中 <span class="manTotal"><?php echo $yes;?></span>人が<span class="man">男性</span>です。</p> </div> </body> </html>
以上。
更にパーセントでバー表示を行う方法は
PHPで簡易アンケート パーセンテージバー追加編
こちらから。