プロが教えるわが家の防犯対策術!

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>

A 回答 (3件)

ああ、たぶん、マニュアルに書いてあるサンプルソースを見て、勘違いしちゃったんですね。

(あのサンプルは紛らわしいね)
  foreach($array as $list){
    fputcsv($file, split(',',$list));
  }
を、単純に
  fputcsv($file, $array);
としてみてください。
fputcsvの出力データは、一行分をまとめて配列で渡してあげればOKです。
既に、一行分がまとめて配列に入っているようですので、foreachやsplitはいりません。
    • good
    • 0
この回答へのお礼

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

どうもありがとうございました。

お礼日時:2008/10/21 12:43

> fputcsv($file, split(',',$list));


$list には、項目値を「,」区切りで、一行分の全データを格納している前提のようですけど。
その前提に沿ったデータを入れてやればいいのでは。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/10/21 12:39

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

    • good
    • 0
この回答へのお礼

ありがとうございます。
その後自分でもコードをいじってみまして、

$addlist = sprintf("%s,%s,\"%s\"", $name , $phone , $add);
$file = fopen($file_name, "a+") or die("OPENエラー $file_name");
fputs($file, $addlist ."\n");

という形で解決しました。
どうもありがとうございます。

お礼日時:2008/10/21 12:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!