質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1146閲覧

PHPでアンケート結果の表示と結果の保存ができない

Cherry1217

総合スコア24

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/02/06 13:27

編集2019/02/06 13:44

PHP初心者です。
PHPでアンケートフォームを作っているのですが、アンケート結果の表示と結果の保存が
うまくいきません。

エンケートフォームを入力
エラーがある場合
->戻ってアンケートの項目全てにお答えください。
エラーがない場合
->アンケート結果を受け付けました!!!

上記のようにさせたいのですが、今の現状だと、
アンケートを入力してもしなくても、「アンケート結果を受け付けました!!!」
と表示され、本来エラーとして表示されるべきものが、エラーとして表示されません。
多分、データがうまくPOSTされておらず、データの精査が出来ていないからだと思うのですが、
POSTされない理由が全く解りません。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="description" content="アンケートフォーム"> <title>アンケートフォーム</title> </head> <body> <h2>アンケートフォーム</h2> <form action="question2.php" method="post"> <dl class="clearfix"> <dt>性別は?</dt> <dd> <?php $male = '男性'; $female = '女性'; $number = array('1' , '2');
echo ' <label><input type="radio" name="gender" value="' . $number[0] . '" />' . $male . '</label>' . "¥n"; echo ' <label><input type="radio" name="gender" value="' . $number[1] . '" />' . $female . '</label>' . "¥n"; ?>
</dd> <dt>年齢は</dt> <dd> <label> <select name="age"> <option value="0" selected="selected">選択してください</option> <?php for ($num = 1; $num <= 4; $num++){ echo '<option value = "' . $num . '">' . $num . '0代</option>' . "¥n"; } ?> <option value="5">50代以上</option> </select> </label> </dd> <dt>趣味は?</dt> <dd class="hobby-area"> <?php $hobby = array( 1 => '音楽鑑賞', 2 => '映画鑑賞', 3 => 'ドライブ', 4 => '旅行', 5 => 'その他'); foreach ($hobby as $key => $value) { echo ' <label><input type="checkbox" name="hobby[' . $key . ']" value="' . $key . '" />' . $value . '</label>' . "¥n"; } ?> </dd> </dl> <p> <input type="submit" value="投票する" /> </p> </from> <p class="copy"> &copy; 2010 PHP for web designer All fights reserned. </p> </body> </html>
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="description" content="アンケート結果を送信しました"> <title>アンケート結果を受け付けました!!!</title> </head> <body> <div id="box"> <div id="header"> <h1>PHP for web Designer</h1> </div> <ul id="menu" class="clearfix"></ul>
<div id="main"> <h2>アンケートフォーム</h2> <?PHP $error = 0; if (isset($_POST['gender'])) { $gender = $_post['gender']; if (ctype_digit($gender)) { if(gender == 1){ $gendername = '男性'; } elseif ($gender == 2) { $gendername = '女性'; } else { $error = 1; } } else{ $error = 1; } } else { $error = 1; } if (isset($_post['age'])) { $age = $_post['age']; if(ctype_digit('age')) { if($age < 1 || $age > 5) { $error = 1; } } else { $error = 1; } } else { $error = 1; } if (isset($_post['hobby'])) { $hobby = $_post['hobby']; if(is_array($hobby)){ foreach ($hobby as $value) { if($value < 1|| $value >5){ $error = 1; } } } else { $error = 1; } } else{ $error = 1; } if ($error == 0) { echo '<dl class="clearfix">'; echo '<dt>性別は?</dt><dd>' . $gendername . '</dd>'; if($age != 5) { echo '<dt>年齢は?</dt><dd>' . $age . '0代</dd>'; }else{ echo '<dt>年齢は?</dt><dd>50代以上</dd>'; } echo '<dt>趣味は?</dt>'; echo '<dd>'; foreach ($hpbby as $value) { switch ($value) { case 1: echo '音楽鑑賞<br />'; break; case 2: echo '映画鑑賞<br />'; break; case 3: echo 'ドライブ<br />'; break; case 4: echo '旅行<br />'; break; case 5: echo 'その他<br />'; break; } } echo '</dd>'; $textfile = 'Applications/MAMP/log/log.txt'; $fp = fopen($textfile, 'r+b'); if(!$fp) { exit('ファイルがないか異常があります'); } if(!flook($fp,LOCK_EX)){ exit('ファイルをロックできませんでした'); } while(!feof($fp)){ $writebuffer[] = trim(fgets($fp)); } if($gender == 1) $writebuffer[0]++; if($gender == 2) $writebuffer[1]++; $writebuffer[$age + 1]++; foreach ($hobby as $key => $value) { $writebuffer[$key + 6]++; } $writebuffer[12]++; rewind($fp); foreach ($writebuffer as $value) { fwrite($fp, $value . "¥n"); } fclose($fp); echo '</dl>'; echo '<p class="app_msg">以上の内容を保存しました!</p>'; echo '<p class="app_msg"><a href="question3.php">集計結果を見る</a></p>'; }else{ echo '<p class="app_msg">'; echo '戻ってアンケートの項目全てにお答えください。'; echo '</p>'; } ?> <dl class="clearfix"></dl> <p class="app_msg">以下の内容を保存しました!</p> <p class="app_msg"><a href="qustion3.php">集計結果を見る</a></p> </div> <p class="copy"> &copy; 2010 PHP for web designer. ALL rights reserved. </p>
</div> </body> </html>

