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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

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

Q&A

解決済

2回答

2607閲覧

PHPでCSVに記録できない

退会済みユーザー

退会済みユーザー

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

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

0グッド

0クリップ

投稿2016/08/26 07:08

編集2016/08/26 07:25

###前提・実現したいこと
PHPの勉強のため,アンケートを作っています.

アンケートの結果をCSVに保存→集計→表示

ということを考えていますが,まず,csvに保存する段階で躓いています.

question.htmlにアンケートがあり,それをconfirm_enq.phpでgetして,data.csvに保存しようとしていますが,data.csvに記録されません.どの段階に問題があるのでしょうか?

###question.html

HTML

1<html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title>アンケート</title> 5 </head> 6 <body> 7 <form action="confirm_enq.php" method="get"> 8 <p>名前: <input type="text" name="name" /></p> 9 10 <p>年齢: <input type="text" name="age"></p> 11 <p>性別: 12 男<input type="radio" name="gender" value="男"> 13 女<input type="radio" name="gender" value="女"> 14 </p> 15 <input type="submit" /> 16 </form> 17 </body> 18 </html> 19

###該当のソースコード

HTML

1<html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title>アンケート記録</title> 5 </head> 6 7 <?php 8 $name=htmlspecialchars($_GET["name"],ENT_QUOTES); 9 $age=htmlspecialchars($_GET['age'],ENT_QUOTES); 10 $gender=htmlspecialchars($_GET['gender'],ENT_QUOTES); 11 12 $array = array($name,$age,$gender); 13 $handle=fopen('data.csv','a'); 14 flock($handle,LOCK_EX); 15 fputcsv($handle, $array); 16 flock($handle,LOCK_UN); 17 fclose($handle); 18 ?> 19 20 <body> 21記録しました 22</body> 23</html>

###起きていること
正常に終了するが、data.csvの中身が空

という状態です.すでにサーバー上にはアップしてありますが,question.htmlに回答を入力し,送信ボタンを押すとconfirm_enq.phpの画面には正常に遷移します(confirm_enq.phpのbodyに書いてある「記録しました」は表示されます)しかし,csvを覗いてみると何も書かれていません.

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

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

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

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

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

kunai

2016/08/26 07:12

コードはコードブロックで囲ってください。 また、「記録されない」と言うのがどういう状況か教えてください。 1.エラーが発生する→エラーメッセージの提示をお願いします。 2.正常に終了するが、data.csvが見つからない 3.正常に終了するが、data.csvの中身が空 4.正常に終了するが、data.csvの中身が更新されない などなど
退会済みユーザー

退会済みユーザー

2016/08/26 07:29

ご指摘ありがとうございました.修正追記させていただきました.
kunai

2016/08/26 07:32

csvファイルの更新日時は更新されていますか? csvファイルを一度削除してから実行した場合、ファイルは作成されますか?
退会済みユーザー

退会済みユーザー

2016/08/26 07:33

そもそも、CSVへの書き込みをどこで行っていると認識されていますか?confirm_enq.phpの中身を提示していないところを見ると、その認識があるのかどうかから確認する必要があるように見受けられます。
kunai

2016/08/26 07:38

いや、2つ目のソースコードが、confirm_enq.phpだと思いますよ。 コードには問題ないと思いますので、恐らくdata.csvを見ている場所が違うだけじゃないかと思っているところです。
退会済みユーザー

退会済みユーザー

2016/08/26 08:07

左様でございます.data.csvを削除してみると新たに生成されませんでした.data.csvを見ている場所が違う,とはどういうことでしょうか?
guest

回答2

0

confirm_enq.php の部分を以下のようにいじって、書き込まれたファイルの場所を確認してください。
おそらくですが、実際に書き込んでいるファイルと、確認しているファイルの場所が異なっているかもしれません。

htmlspecialchars は不要かとおもいます。
echo する時に使うものなので。

php

1 $name = filter_input(INPUT_GET, 'name'); 2 $age = filter_input(INPUT_GET, 'age'); 3 $gender = filter_input(INPUT_GET, 'gender'); 4 5 $csv = 'data.csv'; 6 7 $array = array($name, $age, $gender); 8 $handle = fopen($csv, 'a'); 9 flock($handle, LOCK_EX); 10 fputcsv($handle, $array); 11 flock($handle, LOCK_UN); 12 fclose($handle); 13 14 // ここで実際に書き込まれたファイルパスを確認 15 if (file_exists($csv)) { 16 echo realpath($csv); 17 }

投稿2016/08/26 08:33

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

サーバーサイドの設定ミスが発見されました.お手数をお掛けしてしまい大変申し訳ございませんでした.

投稿2016/08/26 08:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yodel

2016/08/26 09:16

どのような設定ミスだったのか、よろしければ教えて下さい。
退会済みユーザー

退会済みユーザー

2016/08/26 09:23

以前使用していた環境と大きく異なっており,PHPが動作しないサーバーだったようです.現在,xampp環境下で練習しています.
yodel

2016/08/26 09:26

お返事ありがとうございます。 PHPが動作していないかったということで納得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問