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

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

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

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

2366閲覧

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

nmd091006

総合スコア1

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/03/31 14:24

編集2021/03/31 14:30

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

現在PHPでアンケートを作成しており、回答内容をfopen()などを利用して、後からデータを閲覧、管理できるようにファイル等に保存する機能保存ボタンを搭載しようと思っています。

  • 独学&初学者なので知識等が乏しいです。申し訳ありません。
  • アンケート入力ページと、その入力内容をチェックさせる確認ページは作成済みです。
  • 保存ボタン確認ページに設置したいです。
  • 下記の@@発生している問題・書き方のわからないコード@@に質問の要点を記載しております。

確認ページのソースコード

php

1//ここまで省略 2<div class="results"> 3<h4>名前:<?php echo $_POST['userName'] ?></h4> //回答者の名前 4 <h5 id="h5-name"><?php 5 if(empty($_POST['userName'])){ 6 echo "お名前が未入力です。<input type='button' value='戻る' onClick='history.back()'>"; 7 }  8 ?></h5> //未記入を通知、戻るボタン表示 9 <?php foreach ($ques as $que): ?> //質問1〜質問20まで質問文と回答をセットで表示させる 10 <div class="qblock"> 11 <h3><?php echo $que -> getName(); ?></h3> //質問文を表示 12 <p><?php echo implode("、", $_POST[$que -> getName()]) ?></p> //回答内容を配列として表示 13 <h5><?php 14 if(empty(implode($_POST[$que -> getName()]))){ 15 echo "未入力です。<input type='button' value='戻る' onClick='history.back()'>"; 16 } 17 ?></h5> //未記入を通知、戻るボタン表示 18     </div></div> 19<input type="button" value="回答を保存する" onClick=<?php 20 $rtext = "保存したい内容"//ここがわからない 21 $fp = fopen("保存先", "w"); //保存先ファイルを開く //ここもわからない 22 fwrite($fp, $rtext) //ファイルに回答内容を保存 23 fclose($fp); //ファイルを閉じる 24 ?>> 25//以下省略 26

###保存したいテキストの例
(確認ページに表示される"質問"と対応する"回答"のセット)

名前:山田 太郎 【1】スポーツはしていますか? YES 【2】以下の中から好きなスポーツを選んでください(複数選択可能) 野球、サッカー、テニス、バスケ、 【3】好きなスポーツ選手は誰ですか? イチロー //中略/// 【20】悩みはありますか?(複数選択可能) 健康、ダイエット、恋愛、その他、将来への不安、

@@発生している問題・書き方のわからないコード@@

・保存先のファイル名を"$_POST['userName'].txt"(このコードは適当なので恐らく間違っています)のようなイメージで"誰の回答か"を見やすくした個別のファイルをアンケート毎に自動で新規作成したい ・(名前+[質問文1 & 回答1] + [質問文2 & 回答2] +…[20])≒(<div class="results">の中身)をまとめて"保存したい内容"に指定したい(保存したい) ・また、保存先ファイルはどこに作成すれば良いでしょうか?(サーバー上でのデータ管理方法)

試したこと

html2canvas を使用して.png画像として保存しようとしたが、画像が"壊れている"や"フォーマットが違う"等のエラーが出た。 どちらにせよ画像だと管理や活用の幅も狭くなるので却下。
MySQLも触ってみましたが初心者の私にはまだ難しそうなので回避。

補足情報(FW/ツールのバージョンなど)

あまり関係ないかもしれませんが以下の条件で作成しております
0. アンケートの回答方法はradio/checkbox/select/textなど様々
0. ユーザー数は数人程度
0. 一人ずつ回答してもらうためセキュリティ等はとりあえず考慮しない
0. 現在はMANPで開発していますが、完成したらXFREEなどのレンタルサーバーで使用する予定
0. 使用言語はHTMLCSSPHPJavaScriptです。

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

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

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

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

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

guest

回答3

0

いろいろと良くない書き方ですが、一番のツッコミどころを言いますと…

PHP

