搜索表单能够忽略空白字段

时间:2013-11-07 10:56:23

标签: php mysql forms search

我已经制作了一个HTML搜索表单,它根据表单的内容为MySql数据库创建查询。如果用户将该特定表单字段留空,我想要做的是忽略搜索参数。网上有很多答案,特别是在这个网站上,但我无法让它们中的任何一个起作用。

我已经尽可能地删除了我的代码以粘贴到这里:

HTML输入:

<form action="deletesearchresults.php" method="GET">
  <p><b>First Part Of Postcode</b>
  <input type="text" name="searchpostcode"></b>  </p>
  <p><b>Category</b>
    <input type="text" name="searchfaroukcat"></b>


    <input type="submit" value="Search">
  </p>
</form>

PHP结果显示:

<?php
    mysql_connect("myip", "my_username", "my_password") or die("Error connecting to database: ".mysql_error());


    mysql_select_db("my_db") or die(mysql_error());



   $sql = mysql_query("SELECT * FROM 
GoogleBusinessData
INNER JOIN TblPostcodeInfo ON GoogleBusinessData.BusPostalCode = TblPostcodeInfo.PostcodeFull WHERE PostcodeFirstPart = '$_GET[searchpostcode]' and FaroukCat = '$_GET[searchfaroukcat]' LIMIT 0,20");


   while($ser = mysql_fetch_array($sql)) {

      echo "<p>" . $ser['BusName'] . "</p>";
      echo "<p>" . $ser['PostcodePostalTown'] . "</p>";
      echo "<p>" . $ser['PostcodeArea'] . "</p>";
      echo "<p>" . $ser['FaroukCat'] . "</p>";
      echo "<p> --- </p>";

}

?>

这很好用,直到我将一个字段留空,在这种情况下它不会返回任何结果,因为它认为我要求的结果是该字段为空或为空,我不记得。我想要那个表单字段为空的所有结果。

我尝试组合类似%[myfeild]%等但我只想让结果准确显示字段上的内容,而不仅仅是包含字段内容的内容,例如搜索邮政编码“TR1”将返回TR1,TR10,TR11等的结果。

我相信我可能需要一个阵列,但经过3天的尝试,我只是不知道如何完成这项工作。

任何帮助都会很棒。

编辑:此外,我最终会在此表单中添加最多十个字段,而不仅仅是本示例中的两个字段,因此请记住您可能提出的任何建议。

1 个答案:

答案 0 :(得分:0)

尝试使用isset()

例如

if(isset($_GET[searchpostcode]) && isset($_GET[searchfaroukcat])){
 $fields = "WHERE PostcodeFirstPart = '$_GET[searchpostcode]' and FaroukCat = '$_GET[searchfaroukcat]'";
}elseif(isset($_GET[searchpostcode]) && !isset($_GET[searchfaroukcat])){
 $fields = "WHERE PostcodeFirstPart = '$_GET[searchpostcode]'";
}elseif(!isset($_GET[searchpostcode]) && isset($_GET[searchfaroukcat])){
 $fields = "WHERE FaroukCat = '$_GET[searchfaroukcat]'";
}else{
 $fields = "";
}

$sql = "SELECT * FROM 
GoogleBusinessData $fields
INNER JOIN TblPostcodeInfo ON GoogleBusinessData.BusPostalCode = TblPostcodeInfo.PostcodeFull  LIMIT 0,20";

但你确实需要转义$ _GET变量,但我强烈建议使用PDO / mysqli预处理语句http://php.net/manual/en/book.pdo.phphttp://php.net/manual/en/book.mysqli.php

或尝试foreach循环

foreach($_GET as $keys=>$value){
$values .= $keys."='".$value."' and"; 
}
$values = rtrim($values, " and");

if(trim($values) != "" || trim($values) != NULL){
$query = "WHERE ".$values;
}else{
$values = "";
}

$sql = "SELECT * FROM `test`".$values;