【问题标题】:search by category with php mysql使用 php mysql 按类别搜索
【发布时间】:2011-01-11 06:49:07
【问题描述】:

你好,我正在使用此代码进行搜索

    <form action="arama.php" method="get">
<input type="text" name="lol">
<select name='kategori'>
<option value="tum">Tum kategoriler</option>
<? 
while ($kat = mysql_fetch_array($kategori_isim)) {
echo "
<option value=".$kat[kategori_isim].">".$kat[kategori_isim]."</option>";
} 
?>
</select>
<input type="submit" value="ara">
</form>

<?
    $lol = mysql_real_escape_string($_GET['lol']);
    $kategori = mysql_real_escape_string($_GET['kategori']);

    if ($kategori == "tum") {
    $ara = mysql_query("select * from dosyalar where baslik like '%$lol%'");
    }
    else {
    $ara = mysql_query("select * from dosyalar where baslik like '%$lol%' order by kategori = '%$kategori%'");
    }
    ?>

按术语搜索,但不按类别列出。我该怎么办?

【问题讨论】:

    标签: php mysql html forms get


    【解决方案1】:

    我不确定我是否理解这个问题(我无法真正弄清楚这些字段的含义),但我认为您的第二个查询应该更像:

    $ara = mysql_query("SELECT * FROM dosyalar WHERE kategori LIKE '%$kategori%'");
    

    ORDER BY 仅指定如何对结果进行排序,您只能使用列名,而不是代码中的检查。

    扩展我的答案:ORDER BY kategori = '%$kategori%' 不是语法错误,但我认为它没有任何用处。检查kategori = '%$kategori%' 将始终为假(除非您在开始和结束时都有一个带有百分号的值)所以ORDER BY 子句将无用,您只需执行与在另一个分支中所做的相同的选择if 块。

    指定ORDER BY kategori = '$kategori' 将为所有kategori 不等于$kategori 的记录返回0,为匹配的记录返回1。这基本上会在查询结束时对所有匹配的行进行排序。

    【讨论】:

      【解决方案2】:

      可能查询失败。在这种情况下,mysql_query() 返回 FALSE,mysql_error() 返回错误描述。
      试试

      <form action="arama.php" method="get">
        <input type="text" name="lol" />
        <select name='kategori'>
          <option value="tum">Tum kategoriler</option>
      <?php 
      while ( false!==($kat=mysql_fetch_array($kategori_isim)) ) {
        $htmlIsim = htmlspecialchars($kat['kategori_isim']);
        echo '    <option value="', $htmlIsim, '">', $htmlIsim, "</option>\n";
      }
      ?>
        </select>
        <input type="submit" value="ara" />
      </form>
      
      <?php
      $lol = isset($_GET['lol']) ? mysql_real_escape_string($_GET['lol']) : '';
      $kategori = isset($_GET['kategori']) ? mysql_real_escape_string($_GET['kategori']) : '';
      $query = "select * from dosyalar where baslik like '%$lol%'";
      if ( 'tum'!==$kategori ) {
        $query .= "order by kategori = '%$kategori%'";
      }
      $ara = mysql_query($query) or die( htmlspecialchars(mysql_error().': '.$query) );
      echo '<pre>Debug: ', mysql_num_rows($ara) , ' records in the result set for ', htmlspecialchars($query), "</pre>\n";
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        相关资源
        最近更新 更多