- ベストアンサー
fputcsv()で1レコード1行になるように書き込みたい
PHPでメールフォームを作成しており、ログをCSVファイルで取ろうと考えています。 下記のようなコードで作成してみたのですが、送信すると [1行目]あああ [2行目]いいい [3行目]ううう という感じで改行して記録されてしまいます。 これを、 [1行目]あああ,いいい,ううう [2行目]かかか,ききき,くくく という形で、1レコード1行になるように記録できないでしょうか。 どうぞよろしくお願いします。 ---以下コード--- <?php //フォームの値を取得 if ($_SERVER["REQUEST_METHOD"] == "POST"){ foreach ($_POST as $k => $v){ //「magic_quotes_gpc=On」のときはエスケープ解除 if (get_magic_quotes_gpc()){ $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } //言語コード指定 mb_language('Japanese'); mb_internal_encoding("SJIS"); //保存ファイル $file_name = "file.csv"; //配列を作成 $array = array($name , $phone , $add); //ファイルを開く $file = fopen($file_name, "a+") or die("OPENエラー $file_name"); //書き込み if (is_array($array)){ foreach($array as $list){ fputcsv($file, split(',',$list)); } } else { echo "<p>書き込みエラー</p>"; } //ファイルを閉じる fclose($file); ?> <form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post"> <fieldset><legend>フォーム</legend> 名前:<input name="name" id="name" type="text" size="40" value="" /><br /> 電話:<input name="phone" id="phone" type="text" size="40" value="" /><br /> 住所:<textarea name="add" id="add" cols="40" rows="2"></textarea><br /> <input name="submit" type="submit" value="送信" /> </fieldset> </form>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ああ、たぶん、マニュアルに書いてあるサンプルソースを見て、勘違いしちゃったんですね。(あのサンプルは紛らわしいね) foreach($array as $list){ fputcsv($file, split(',',$list)); } を、単純に fputcsv($file, $array); としてみてください。 fputcsvの出力データは、一行分をまとめて配列で渡してあげればOKです。 既に、一行分がまとめて配列に入っているようですので、foreachやsplitはいりません。
その他の回答 (2)
- hrm_mmm
- ベストアンサー率63% (292/459)
> fputcsv($file, split(',',$list)); $list には、項目値を「,」区切りで、一行分の全データを格納している前提のようですけど。 その前提に沿ったデータを入れてやればいいのでは。
お礼
ありがとうございます。 無事解決いたしました。
- memphis
- ベストアンサー率40% (975/2395)
fputcsvは実行のたびに改行するので、変数等に格納してから出力しましょう。
お礼
ありがとうございます。 その後自分でもコードをいじってみまして、 $addlist = sprintf("%s,%s,\"%s\"", $name , $phone , $add); $file = fopen($file_name, "a+") or die("OPENエラー $file_name"); fputs($file, $addlist ."\n"); という形で解決しました。 どうもありがとうございます。
お礼
まさにマニュアルのサンプル通りに打ち込んで引っかかってしまいました。 おっしゃる通りに修正したところ、無事入力することができました。 今後の為にきちんと覚えておこうと思います。 どうもありがとうございました。