0

日付範囲 (#StartDate - #EndDate または #AllDates) を選択できるフォームがあり、データを .csv ファイルに書き込み、強制的にダウンロードします。なんらかの理由で、#StartDate と #EndDate の値を渡すことができません。それらは glDatePicker フィールドによって生成されますが、ハードコードされた値を入力しても渡されません。$('#StartDate').val(); を実行します。コンソールで日付を返しますが、コメントを外すと

var_dump($_POST);

空の配列を返します。バックエンドスクリプトは以下を使用しています:

`FuncitionNameHere(trim($_POST["AllDates"]), trim($_POST["StartDate"]), trim($_POST["EndDate"]))`

関連部分は

<form action="path/to/curl.php" method="post" id="Form6">
    <ul>
        <li>
            <label for="StartDate">Start Date</label>
            <input type="text" id="StartDate" name="StartDate" />
        </li>
        <li>    
            <label for="EndDate">End Date</label>
            <input type="text" id="EndDate" name="EndDate" />
            <input type="submit" id="Button6" value="Send" />
        </li>
        <li>
            <label for="AllDates"><input type="checkbox" name="AllDates" id="AllDates" value="YES"> All Dates</label>
        </li>
    </ul>
</form>

およびデータをリモート db に送信する curl スクリプト

<?php
    session_start();
    $url = 'https://remoteurl.com';
    $StartDate = $_POST["StartDate"];
    $EndDate = $_POST["EndDate"];
    $AllDates = $_POST["AllDates"];
    $fields = array(
        'StartDate'=>urldecode($StartDate),
        'EndDate'=>urldecode($EndDate),
        'AllDates'=>urldecode($AllDates)
    );
    foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
    $fields_string = rtrim($fields_string,'& ');
    //var_dump($_POST);
    $ch = curl_init($url);
    session_write_close();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    $directory='/home/XXX/public_html/XXX/';
    $filename = 'Report.csv';
    $handle = fopen($directory.$filename, 'w');
    fwrite($handle, $output);
    header('Content-type: application/octet-stream');
    header('Content-Disposition: attachment; filename="Report.csv"');
    echo $output;
?>

#AllDates が投稿されているのに、#StartDate または #EndDate の値が投稿されていない明確な理由はありますか?

4

2 に答える 2

0

私は自分で質問に答えます-クレジットは@Ubyに行きます. Chrome は次の理由でデータを投稿していませんでした:

$('#StartDate, #EndDate').delay(2000).val("");

他のブラウザでは機能しましたが。したがって、送信後にフィールド値をクリアする私の解決策は、これを行うことでした

setTimeout(function(){ // Delay for Chrome
    $('#StartDate, #EndDate').val(''); // blank the input
}, 100);

送信を押してから数秒後にフィールドがクリアされるようになり、フィールドがクリアされる前にデータをシリアル化する機会が Chrome に与えられます。

于 2013-03-21T13:39:41.977 に答える
0

そのように解析する必要はありません$_POST。代わりにこれを行うだけで、問題が解決する場合があります。

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( $_POST ));
于 2013-03-20T15:21:32.980 に答える