• ベストアンサー

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>

質問者が選んだベストアンサー

  • ベストアンサー
  • sgcarrot
  • ベストアンサー率68% (17/25)
回答No.3

ああ、たぶん、マニュアルに書いてあるサンプルソースを見て、勘違いしちゃったんですね。(あのサンプルは紛らわしいね)   foreach($array as $list){     fputcsv($file, split(',',$list));   } を、単純に   fputcsv($file, $array); としてみてください。 fputcsvの出力データは、一行分をまとめて配列で渡してあげればOKです。 既に、一行分がまとめて配列に入っているようですので、foreachやsplitはいりません。

Abdiel
質問者

お礼

まさにマニュアルのサンプル通りに打ち込んで引っかかってしまいました。 おっしゃる通りに修正したところ、無事入力することができました。 今後の為にきちんと覚えておこうと思います。 どうもありがとうございました。

その他の回答 (2)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

> fputcsv($file, split(',',$list)); $list には、項目値を「,」区切りで、一行分の全データを格納している前提のようですけど。 その前提に沿ったデータを入れてやればいいのでは。

Abdiel
質問者

お礼

ありがとうございます。 無事解決いたしました。

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

fputcsvは実行のたびに改行するので、変数等に格納してから出力しましょう。

Abdiel
質問者

お礼

ありがとうございます。 その後自分でもコードをいじってみまして、 $addlist = sprintf("%s,%s,\"%s\"", $name , $phone , $add); $file = fopen($file_name, "a+") or die("OPENエラー $file_name"); fputs($file, $addlist ."\n"); という形で解決しました。 どうもありがとうございます。

関連するQ&A