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

Archives Details

PHPで簡易アンケート

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>&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 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>&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で簡易アンケート パーセンテージバー追加編

こちらから。

Comment

Related Article

php 7.4にアップデート

2023.12.24

Laravel 4 を PHP 7 環境へ移行したお話。

2018.06.10

PHP 簡易アクセスログ 出力

2016.04.29

Laravelを 別環境に移動したら画面が真っ白に。MacにComposer、php mcrypt 等をインストールしたお話。

2015.10.10

遅れましたが..あけましておめでとうございます!2015年は Laravelで画像処理。からということで。

2015.01.08

IDE phpstorm, IntelliJ IDEAの Database接続が便利すぎる件(Vagrant + IntelliJ IDEA でMySQL操作)

2014.11.29

Laravel4でもSmartyを使用したい!

2014.11.20

人気急上昇!PHPフレームワーク「Laravel」を使ってみました。簡易会員サイト作成編

2014.09.24

Laravel4 パーミッションエラー Vagrant パーミッションが変更しない件

2014.08.24

【CentOS6】 PHP5.3からPHP5.5にバージョンアップしました

2014.08.11

CATEGORY LIST

LATEST NEWS

Rust - Actix Web mongo ユーザー登録 JWT認証

Rust

2024.03.24

Rust - Actix Web JWT 認証認可 APIの作成

Rust

2024.02.25

Rust - Actix Web × JSON 静的ファイルをAPIで返却

Rust

2024.01.19

Rust - Actix Web × MongoDB環境をサクッと起動

Rust

2024.01.18

5分で学ぶ RustでWave Function Collapse (波動関数崩壊アルゴリズム)

Rust

2024.01.15

LLaMAモデル GGMLフォーマット(llama.cpp)をRustフレームワーク Leptosを用いて M1MacMiniでサクッと動かす。

Rust

2024.01.11

2024年 狙っているモバイルノートPC

tool

2024.01.07

MacOS XcodeにSDL2を追加

tool

2023.12.26

php 7.4にアップデート

PHP

2023.12.24

5分で覚える Flutter Flameで作る Wave Function Collapse - 波動関数崩壊アルゴリズム

AI・Bot・algorithm

2023.12.20

Flutter - Flameでゲーム作成 (キャラクターの移動)

Flutter

2023.07.23

Flutterで作る ChatGPT Prompt Manager

Flutter

2023.07.12

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

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

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

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

FOLLOW US