0

関数を使用して、フォーム送信値を.csvファイルに処理しようとしていfputcsvます。エラーが発生せず、フォームの値がdata.csvファイルに保存されていません。誰かが私が間違っていることに関して問題を見ることができますか?

<label for="location">How many Locations?</label> 
<input id="location" name="loc" /><br />

<select id="when" name="day">
    <option value="Sunday">Sunday</option>
    <option value="Monday">Monday</option>
    <option value="Tuesday">Tuesday</option>
    <option value="Wednesday">Wednesday</option>
    <option value="Thursday">Thursday</option>
    <option value="Friday">Friday</option>
    <option value="Saturday">Saturday</option>
</select>
<input type="checkbox" id="osecom" name="osecom" value="Yes" /> 
<label for="osecom">Online</label>

<input type="checkbox" id="item1yes" name="item1yes" value="Yes" /> Yes
<input type="checkbox" id="item1no" name="item1no" value="No" /> No<br />
<label for="chkitem1">mobile</label> 

<input type="checkbox" id="item2yes" name="item2yes" value="Yes" /> Yes
<input type="checkbox" id="item2no" name="item2no" value="No" /> No<br />
<label for="chkitem2">policy? </label> 

<input type="submit" title="Submit Form" value="" />

phpコード

if(isset($_POST['submit'])) {

    $data = implode(',', $_POST);
    if( $fp = fopen('data.csv', 'a') ){
        fputcsv($fp, $data);
    }
    fclose($fp);        

}
4

1 に答える 1

2

implode('、'、$ _POST)は使用しないでください。

$ _POSTは配列であり、fputcsv()は、2番目のパラメーターが文字列ではなく配列であることを期待しています。

このコードを使用することをお勧めします。

if(isset($_POST['submit'])) {
    $data = array_values($_POST); // get only values
    if( $fp = fopen('data.csv', 'a') ){
        fputcsv($fp, $data);
    }
    fclose($fp);
}

値のみを保存すると、$ _ POSTスイッチのパラメーターが配置されている場合にcsvの読み取りに問題が発生するため、最初の行をヘッダー付きで保存することをお勧めします。

if(isset($_POST['submit'])) {
    $data = array_values($_POST); // get only values
    $headers = array_keys($_POST); // keys are headers 
    if( $fp = fopen('data.csv', 'a') ){
        fputcsv($fp, $headers);
        fputcsv($fp, $data);
    }
    fclose($fp);
}

編集:フォームで、フィールド「モバイル」のようにラジオボタンがより適切に収まるチェックボックスを使用していることに気付きました。と「ポリシー?」

于 2012-08-17T20:22:08.913 に答える