поиск по категории с PHP MySQL - PullRequest
2 голосов
/ 31 января 2010

привет, я использую этот код для поиска

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

поиск по термину работает, но не по категориям.

Ответы [ 2 ]

1 голос
/ 31 января 2010

Возможно, запрос не удался. В этом случае mysql_query () возвращает FALSE, а mysql_error () возвращает описание ошибки.
Попробуйте

<code><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), "
\ п "; ?>
1 голос
/ 31 января 2010

Я не уверен, что понимаю вопрос (я не могу понять, что означают эти поля), но я думаю, что ваш второй запрос должен быть больше похож на:

$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' вернет 0 для всех записей, где kategori не равно $kategori, 1 для тех, где оно совпадает. Это в основном отсортирует все совпадающие строки в конце вашего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...