使用php mysql按类别搜索

时间:2010-01-30 21:10:28

标签: php mysql html forms get

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

    <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%'");
    }
    ?>

按期限搜索但不按kategori列出..我该怎么办?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:1)

可能查询失败了。在这种情况下,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";
?>