【问题标题】:Printing SQL query results PHP打印 SQL 查询结果 PHP
【发布时间】:2012-11-14 15:44:43
【问题描述】:

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

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

【问题讨论】:

  • DocumentName = '%".$DocumentName."%' => DocumentName = '".$DocumentName."'

标签: php sql forms search


【解决方案1】:

您可以打破where 子句条件,例如:

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

并在查询中注入$where

【讨论】:

    【解决方案2】:

    尝试这样的事情(仅当关联的表单字段已发送且不为空时才显示该数据)

    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']);
    // ...
    

    【讨论】:

      【解决方案3】:

      我建议检查 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 注入攻击的保护,您需要清理您的输入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        • 2012-08-15
        • 1970-01-01
        相关资源
        最近更新 更多