1

動的に生成されたクエリ文字列を使用して、一部のレポートの検索フォームからの結果を表示しています。5 つの検索フィールドがあり、$query2 には何も含まれていないか、5 つの追加の検索値が含まれている可能性があります。

$query="SELECT * from employee_work where company_id='$company_id' $query2";

フォームを POST すると、データが画面に表示されます。これは素晴らしいことです。また、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を使用できますか?

ありがとうジェイソン

4

2 に答える 2

3

検索からの基準の値を持つ非表示の入力を追加しないのはなぜですか? そうすれば、ユーザーがPDFのリクエストを投稿すると、それらのフィールドも取得され、クエリで(値が安全であることを確認した後)それらを使用できます。

他のより安全な方法は、リストを作成したパラメーターを含むオブジェクトまたは配列をセッションに保存し、その検索の識別子を非表示の入力として PDF フォームに渡すことです。

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

フォームを投稿すると、検索の識別子が取得され、セッションに割り当てられた基準でクエリが作成されます...

編集済み: リスト基準を投稿する前の 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

コショウと塩を追加してください(コードを修正して、テキストを使用している場合はクエリにもフィルタを適用する必要があります)

于 2012-06-03T13:53:44.427 に答える
0

これ以上コードが表示されない場合、これはおそらく、HTML ページに 2 つの「フォーム」があり、一方のフォームに 1 つの送信ボタンがあり、もう一方のフォームに別の送信ボタンがあるためです。

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

1 つのフォーム内にすべてのフィールド/ボタンがあることを確認してください。

<form>
   <input name="1" />
   <input type="submit" name="go"/>
   <input type="submit" name="createPDF" />
</form> 
于 2012-06-03T13:49:33.897 に答える