このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

web帳

記事詳細

2011.02.25

PHPで簡易アンケート

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>&nbsp;<a href="#"><img src="no_btn.gif" alt="いいえ" width="164" height="58" border="0" /></a></p>
  <p class="r3"><span class="total">500</span>人中&nbsp;&nbsp;<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>&nbsp;<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>人中&nbsp;&nbsp;<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 http://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 http://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>&nbsp;<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>人中&nbsp;&nbsp;<span class="manTotal"><?php echo $yes;?></span>人が<span class="man">男性</span>です。</p>
  </div>
</body>
</html>

デモページはこちらから

以上。

 

更にパーセントでバー表示を行う方法は

PHPで簡易アンケート パーセンテージバー追加編

こちらから。

  • RSSを登録する

  • follow us in feedly

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、港区六本木で活動中。

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。