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

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

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

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

Q&A

2回答

861閲覧

PHP上のアンケートフォームで受け取った内容を保存

kazu0239

総合スコア0

PHP

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

0グッド

0クリップ

投稿2022/01/18 01:05

PHP上のアンケートフォームで受け取った内容を保存したい
現在PHPでアンケートを作成しており、後からデータを閲覧、管理できるようにファイル等に保存する機能保存ボタンを搭載しようと思っています。
そこでどのように何をしたらよいのかわかりません。よければコード付きで分かりやすく教えていただきたいです。
・独学&初学者なので知識等が乏しいです。申し訳ありません。
・アンケート入力ページと、その入力内容をチェックさせる確認ページは作成済みです。
・保存ボタンは確認ページに設置したいです。

コード<?php //文字コードの設定(文字化けを起こす場合に記述する) header("Content-Type: text/html; charset=UTF-8"); //フォームデータが空の場合は強制終了 if(empty($_POST)){ echo "処理終了"; exit; } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>HealthRecord</title> <link rel="stylesheet" href="style.css"> </head> <body> <h1><left>確認画面</left></h1> <p>※この内容でよろしいですか?</p> <?php $date=htmlspecialchars($_POST["date"],ENT_QUOTES,"UTF-8"); if(empty($date)){ echo "日付を入力してください。"; exit; } $bodytemperrature=htmlspecialchars($_POST["bodytemperrature"],ENT_QUOTES,"UTF-8"); if(empty($bodytemperrature)){ echo "体温を入力してください。"; exit; } $timesofday=htmlspecialchars($_POST["timesofday"],ENT_QUOTES,"UTF-8"); if(empty($timesofday)){ echo "測定時刻を入力してください。"; exit; } $condition=htmlspecialchars($_POST["condition"],ENT_QUOTES,"UTF-8"); if(empty($condition)){ echo "体調を選択してください。"; exit; } $symptoms=htmlspecialchars($_POST["symptoms"],ENT_QUOTES,"UTF-8"); if(empty($symptoms)){ echo "症状を選択してください。"; exit; } $others=htmlspecialchars($_POST["others"],ENT_QUOTES,"UTF-8"); if(empty($others)){ echo "その他の症状がある場合は記入し、ない場合はなしと記入してください"; exit; } ?> <!-- アンケート回答の確認表示 --> <form method="post" action="submit.php"> <table> <tr> <th>日付</th> <td><?php echo $date; ?></td> </tr> <tr> <th>体温</th> <td><?php echo $bodytemperrature; ?></td>     </tr>      <th>測定時刻</th>      <td><?php echo $timesofday; ?></td>     </tr> <tr> <th>体調</th> <td><?php echo $condition;?></td> </tr> <th>症状</th> <td><?php echo $symptoms;?></td> </tr> <th>その他</th> <td><?php echo $others;?></td> </tr> <tr> <td colspan="3"> <input type="button" onclick="history.back()" value="前に戻る" ></td> </tr> <tr> <td colspan="3"><input type="submit" value="回答を保存する"></td> </tr> </table> <!-- hiddenフィールド --> <input type="hidden" name="date" value="<?php echo $date; ?>"> <input type="hidden" name="bodytemperrature" value="<?php echo $bodytemperrature; ?>"> <input type="hidden" name="timesofday" value="<?php echo $timesofday; ?>"> <input type="hidden" name="condition" value="<?php echo $condition; ?>"> <input type="hidden" name="symptoms" value="<?php echo $symptoms; ?>"> <input type="hidden" name="others" value="<?php echo $others; ?>"> </form> </body> </html>

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

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

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

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

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

itagagaki

2022/01/18 01:24

そのデータをデータベースで管理するのか、それともただのテキストファイルとしてサーバー内のどこかに保管して読み書きするのか、その場合、そのファイルの中身はどういうフォーマットにするか、まずはそのあたりから考えていく必要があると思います。
AbeTakashi

2022/01/18 01:59

