2013-03-20 3 views
0

У меня есть форма, в которой вы можете выбрать диапазон дат (#StartDate - #EndDate или #AllDates), и он записывает данные в CSV-файл и заставляет загружать. по какой-то причине я не могу передать значения #StartDate и #EndDate. они генерируются полем glDatePicker, но даже когда я помещаю жестко заданные значения, они не передаются. Я запускаю $ ('# StartDate'). Val(); в консоли и возвращает дату, однако, когда я раскомментируюPHP, не отправляющий данные через curl

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> 

и локона скрипт, который отправляет данные на удаленный дб

<?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 не опубликовано?

+0

Как вы представляете форму? – Uby

+0

Извините, не уверен, что вы имеете в виду? его an submitHandler: function (form) { \t \t \t $ ('# prcs6'). fadeIn ('fast'). delay (2000) .fadeOut ('fast'); \t \t \t $ ('# StartDate, #EndDate'). Delay (2000) .val (""); \t вид.submit(); \t return false; \t}, –

+0

Via JS, вот что я просил. Кстати, вы проверили в своем браузере HTTP-запрос, отправленный на curl.php? Проверьте, отправлены ли эти параметры или нет. – Uby

ответ

0

Нет необходимости разбирать ваш $_POST. Просто сделайте это вместо того, и это может устранить проблему:

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST)); 
+0

Я заменил эту строку curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ fields_string); с приведенным выше. Нет радости. –

0

Для @Ranty, Ill ответить на этот вопрос сам - хотя заслуга @Uby. Chrome не отправлял данные из-за этого:

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

Хотя он работал в других браузерах. Таким образом, мое решение, чтобы очистить значения поля после представления должен был сделать это

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

Теперь она очищает поле на долю секунды после того, как вы нажмете представить, что дает Chrome возможность упорядочивания данных до поля будут очищены. Надеюсь, это поможет кому-то другому.

Смежные вопросы