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

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

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

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

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

6502閲覧

アンケートフォームの回答内容をcsvで出力する部分でつまづいています

MH00214

総合スコア53

CSV

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

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2016/01/04 03:56

編集2016/01/04 04:01

PHP初心者です。

いま練習としてPHPでアンケートフォームを作っています。

アンケート項目を入力して、それを表示することは出来たのですが、アンケート項目をcsvファイルに出力するところでつまずいています。

返ってくるエラーは
Array to string conversion in /Applications/XAMPP/xamppfiles/htdocs/php1226/confirm_enq.php on line 80
(line 80というのはfputcsv($handle,$vararray);を指しています。

要するに、配列を文字列に変換できていない(なので読み込めません)ということなのだと思ったのですが、それを文字列に変換し、なおかつ複数選択できるチェックボックスのvalueの値をcsvでカンマ区切りにする(例:スポーツ観戦,カフェ巡り)ようにするためにはどうしたらよいのでしょうか?

初心者なので、ネットで色々調べてもよくわからず…。

csvファイルへの書き出し状況

下記、ソースコードになります。
※次のページでセッションを利用して表示をしたいので、$_POST['name']の部分は$_SESSION['name'] = $_POST['name'];として変数を使っています。

<?php session_start(); //変数設定 if(isset($_POST['my_id'])){ $_SESSION['my_id'] = $_POST['my_id']; } if(isset($_POST['number'])){ $_SESSION['number'] = $_POST['number']; } if(isset($_POST['mail'])){ $_SESSION['mail'] = $_POST['mail']; } if(isset($_POST['gender'])){ $_SESSION['gender'] = $_POST['gender']; } if(isset($_POST['hobby'])){ $_SESSION['hobby'] = $_POST['hobby']; } if(isset($_POST['lastyear'])){ $_SESSION['lastyear'] = $_POST['lastyear']; } if(isset($_POST['thisyear'])){ $_SESSION['thisyear'] = $_POST['thisyear']; } //POST→SESSIONとなった情報を取得 $myid = $_SESSION['my_id']; $number = $_SESSION['number']; $mail = $_SESSION['mail']; $gender = $_SESSION['gender']; if(empty($_SESSION['hobby'])){ $csvhobby = 'なし'; }else{ $csvhobby = $_SESSION['hobby']; } $lastyear = $_SESSION['lastyear']; $thisyear = $_SESSION['thisyear']; //csvファイルにして書き込む $title = ['名前','出席番号','メールアドレス','性別','趣味','去年の一番の思い出','今年の抱負']; $vararray = [$myid,$number,$mail,$gender,$csvhobby,$lastyear,$thisyear]; //文字列をUTF-8から変換 mb_convert_variables('SJIS-win', 'UTF-8', $title); mb_convert_variables('SJIS-win', 'UTF-8', $vararray); //ファイルへ書き込み実行 $handle = fopen('data/data.csv','a'); flock($handle,LOCK_EX); fputcsv($handle,$title); fputcsv($handle,$vararray); //↑ここでエラー flock($handle,LOCK_UN); fclose($handle); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>アンケート内容確認ページ</title> <link rel="stylesheet" href="./css/style.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> </head> <body> <div class="confirm_message"> <p>内容はこれで良いですか?</p> </div> <div class="enq_answer"> <!-- 名前 --> <p class="ans-one"><?php echo htmlspecialchars($_SESSION['my_id']);?></p> <!-- 出席番号 --> <p class="ans-two"><?php echo htmlspecialchars($_SESSION['number']);?></p> <!-- メールアドレス --> <p class="ans-three"><?php echo htmlspecialchars($_SESSION['mail']);?></p> <!-- 性別 --> <p class="ans-four"><?php echo htmlspecialchars($_SESSION['gender']);?></p> <!-- 趣味 --> <p class="ans-five"><?php foreach ($_SESSION['hobby'] as $hobby) { echo htmlspecialchars($hobby,ENT_QUOTES).'<br>'; }?></p> <!-- 去年の思い出 --> <p class="ans-six"><?php echo htmlspecialchars($_SESSION['lastyear']);?></p> <!-- 今年の抱負 --> <p class="ans-seven"><?php echo htmlspecialchars($_SESSION['thisyear']);?></p> </div>
<p><a href="input_finish.php">アンケートを送信する</a></p>
</body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

fputcsvに渡す配列の要素に配列が混じっているときのエラーです。$csvhobby = $_SESSION['hobby']; のところで、$_SESSION['hobby']は配列なのにそのまま入れているのが原因です。適当な文字列に変換してあげる必要があります。

確認画面でやってるようにforeachを使ってもいいし、implode関数を使うなどしても良いでしょう。例えばカンマ区切りならこんな感じ。

PHP

1$csvhobby = implode(',', $_SESSION['hobby']);

投稿2016/01/04 06:08

crhg

総合スコア1175

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

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

MH00214

2016/01/04 07:28

早速のご指摘ありがとうございます! 無事に問題なく動きました! 次はcsvの読み込みにもチャレンジしてみます。助かりました〜!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問