我正在使用动态生成的查询字符串来显示某些报告的搜索表单的结果 - 有 5 个搜索字段,$query2 可以不包含任何内容或包含 5 个额外的搜索值。
$query="SELECT * from employee_work where company_id='$company_id' $query2";
当我发布表单时,我在屏幕上显示了很棒的数据。然后我还使用 TCPDF 提供数据的 PDF 下载。我目前还通过 POST 为 TCPDF 上课:
if($_POST['PDF']) {
do the TCPDF stuff......
}
<div id="export-buttons">
<form name="export" method="post" action="">
<input type="submit" name="PDF" value="PDF" class="button pdf">
</div>
问题是,当用户点击 PDF 按钮时,POST 数组现在只包含提交按钮的值,而不是之前的 $query2 数据,所以当我使用 TCPDF 时,它输出所有数据并忽略 $query2搜索字符串的一部分。
我该如何解决这个问题,以便原始 $query2 数据保持可用,或者有另一种方法来检查是否已单击表单按钮而不覆盖 POST 的内容?我可以使用 javascript 来执行此操作吗?
谢谢 杰森
最佳答案
为什么不添加具有搜索条件值的隐藏输入?这样,当用户发布 PDF 请求时,您也会获得这些字段并可以在查询中使用它们(在确保值是安全的之后)。
其他更安全的方法是在 session 中存储一个对象或数组,其中包含构成列表的参数,然后将该搜索的标识符作为隐藏输入传递给 PDF 表单,例如:
$_SESSION['sc0000001'] = array('field1'=>'value1', 'field2'=>'value2', 'field3'=123);
...
<form>
<input type="hidden" name="sc" value="0000001" />
...
</form>
当您发布表单时,您会获得搜索的标识符并使用分配给 session 的条件创建查询...
编辑: 发布列表条件之前的 html:
<form>
<input type="text" name="filter1" value="" />
<input type="text" name="filter2" value="" />
<input type="text" name="filter3" value="" />
<input type="text" name="filter4" value="" />
<input type="text" name="filter5" value="" />
...
<input type="submit" value="go go go" />
</form>
获取过滤器、构建查询、获取结果并存储在 session 中的 PHP。
$sql = " select * from table_name where 1 ";
$arrFilters = array();
for($i=1;isset($_POST['filter'.$i]) && trim($_POST['filter'.$i])!="";$i++) {
$arrFilters['filter'.$i] = mysql_real_escape_string($_POST['filter'.$i]);
$sql.=" AND filter".$i."=".$arrFilters['filter'.$i];
}
// here you should have the complete $sql with the filters supplied
// lets save this search, we are going to keep only the last search from this user in his session.
$_SESSION['listingFilters'] = $arrFilters;
带有搜索结果的 HTML 和获取 pdf 的表单之后:
<form>
<input type="submit" value="get pdf" />
</form>
PHP: post拿到pdf后我们去检查是否有过滤器
$sql = " select * from table_name where 1 "; // basic query
// get the filters array from session
$arrFilters = isset($_SESSION['listingFilters']) ? $_SESSION['listingFilters'] : array();
foreach($arrFilters as $filter => $value) { // for each filter add it to the query
$sql.=" AND filter".$i."=".$arrFilters['filter'.$i];
}
// here you should have the complete $sql with the filters in session
// and can do your pdf magic
根据您的喜好添加胡椒和盐(您需要修改代码才能为您工作,如果您使用的文本具有过滤器,则可能还需要修改查询)
关于php - mysql_query 结果在第二篇文章中可用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870874/