「PHP アンケートフォーム 作り方」などで検索してみてください。色々なページがでてきますよ。 参考) https://www.webdesignleaves.com/pr/php/php_basic_06.php このページもテキストファイルに保存する方法が書かれています。itagakiさんも指摘されていますが、テキストファイルへの保存以外の方法もありますので、それをやりたいのであれば自分で検索ワードを変えて調べてください。 色々やってみてエラーが出るから教えてほしいとかなら回答する側もお伝えできることもあると思うのですが、この質問のように一からすべてとなるとさすがに回答する方も難しいです(teratailでは推奨されていない「やってほしいことを丸投げ」のようにも見えます)。まずは頑張って色々調べてみて、できるところまでやってみるのがいいと思いますよ。
guest

回答2

0

流れはざっくり以下です

  • ファイルの送信はget/postで行う
  • 受け取ったデータをバリデートし不正な場合は再入力を促す
  • データが揃ったらセッションに入れて登録ページに移動
  • 登録ページでファイルI/O処理、(開いて、ロックして、書いて、閉じて、ロック解除)
  • 登録が完了したらセッションを破棄して完了ページに移動

どの部分がわからないか切り分けて詰まった箇所を追加で質問してください

投稿2022/01/18 04:54

yambejp

総合スコア114843

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

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

0

目先のやりたいことに対するアドバイスではないことを、先に宣言しておきます。

phpプログラミングを学習したいのだと思いますが、
学習したあとどういう方向性に進もうとしているのかが気になるところです。
職業的に(本格的に)webシステムを作るのか、ただの趣味止まりなのか、それとも。

phpだけ覚えても、実は大したことはできません。
質問者さんが感づいたように、データを保存したり加工したりするためにデータベースを扱えるようにならないといけないです。
(余談ですが、CSVファイルなどに保存する方法もありますが、排他ロックとか面倒な割に実用的ではないです。また、SQLiteってのもありますがこれも特殊なので、汎用性と応用性を踏まえてリレーショナルデータベース一択だと主張しておきます。)
また、phpはあくまでサーバー側で動く言語ですので、webブラウザ上での出来事には介入できません。
webブラウザ上で簡単な入力チェックをしたり入力支援を設けるためには、javascriptを扱えるようにならないといけないです。
今、短期的にはphpだけでもいいかもしれませんが、データベースとjavascriptの学習も並行して進めることを強くおすすめします。

プログラミング自体も慣れていないのであれば、一度書籍など基本的な事柄が一通り備わった教材を定めて、
それに基づいて学習を進めるのが良いのではないかと思います。
ネットでいくらでも書評は見つけられると思いますし、私も最近は本を買って読んでいないこともあるので、
「おすすめの本」についての言及は避けます。
少なくともPHPのバージョンは7.4以降をターゲットにしたものを選んでください。
まだ8.1用の書籍はないと思うので、最新情報は別途調べるようにしましょう。

さて、掲載されたコードについていくつか気づいた点を申し述べます。

1)

php

1header("Content-Type: text/html; charset=UTF-8"); 2

これ必要でしょうか。何か古い書籍の情報を受け売りで記述しているのかもしれませんが、
たぶん無くても全然平気だと思います。
(webブラウザがSJISなどに固定されているなどややこしい状況でもない限り不要なはず。)

2)

php

1$date=htmlspecialchars($_POST["date"],ENT_QUOTES,"UTF-8");

他のフォーム入力項目にも言えますが、
フォーム送信データを変数で保持するときは、htmlspecialchars()で加工せず生なまま保持します。
データベースを扱うようになると、htmlspecialchars()で加工した文字列を相手に検索すると面倒です。
html出力する直前に出力のみに使うのが良いです。
参考:PHP で h() を書くなら一緒に echo しよう。 - こせきの技術日記

3)
日付の入力、測定時刻の入力をさせていますが、
どういう形式でユーザーに入力させようとしているのか、
入力のしやすさと入力データの検証(正しく入力されたか)のしやすさを考慮すると良いでしょう。
入力欄のそばに、「日付は月日を4桁の数字で入力してください(例:2022年1月18日→0118)」などと表示しておき、
フォーム入力されたデータでその形式に合っていなければエラーメッセージを出力して弾きます。
ここで、javascriptのライブラリを使って、日付入力をカレンダー上をクリックすることで実現させることもできたりします。
測定時刻も同様です。

投稿2022/01/18 02:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問