我有一个表单可以选择日期范围(#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>
以及将数据发送到远程数据库的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的价值没有被发布的任何明显原因?
答案 0 :(得分:0)
没有必要像那样解析你的$_POST
。只需这样做,它可能会解决您的问题:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( $_POST ));
答案 1 :(得分:0)
对于@Ranty,我会自己回答这个问题 - 虽然归功于@Uby。由于此原因,Chrome未发布数据:
$('#StartDate, #EndDate').delay(2000).val("");
虽然它在其他浏览器中有效。所以我提交后清除字段值的解决方案就是这样做
setTimeout(function(){ // Delay for Chrome
$('#StartDate, #EndDate').val(''); // blank the input
}, 100);
现在,在您点击提交后,它会在一瞬间清除该字段,这样Chrome就有机会在清除字段之前序列化数据。希望这可以帮助别人。