php搜索脚本仅提取第一个条件

时间:2015-08-27 12:45:50

标签: php

好的,这是我的搜索HTML表单:

<form name="search" action="" method="get">
  Search for: <input type="text" name="find" /> in 
   <select name="field">
    <option value="author">Author</option>
    <option value="papername">Paper name</option>
    <option value="coauthors">Co-authors</option>
    <option value="abstract">Abstract</option>
    <option value="keywords">Keywords</option>
  </select>
 <input type=submit name=search value="search" />
</form>

这是我用于获取结果的PHP脚本(前几个条件,休息是无关紧要的,主要是带有变量的c / p):

if($_GET['search'] == "search"){
$loop = "";
$search = !empty($_GET['find']) && ($_GET['find'] != "")?trim($_GET['find']):false;
$field = !empty($_GET['field'])?trim($_GET['field']):false;
  if ($search == ""){
  echo "Please enter search conditions !";
  }
    elseif ($search) {
    echo "<u>Searched term</u>:"." ".$search."<br />"."<u>In</u>:"." ".$field."<br/>";

    if(($field == "Author") || ($search != "")) {                   
    $author_query = mysql_query("SELECT p_authors FROM papers WHERE p_authors LIKE '%$search%'");
    $author_output = mysql_num_rows($author_query);
        if($author_output > 0){
            while ($loop = mysql_fetch_assoc($author_query)) {
                                print_r($loop);
                }
            }
    else {
    echo "No match !";
      }                 
    }
    elseif(($field == "papername") || ($search != "")){
    $author_query = mysql_query("SELECT p_name FROM papers WHERE p_name LIKE '%$search%'");
    $author_output = mysql_num_rows($author_query);
        if($author_output > 0){
        while ($loop = mysql_fetch_assoc($author_query)) {
            print_r($loop);
            }
    }
        else {
          echo "No match !";
        }   
            }
     etc ...

事情是,我只选择选项值(作者)时获得输出结果(在搜索字段中有一些关键字),但是当我更改选项值(如papername和其他)时,我得到回显错误。看起来只有第一个条件(使用$ field ==&#34;作者&#34;)正在通过,我无法弄清楚这里有什么问题? THX

2 个答案:

答案 0 :(得分:0)

使用您提供的信息严格回答您的问题:如果您属于else条款,则显然意味着您的if条款并非如此实现。在您的情况下,$author_output <= 0,导致我们相信 1)您的查询没有返回结果,因此您必须检查您的表内容,SELECT参数等或 2)< / strong>您的查询返回错误,并且您没有按照自己的意愿处理它。

如评论中所述,请避免使用mysql_已弃用的功能,并考虑使用mysqli_个或构建PDO个对象。

答案 1 :(得分:0)

在你的if语句中使用OR(||($ search!=&#34;&#34;))条件总是为真,因为它不是null所以它每次执行而其他elseif块从不执行尝试替换使用AND(&amp;&amp;)条件如下

if(($field == "Author") && ($search != "")) {                   
$author_query = mysql_query("SELECT p_authors FROM papers WHERE p_authors LIKE '%$search%'");
$author_output = mysql_num_rows($author_query);
    if($author_output > 0){
        while ($loop = mysql_fetch_assoc($author_query)) {
                            print_r($loop);
            }
        }
else {
echo "No match !";
  }                 
}