mysql_query结果在第二篇文章中可用?

时间:2012-06-03 13:44:44

标签: php javascript html

我使用动态生成的查询字符串来显示某些报告的搜索表单结果 - 有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来执行此操作吗?

由于 杰森

2 个答案:

答案 0 :(得分:3)

为什么不添加具有搜索条件值的隐藏输入?这样,当用户发布PDF请求时,您也可以获得这些fiels,并且可以在查询中使用它们(确保值为SAFE之后)。

其他更安全的方法是在会话中存储一个对象或数组,其中包含创建列表的参数,然后将该搜索的标识符作为隐藏的输入传递给PDF表单,如:

$_SESSION['sc0000001'] = array('field1'=>'value1', 'field2'=>'value2', 'field3'=123);
...
<form>
<input type="hidden" name="sc" value="0000001" />
...
</form>

当您发布表单时,您将获得搜索的标识符并创建具有分配给会话的条件的查询...

EDITED: 发布列表标准之前的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>

获取过滤器,构建查询,获取结果和存储在会话中的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: 在获得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

添加辣椒和盐(您需要修改代码以便为您工作,如果您使用的是文字,还可以查询过滤器)

答案 1 :(得分:0)

没有看到更多代码,这可能是因为HTML页面上有两个“表单”,一个表单中有一个提交按钮,另一个表单中有另一个表单。

<form>
   <input name="1" />
   <input type="submit" name="go"/>
</form> 
<form>
   <input type="submit" name="createPDF" />
</form> 

确保您在一个表单中包含所有字段/按钮。

<form>
   <input name="1" />
   <input type="submit" name="go"/>
   <input type="submit" name="createPDF" />
</form>