打印SQL查询结果PHP

时间:2012-11-14 15:44:44

标签: php sql forms search

我希望能够使用表单搜索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();

选择并输出信息。问题是我需要人们能够将一个字段留空搜索表单然而这会导致显示所有数据。如果他们输入县并将其他所有内容留空,我希望它只提取该县的记录。

3 个答案:

答案 0 :(得分:0)

您可以打破where条款,例如:

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

在查询中注入$where

答案 1 :(得分: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']);
// ...

答案 2 :(得分:0)

我建议检查已设置的帖子值并存储数组中的条件,然后使用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注入攻击,您需要清理输入。