0.男性
1.女性
2.10代
3.20代
4.30代
5.40代
6.50代以上
7.音楽鑑賞
8.映画鑑賞
9.ドライブ
10.旅行
11.その他
12.アンケート回答述べ人数

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/02/06 13:30

コードはマークダウンのcode機能を利用してご提示ください。 「初心者」と書くより「初心者アイコン」をつけてください。 「うまくいかない」では何が起きているかわからないですし丸投げと変わらないのできちんと起きている現象とゴールを明確に記載してください。 エラー出てませんか?確認してください(エラー表示をOnにしてください)
m.ts10806

2019/02/06 22:17

マークダウンが分からなければ、コード部分を選択して<code>ボタンを押してください(というかスルーせずそこも私に訊いてください)
Cherry1217

2019/02/07 12:43

返信が遅くなりすみません。 一応<code>は使用しているつもりですが、もしかしたら使い方が間違っているかもしれません。 問題としては、アンケートが入力されていれば、'アンケート結果を受け付けました'、 未入力があれば、'戻ってアンケートの項目全てにお答えください。'と表示させたいのですが、 現状、アンケートが入力されていようがされてまいが、'アンケート結果を受け付けました'と表示されます。 多分、POSTが上手く動いてくれていないからだと思うのですが、プログラムの何処が悪いのか全く分からないところで止まっています。
m.ts10806

2019/02/07 12:50

><code>は使用しているつもりですが いえどこにもその様子はないです。 わからなければ質問編集画面でコードを編集状態にし<code>ボタンを押してください。 するとこうなって ```ここに言語を入力 //実際のコード ``` 「ここに言語を入力」というのが選択状態に切り替わるので 「PHP」とか言語名にかえるといいです。 ```PHP //実際のコード ``` ちなみに開始の```の前には改行が必要。終了の```の前後に改行を入れてください。 ```PHP echo "Hello World"; ``` あとは回答がついているのでそちらを参照してください。 PHPは変数は大文字小文字を大別します。$aと$Aは別物です。
guest

回答1

0

ベストアンサー

$_postではなく$_POSTですね
あと、question2.phpの<!DOCTYPE html>の前にアンケート入力チェック
及びファイルに書き出す処理を行い正常かどうかわかってから、HTML部分を出したほうがいいです。
(が今回はできるだけソース原型を留めるためやらない)

雪のため暇になったので動かすまでやってみた限り

