搜索功能中的php问题

时间:2014-05-17 16:44:46

标签: php search

我试图添加搜索功能。 我希望它像这样工作:例如,如果我有5个字段,而用户只在2中写入,则搜索将仅基于2个字段。我的意思是在所有5个字段中写信息不是必要的,我希望搜索只会在填充的字段中发生。

现在只有我会在所有领域写一些东西(现在我有2个)它才有效。如果我只在一个字段中写,它不会显示任何内容。

代码:

 <html>
 <head>
 <link rel="stylesheet" type="text/css" href="style.css">
 </head>
 <body>
 <div id="container">
 <h1>Поиск</h1>
 <form action="search_form.php" method="post">
 <p>Направление</p>
 <input type="text" name="course" />
 <p>Форма обучения</p>
 <input type="text" name="form" />
 <input type="submit" value="Искать">
 </form>
 <?php
 $db = mysql_connect("localhost", "root", "") or die (mysql_error ());
 mysql_select_db("university", $db) or die(mysql_error());
 $w = array('TRUE');
 if (isset($_POST['course']))
    {
    $course = $_POST['course'];
    $w[] = "course='$course'";
    }
 if (isset($_POST['form']))
    {
    $form = $_POST['form'];
    $w[]= "form='$form'";
    }
 $where = implode($w, ' AND '); 
 $query = ('SELECT * FROM news WHERE '.$where);
 $result = mysql_query($query,$db);
 if($result !== false)
    {
      $news = mysql_fetch_array($result);
      while($news = mysql_fetch_assoc($result)) {?>
      <tr>
      <td><?=$news['id']?></td>
      <td><?=$news['program']?></td>
      </tr><?
      }
      }
 else 
     {
      echo 'Sorry, we didn't find anything.';
      }?>  
</div>            
</body>
</html>

1 个答案:

答案 0 :(得分:1)

您容易受到SQL injection attacks的攻击。在使用此代码执行任何其他操作之前,请先了解并解决此问题。

另外你的逻辑有问题:mysql_query()在错误时返回false。没有结果的查询 NOT 错误,仍然返回有效的查询句柄。它只有0行。

$result = mysql_query($query);
if ($result === false) {
   die(mysql_error());
} else if (mysql_num_rows($result) == 0) {
   die("No results");
} else {
   ... display results
}