0

フォームを使用して SQL データベースを検索し、検索結果を画面に出力できるようにしたいと考えています。

これは私のコードです:

$query = "SELECT * FROM documents WHERE DocumentName = '%".$DocumentName."%'AND county = '".$county."' OR acreage = '".$acreage."' AND grantor = '".$grantor."' OR grantee = '".$grantee."' ORDER by 'DocumentName'" ;

$result=$db->query($query);
$num_results=$result->num_rows;
echo "<p>Number of documents found: ".$num_results."</p>";
for($i=0; $i <$num_results; $i++){ 
$row=$result->fetch_assoc();
echo"<p>".($i+1).".County: ";
echo htmlspecialchars(stripslashes($row['county']));
echo "<br />Acreage: ";
echo stripslashes($row['acreage']);
echo "<br />Grantor: ";
echo stripslashes($row['grantor']);
echo "<br />grantee: ";
echo stripslashes($row['grantee']);
echo "<br />Lessor: ";
echo stripslashes($row['DocumentName']);
echo "<br />PDF: ";
echo stripslashes ("<a href=".$row['PDF'].">" .$row['PDF'] . "</a><br>");
echo "</p>";
}

$result->free();
$db->close();

情報を選択して出力します。問題は、検索フォームのフィールドを空白のままにしておくことができるようにする必要があることですが、これによりすべてのデータが表示されます。郡を入力して他のすべてを空白のままにした場合、その郡のレコードのみを取得する必要があります。

4

3 に答える 3

0

where次のような条項条件を破ることができます。

$where = '';
$where .= empty(county) ? '' : "AND county='$county' ";
...

そして、クエリに挿入$whereします。

于 2012-11-14T15:54:07.817 に答える
0

このようなことを試してください(関連するフォームフィールドが送信され、空でない場合にのみそのデータを表示するには)

if(isset($_POST['country']) && strlen($_POST['country'])>0) echo ($i+1).".County: ". htmlspecialchars(stripslashes($row['county']));
if(isset($_POST['acreage']) && strlen($_POST['acreage'])>0) echo "<br />Acreage: ". stripslashes($row['acreage']);
// ...
于 2012-11-14T15:54:17.890 に答える
0

post 値が設定されていることを確認し、where 条件を配列に格納してimplodeから、クエリで使用する文字列を作成するために使用することをお勧めします。

if(isset($_POST['country']) && strlen($_POST['country'])) { 
    $where[] = "country = '$country'";
}
if(isset($_POST['acreage']) && strlen($_POST['country'])) { 
    $where[] = "acreage = '$acreage'";
}
....
$where = isset($where) ? ' WHERE '.implode(' AND ',$where) : '';
$query = 'SELECT * FROM documents'.$where;

また、SQL インジェクション攻撃から保護されていないことにも注意してください。入力をサニタイズする必要があります。

于 2012-11-14T16:59:16.550 に答える