Сделайте так, чтобы PHP MySql Search Engine и Pagination работали - PullRequest
0 голосов
/ 10 января 2012

Я не знаю, как сделать поиск по другой таблице.как мне это сделать?имя таблицы - комментарии, и я хочу найти все записи, хранящиеся в имени столбца kom

Другое дело, что я не могу начать нумерацию страниц ... Я начал нумерацию страниц в статистике else, потому что янужно только тогда, когда я получу более 1 результата.Я могу получить ссылки на страницы, показывающие и ограничить показ поисковых сообщений, но когда я нажимаю на одну из ссылок, я не могу перейти на следующую страницу. Вот код

<?php 
    $search = $_POST["search"];
    $field = $_POST["field"];

    if($_POST["submit"] && $search)
    {   
        echo "<div id='result'>";
        echo "<h2>Resultat</h2>";
    $search = strtoupper($search);
    $search = strip_tags($search);
    $search = trim($search);

    $query = "SELECT * FROM blogTable WHERE title LIKE '%$search%' 
              UNION 
              SELECT * FROM blogTable WHERE post LIKE '%$search%'";
    $result = mysql_query($query, $conn) or die(mysql_error());

    $matches = mysql_num_rows($result);

    if($matches == 0)
        //code if serch didnt result any results

    else if($matches == 1)
            //code if the matches only 1

    else
    {

        $per_page = 4;
        $pages = ceil($matches / $per_page);
        $page = (isset($_GET['page'])) ? (int)$_GET['page']: 1;
        $start = ($page - 1) * $per_page;
        $query2 = "SELECT * FROM blogTable WHERE title LIKE '%$search%' 
                          UNION 
                          SELECT * FROM blogTable WHERE post LIKE '%$search%' LIMIT $start, $per_page";
        $result2 = mysql_query($query2, $conn) or die(mysql_error());


        echo "<font size='-1'>Sökningen $search gav $matches resultat</font><br/>";
        while ($r2 = mysql_fetch_array($result2))
        {
            $id = $r["id"]; 
            $title = $r["title"]; 
            $post = $r["post"]; 
            $time = $r["time"];

            echo "<br/><strong><a href='comment.php?id=$id'>$title</a></strong><br/>";
            echo "<font size='-1'>".substr($post, 0, 60)."</font><br/>";
            echo "<font size='-1'>".substr($post, 60, 70)."</font><br/>";
            echo "<font size='-3'>$time</font><br/>";   
        }

            //theese are showin but cannot click of any of them
                if($pages >= 1 && $page <= $pages)
            {
                for($nr = 1; $nr <= $pages; $nr++)
                {
                    if($nr == $page)
                        echo "<a href='?page=".$nr."' style='font-size:20px;'>$nr</a>";
                    else
                        echo "<a href='?page=".$nr."' style='font-size:15px;'>$nr</a> ";
                }
            } 
        }   
    }

    ?>

Ответы [ 3 ]

0 голосов
/ 10 января 2012

Одна вещь, которая бросается в глаза, это то, что код, который вы показываете, уязвим для SQL-инъекций .

Избавьтесь от strip_tags() (если это для безопасности, в этом случае это бесполезно) и введите mysql_real_escape_string() для каждого значения, которое вы используете в поисковых запросах, или проверьте, является ли значение на самом деле числом при использовании int столбцы.

Другое дело, что тег <font> устарел. Классный способ CSS для стилизации текста заключается во внешней таблице стилей CSS и определении в ней что-то вроде

span.small { font-size: 12px; color: green }

и затем использовать его в HTML следующим образом:

<span class="small">Text goes here</span>

тем не менее, это, вероятно, принадлежит CodeReview.SE ....

0 голосов
/ 02 февраля 2012

Во-первых, я всегда рекомендую использовать метод GET, а не метод POST для поиска и фильтров, затем, может быть, этот класс pagination php может вам помочь.

0 голосов
/ 10 января 2012

Есть ли конкретная причина, по которой вы используете UNION?

Если нет, вы можете изменить:

$query = "SELECT * FROM blogTable WHERE title LIKE '%$search%' 
          UNION 
          SELECT * FROM blogTable WHERE post LIKE '%$search%'";

на:

$query = "SELECT * FROM blogTable WHERE (title LIKE '%$search%') OR (post LIKE '%$search%')";

В любом случаеЯ бы никогда не выполнил один и тот же запрос дважды, просто получил бы первые x результатов, если не был задан начальный параметр (например, номер страницы в строке запроса), и вычислил бы начальную точку при задании начального параметра.

И если вы хотите получить итоговую сумму, используйте запрос COUNT(*) или измените запрос:

$query = "SELECT SQL_CALC_FOUND_ROWS * FROM blogTable WHERE (title LIKE '%$search%') OR (post LIKE '%$search%')";
...