1//ここまで省略 2 3<input type="button" value="回答を保存する" onClick=<?php 4 $rtext = "保存したい内容"//ここがわからない 5 $fp = fopen("保存先", "w"); //保存先ファイルを開く //ここもわからない 6 fwrite($fp, $rtext) //ファイルに回答内容を保存 7 fclose($fp); //ファイルを閉じる 8 ?>> 9//以下省略

onClickはあくまでJavaScriptによるイベントメソッドで、クライアントサイドで処理されるものです(PHPはサーバサイドで処理されます)。どこのソースを見たらこんな書き方になるのか疑問視させられるレベルの過ちです。

普通は

<input type="submit" name="mode" value="回答">

などといったサーバ転送用のフォームボタンを作って、そのプログラム内で処理して、その結果を返します。

あと、htmlソース上にやたらとPHPプログラムを書いたりしますが、それもやめた方がいいでしょう。あくまでhtmlは結果を返すだけの場所にしておきましょう。

とにかく、まずは普通にフォーム転送の基本となる処理を見直した方がいいです。

投稿2021/04/01 00:48

FKM

総合スコア3635

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

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

nmd091006

2021/04/01 09:27

ファイルへの保存方法を模索している中でJavaScriptを使用する方法を試していたものが残ったままおかしな混ざり方をしていました。 意外と気づかないもので...ご指摘ありがとうございます!
nmd091006

2021/04/01 09:35

他の方のご指摘と合わせて、 思い通りに作動するように解決しました!本当にありがとうございました!
guest

0

個人的には、保存ボタンは入力ページにある方がいい気もしますが…

確認ページで実装すること。

  1. $_POST を serialize() で保存可能な形式にする
  2. 上記をてきとうな input hidden なりセッション変数なりに設定する
  3. 保存ボタンが押されたら、上記内容を file_put_contents() で書き込む

ちなみにもどす場合は

  1. file_get_contents() で読み込む
  2. 上記を unserialize() で配列にもどす
  3. 上記を元に処理を実施

こんなかんじでしょか。

投稿2021/03/31 18:44

takasima20

総合スコア7458

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

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

nmd091006

2021/04/01 09:33

input hidden のアイデアはありませんでした! input hiddenを使用して保存内容を設定できました!ありがとうございました!
nmd091006

2021/04/01 09:35

他の方のご指摘と合わせて、 思い通りに作動するように解決しました!本当にありがとうございました!
guest

0

ベストアンサー

保存先のファイル名ですが、

php

1$filename = $_POST['userName'] . '.txt'; 2 3$fp = fopen($filename, 'w'); 4

という感じで、ファイル名を別変数にすれば、ファイル名を作成できると思います。

ファイルの保存先は、この.phpのファイル場所から相対パスの場所になると思います。

fopenやfwrite,fcloseの方はほぼあっていると思いました!

完璧な回答でなくすいません。

試しに作ってみたコードを書いておきます。

php

1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html lang="ja"> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> 5<title>アンケート</title> 6</head> 7<body> 8<form method="post" action="enquete2.php"> 9 10ユーザー名を書いてください<br> 11<?php 12print "<input type='text' name='username' size='50' maxlength='100'/><br>\n"; 13?> 14 15アンケートの回答を書いてください<br><br> 16<?php 17print "<input type='text' name='textbox' size='50' maxlength='100'/><br>\n"; 18?> 19<br> 20<input type="submit" name="submit" value="保存する"> 21</form> 22 23<?php 24if ($_POST['username']) { 25 print $_POST['username']; 26 27 $filename = $_POST['username'] . '.txt'; 28 if ($_POST['textbox']) { 29 $fp = fopen($filename, 'w'); 30 fwrite($fp, $_POST['textbox']); 31 fclose($fp); 32 } 33 34} 35 36?> 37</body> 38</html> 39

投稿2021/03/31 15:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nmd091006

2021/04/01 09:32

ファイル名の設定うまくできました! また、コード例も参考になりました!ありがとうございます!
nmd091006

2021/04/01 09:35

他の方のご指摘と合わせて、 思い通りに作動するように解決しました!本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問