if(gender == 1){$ついてないからだめ
ctype_digit('age')ctype_digit($age)のはず
foreach ($hpbby as $value) {foreach ($hobby as $value) {のはず
if(!flook($fp,LOCK_EX)){if(!flock($fp,LOCK_EX)){
fcloseのまえにflock($fp, LOCK_UN);を一応入れる
エディタ上で見た目上同じだったので分かりづらかったけど"¥n""\n"(文字コードが違う)
PHP処理終了後の

html

1<dl class="clearfix"></dl> 2<p class="app_msg">以下の内容を保存しました!</p> 3<p class="app_msg"><a href="qustion3.php">集計結果を見る</a></p> 4</div>

は不要(php処理で出してるため)

※アンケート集計処理部分はなんにも見てないし書き込まれるまでしか見てないしそこはせめてやって。

qustion2.php

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="utf-8"> 5<meta name="description" content="アンケート結果を送信しました"> 6<title>アンケート結果を受け付けました!!!</title> 7</head> 8<body> 9<div id="box"> 10<div id="header"> 11<h1>PHP for web Designer</h1> 12</div> 13<ul id="menu" class="clearfix"></ul> 14 15<div id="main"> 16<h2>アンケートフォーム</h2> 17 18<?php 19 $error = 0; 20 if (isset($_POST['gender'])) { 21 $gender = $_POST['gender']; 22 23 if (ctype_digit($gender)) { 24 if($gender == 1){ 25 $gendername = '男性'; 26 } elseif ($gender == 2) { 27 $gendername = '女性'; 28 } else { 29 $error = 1; 30 } 31 } else{ 32 $error = 1; 33 } 34 } else { 35 $error = 1; 36 } 37 38 if (isset($_POST['age'])) { 39 $age = $_POST['age']; 40 41 if(ctype_digit($age)) { 42 if($age < 1 || $age > 5) { 43 $error = 1; 44 } 45 } else { 46 $error = 1; 47 } 48 } else { 49 $error = 1; 50 } 51 if (isset($_POST['hobby'])) { 52 $hobby = $_POST['hobby']; 53 54 if(is_array($hobby)){ 55 foreach ($hobby as $value) { 56 if($value < 1|| $value >5){ 57 $error = 1; 58 } 59 } 60 } else { 61 $error = 1; 62 } 63 } else{ 64 $error = 1; 65 } 66 67 if ($error == 0) { 68 echo '<dl class="clearfix">'; 69 echo '<dt>性別は?</dt><dd>' . $gendername . '</dd>'; 70 71 if($age != 5) { 72 echo '<dt>年齢は?</dt><dd>' . $age . '0代</dd>'; 73 }else{ 74 echo '<dt>年齢は?</dt><dd>50代以上</dd>'; 75 } 76 77 echo '<dt>趣味は?</dt>'; 78 echo '<dd>'; 79 foreach ($hobby as $value) { 80 switch ($value) { 81 case 1: 82 echo '音楽鑑賞<br />'; 83 break; 84 85 case 2: 86 echo '映画鑑賞<br />'; 87 break; 88 89 case 3: 90 echo 'ドライブ<br />'; 91 break; 92 93 case 4: 94 echo '旅行<br />'; 95 break; 96 97 case 5: 98 echo 'その他<br />'; 99 break; 100 } 101 } 102 103 echo '</dd>'; 104 105 $textfile = 'log.txt'; 106 $fp = fopen($textfile, 'r+b'); 107 if(!$fp) { 108 exit('ファイルがないか異常があります'); 109 } 110 if(!flock($fp,LOCK_EX)){ 111 exit('ファイルをロックできませんでした'); 112 } 113 while(!feof($fp)){ 114 $writebuffer[] = trim(fgets($fp)); 115 } 116 117 if($gender == 1) $writebuffer[0]++; 118 if($gender == 2) $writebuffer[1]++; 119 120 $writebuffer[$age + 1]++; 121 122 foreach ($hobby as $key => $value) { 123 $writebuffer[$key + 6]++; 124 } 125 126 $writebuffer[12]++; 127 128 rewind($fp); 129 foreach ($writebuffer as $value) { 130 fwrite($fp, $value . "\n"); 131 } 132 133 flock($fp, LOCK_UN); 134 fclose($fp); 135 136 echo '</dl>'; 137 echo '<p class="app_msg">以上の内容を保存しました!</p>'; 138 echo '<p class="app_msg"><a href="question3.php">集計結果を見る</a></p>'; 139 }else{ 140 echo '<p class="app_msg">'; 141 echo '戻ってアンケートの項目全てにお答えください。'; 142 echo '</p>'; 143 } 144?> 145 146<p class="copy"> 147&copy; 2010 PHP for web designer. ALL rights reserved. 148</p> 149</div> 150</body> 151</html>

投稿2019/02/06 15:55

編集2019/02/11 01:59
rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Cherry1217

2019/02/07 13:15

回答ありがとうございます。 回答で頂いたPHPを追加してみたのですが、’正常終了時のHTML出力’の文言が 追加されるだけでした。
Cherry1217

2019/02/11 07:28

ありがとうございます。 無事解決できました。 もう一つ質問?というか、テクニックについてなんですが、上記のようなタイプミスというのは、 どうやって見つけているのでしょうか。 何回も見直しているのですが、全く気付きません。 効率的な'構文チェック'や'タイプチェック'などの方法はないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問