ФорумПрограммированиеPHP для идиотов → поиск по базе

поиск по базе

  • kamachi

    Сообщения: 320 Репутация: N Группа: Кто попало

    Spritz 7 марта 2010 г. 8:53

    пишу поиск, первй раз))

    нужно искать файлы в опр. категории и по имени.
    Написал ват такую байду на скорую руку (это чисто моторчик)

    //получаем категори в которых проводится поиск
    $sql = mysql_query("SELECT name,id FROM menu_cat ORDER BY id");
    while($r = mysql_fetch_array($sql)) {
    $r2[] = $r;
    }
    $smarty->assign('mc',$r2);

    if(isset($_POST['se'])) {
    if(strlen(trim($_POST['kv'])) < 3) {
    echo "error";
    } else {
    $good = ereg_replace(" +", " ", $_POST['kv']);
    $sql2 = mysql_query("SELECT * FROM files WHERE cat_id='".$_POST['cat']."' AND name LIKE '%". str_replace(" ", "%' OR field LIKE '%", $good). "%'");
    if(mysql_num_rows($sql2)!=0) {
    $row = mysql_fetch_array($sql2);
    echo $row['id'].$row['name'];
    } else {
    echo "Совпадений не найдено";
    }

    }
    }


    пойдет? ))
    я на пыхе пробовал найти темы, но поиск рез-тов не дал.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 7 марта 2010 г. 8:59, спустя 6 минут 27 секунд

    а в чем вопрос собственно говоря?
    Спустя 56 сек.
    попробуй Сфинкс/zend search lucene
  • kamachi

    Сообщения: 320 Репутация: N Группа: Кто попало

    Spritz 7 марта 2010 г. 9:06, спустя 7 минут 15 секунд


    а в чем вопрос собственно говоря?
    Спустя 56 сек.
    попробуй Сфинкс/zend search lucene
    говнокод или нет?
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 7 марта 2010 г. 9:07, спустя 1 минуту 3 секунды

    kamachi, я бы сказал - пойдет.
  • kamachi

    Сообщения: 320 Репутация: N Группа: Кто попало

    Spritz 7 марта 2010 г. 9:30, спустя 22 минуты 55 секунд

    а вот так чета не пашет((


    //получаем категори в которых проводится поиск
    $sql = mysql_query("SELECT name,id FROM menu_cat ORDER BY id");
    while($r = mysql_fetch_array($sql)) {
    $r2[] = $r;
    }
    $smarty->assign('mc',$r2);

    if(isset($_POST['se'])) {
    if(strlen(trim($_POST['kv'])) < 3 or strlen(trim($_POST['kv'])) > 40) {
    $smarty->assign('err','Поисковый запрос не должен быть < 3 и > 40 символов');
    } else {
    $_PAGING = new Paging($_DB);
    $_PAGING->page_size = 5;
    $good = ereg_replace(" +", " ", $_POST['kv']);
    $r = $_PAGING->get_page("SELECT * FROM files WHERE cat_id='".intval($_POST['cat'])."' AND name LIKE '%". str_replace(" ", "%' OR field LIKE '%", $good). "%'");
    $row = $r->fetch_assoc();
    if(count($row)!=0) {
    while($row = $r->fetch_assoc()) {
    $f[] = $row;
    }
    $smarty->assign('f',$f);
    $smarty->assign('prev',$_PAGING->get_prev_page_link());
    $smarty->assign('next',$_PAGING->get_next_page_link());
    $smarty->assign('link',$_PAGING->get_page_links());
    } else {
    $smarty->assign('no','Совпадений не найдено');
    }

    }
    }
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 7 марта 2010 г. 9:32, спустя 1 минуту 58 секунд


    • ereg являются deprecated

    • для доступа к БД я бы отдельный класс сделал

    • $r, $r2, $sql2 - ты сам-то как? не путаешься?

    • зачем echo если у тебя смарти?

    • че-то я не вижу, что б "cat" экранировалась или к типу инт приводались



    а так да, пойдет, конечно
    Спустя 55 сек.
    и да, я комментировал первое сообщение в теме.
    во втором уже появился intval
  • kamachi

    Сообщения: 320 Репутация: N Группа: Кто попало

    Spritz 7 марта 2010 г. 9:38, спустя 5 минут 11 секунд

    видать из за это  *на )))

    $row = $r->fetch_assoc();
           if(count($row)!=0) {
     как mysql_num_rows() тут использовать что бы определить найдено или нет??
    Спустя 96 сек.
    $r, $r2, $sql2 - ты сам-то как? не путаешься?

    зачем echo если у тебя смарти? - я просто тестирую

Пожалуйста, авторизуйтесь, чтобы написать комментарий!