Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2011, 00:51   #21
mr.saalexander
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 10
По умолчанию

PHP код:
<?php
    
require("header.php");
    require(
"footer.php")
    
/*-----------------------Подготавливаем строку поиска---------------------------------*/
        /*function search_prepare($strin) {
            $search = strtoupper(preg_replace('/,/', ' ', trim($strin)));
            $search = strtoupper(preg_replace('/;/', ' ', trim($search)));
            $search = strtoupper(preg_replace('/-/', ' ', trim($search)));
            $search = strtoupper(preg_replace('/\./', ' ', trim($search)));
            $search = strtoupper(preg_replace('/\s+/', '|', trim($search)));
            return  mb_strtoupper(urldecode($search), 'UTF-8');
        }  */
        
        
    /*-----------------------Установки поиска---------------------------------*/
        
$search mysql_real_escape_string($_POST['search-str']);
        
search_prepare($search);//подготавливаем строку
        
$first_rec 0// Изначальное колличество статей
        
$art =  10// Сколько статей на страницу
        
$page $_GET['page']; // Получаем номер текущей страницы
        
$rows mysql_query("SELECT COUNT(*) FROM articles WHERE (hide = 0) and ((title LIKE '%".$_POST['search-str']."%') or (s_disc LIKE '%".$POST['search-str']."%'))"); // количество новостей в базе
        
$arr mysql_fetch_assoc($rows);                                                                    
        
$row $arr[0]; // Заносим количество новостей
        
        
    /*----------------------------Формула вычисления----------------------------------*/
        
$total = (($row 1) / $news) + 1;
        
$total =  intval($total);
        
$page intval($page);
        if(empty(
$page) or $page 0$page 1;
        if(
$page $total$page $total;
        
$start $page $news $news;  // C какой новости будем выводить
        
        
    /*----------------------------Запрос и вывод новостей----------------------------------*/
        
do {
            
$query "SELECT id, title, s_disc, date FROM articles WHERE MATCH title, s_disc AGAINST ('$search') LIMIT '$start', '$art'"//запрос на выборку
            
$result mysql_query($query) or die ("Ошибка в запросе"); 
            
$k mysql_num_rows($result); //колличество строк
            
$array mysql_fetch_assoc($query);// весь массив в строку
            
if (($first_rec==0)||($k==0)) {
                echo 
"Ничего не найдено"
                break;
            }else{while(
$array mysql_fetch_assoc($query)){ 
                    echo 
"<div class='result'><div class='r_title'><a href='index.php?news=<?$array[id]?>'>$array[title]</a></div><div class='r_disc'>$array[s_disc]</div></div>";}    
            }
            
/*--------------------Навигация-------------------------------------------------------------------*/
            
if($page != 1$pervpage '<a href=view_cat.php?cat='.$cat.'&page=1>Первая</a> | <a href=view_cat.php?cat='.$cat.'&page='.($page 1) .'>Предыдущая</a> | ';
            
// Проверяем нужны ли стрелки вперед
            
if($page != $total$nextpage ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page 1) .'>Следующая</a> | <a href=view_cat.php?cat='.$cat.'&page=' .$total'>Последняя</a>';
 
            
// Находим две ближайшие станицы с обоих краев, если они есть
            
if($page 0$page5left ' <a href=view_cat.php?cat='.$cat.'&page='. ($page 5) .'>'. ($page 5) .'</a> | ';
            if(
$page 0$page4left ' <a href=view_cat.php?cat='.$cat.'&page='. ($page 4) .'>'. ($page 4) .'</a> | ';
            if(
$page 0$page3left ' <a href=view_cat.php?cat='.$cat.'&page='. ($page 3) .'>'. ($page 3) .'</a> | ';
            if(
$page 0$page2left ' <a href=view_cat.php?cat='.$cat.'&page='. ($page 2) .'>'. ($page 2) .'</a> | ';
            if(
$page 0$page1left '<a href=view_cat.php?cat='.$cat.'&page='. ($page 1) .'>'. ($page 1) .'</a> | ';
 
            if(
$page <= $total$page5right ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page 5) .'>'. ($page 5) .'</a>';
            if(
$page <= $total$page4right ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page 4) .'>'. ($page 4) .'</a>';
            if(
$page <= $total$page3right ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page 3) .'>'. ($page 3) .'</a>';
            if(
$page <= $total$page2right ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page 2) .'>'. ($page 2) .'</a>';
            if(
$page <= $total$page1right ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page 1) .'>'. ($page 1) .'</a>';
 
            
// Вывод меню если страниц больше одной
 
            
if ($total 1){
                echo 
"$pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage";
            }
            }
?>
Ошибка:

Цитата:
Parse error: syntax error, unexpected T_VARIABLE in X:\home\test1.ru\www\search.php on line 16
После долгих мучений, остановился вот на этом этапе.
Посмотрите пожалуйста, а то я уже опустил руки

Если удобнее будет смотреть, я прикрепил файл.
оч прошу помочь, ибо сдавать уже через 5 дней (((((((

Все в 1ом файле: search.php
mr.saalexander вне форума Ответить с цитированием
Старый 23.05.2011, 14:46   #22
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию

Вот код, вроде должен работать (на работоспособность не проверял, только на синтаксис)
PHP код:
<?php
require ("header.php");
require (
"footer.php");

/*-----------------------Подготавливаем строку поиска---------------------------------*/
function search_prepare($string) {
    
$string strtr($string",;-.%""     ");
    
$string strtoupper(preg_replace('/\s+/''|'trim($string)));
    return 
mb_strtoupper(urldecode($string), 'UTF-8');
}


/*-----------------------Установки поиска---------------------------------*/
$search search_prepare($search);
$search mysql_real_escape_string($_POST['search-str']);
$first_rec 0// Изначальное колличество статей 
$art 10// Сколько статей на страницу 
$page $_GET['page']; // Получаем номер текущей страницы 
$rows mysql_query("SELECT COUNT(*) FROM articles WHERE (hide = 0) and ((title LIKE '%$search%') or (s_disc LIKE '%$search%'))"); // количество новостей в базе 
$arr mysql_fetch_assoc($rows);
$row $arr[0]; // Заносим количество новостей 


/*----------------------------Формула вычисления----------------------------------*/
$total = (($row 1) / $news) + 1;
$total intval($total);
$page intval($page);
if (empty(
$page) or $page 0$page 1;
if (
$page $total$page $total;
$start $page $news $news// C какой новости будем выводить 


/*----------------------------Запрос и вывод новостей----------------------------------*/
$query "SELECT id, title, s_disc, date FROM articles WHERE (hide = 0) and ((title LIKE '%$search%') or (s_disc LIKE '%$search%')) LIMIT '$start', '$art'"//запрос на выборку 
$result mysql_query($query) or die("Ошибка в запросе");
$k mysql_num_rows($result); //колличество строк 
$array mysql_fetch_assoc($query); // весь массив в строку 
if (($first_rec == 0) || ($k == 0)) {
    echo 
"Ничего не найдено";
    break;
} else {
    while (
$array mysql_fetch_assoc($query)) {
        echo 
"<div class='result'><div class='r_title'><a href='index.php?news={$array['id']}'>{$array['title']}</a></div><div class='r_disc'>{$array['s_disc']}</div></div>";
    }
}
/*--------------------Навигация-------------------------------------------------------------------*/

// Вывод меню если страниц больше одной 
if ($total 1) {
    
$pervpage '';
    if (
$page 1$pervpage '<a href=view_cat.php?cat=' $cat '&page=1>Первая</a> | <a href=view_cat.php?cat=' $cat '&page=' . ($page 1) . '>Предыдущая</a>';
    
$nav $pervpage;
    
// Находим ближайшие станицы с обоих краев, если они есть 
    
for ($i = -5$i 5$i++) {
        if (
$i == 0$nav .= ($nav?" | ":"")."<b>$page</b>";
        if (
$i != && (($page $i) > 0) && (($page $i) <= $total)) $nav .= ' | <a href=view_cat.php?cat=' $cat '&page=' . ($page $i) . '>' . ($page $i) . '</a>';
    }
    
    
// Проверяем нужны ли стрелки вперед 
    
$nextpage '';
    if (
$page $total$nextpage ' | <a href=view_cat.php?cat=' $cat '&page=' . ($page 1) . '>Следующая</a> | <a href=view_cat.php?cat=' $cat '&page=' $total '>Последняя</a>';
    
$nav .= $nextpage;
}

echo 
$nav;
?>
Пофиксил:
1. Синтаксис.
2. Функция search_prepare у вас очень странная. Я её запилил обратно, так как в коде был её вызов (тоже очень странный). Текст изменил, оставил те же самые действия. Вызов починил.
3. Запросы в MySQL, 2 штуки.
4. Выпилил странную неоконченную конструкцию do {..}
5. Навигацию оптимизировал немного, а то совсем по-индийски сделано. Вам тоже таки платят за количество строк ?

Проверьте и разберитесь, наконец, что вы хотите от поиска, там надо что-то делать.
Логику навигации я оставил, но обратите внимание, что у вас там идёт так /*мы, к примеру, на 8-ой странице*/:
Цитата:
первая | предыдущая | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | следующая | последняя
Только мне кажется, что здесь что-то не так ? Может, cтоит убрать "предыдущая" и "следующая", или вставить их вместо " 7 " и " 9 " ? Или выпилить текстовую навигацию нафиг и оставить только цифры в стиле:
Цитата:
1 ... 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 ... N
Где N - это номер последней страницы ($total) ?

Последний раз редактировалось graymaster; 23.05.2011 в 16:14.
graymaster вне форума Ответить с цитированием
Старый 23.05.2011, 16:27   #23
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию Diff -ubw:

PHP код:
@@ -1,24 +1,22 @@
-require("footer.php")
+require ("footer.php");
+
-/*function search_prepare($strin) {
-            $search = strtoupper(preg_replace('/,/', ' ', trim($strin)));
-            $search = strtoupper(preg_replace('/;/', ' ', trim($search)));
-            $search = strtoupper(preg_replace('/-/', ' ', trim($search)));
-            $search = strtoupper(preg_replace('/\./', ' ', trim($search)));
-            $search = strtoupper(preg_replace('/\s+/', '|', trim($search)));
-            return  mb_strtoupper(urldecode($search), 'UTF-8');
-        }  */
+function search_prepare($string) {
+       $string = strtr($string, ",;-.%", "     ");
+       $string = strtoupper(preg_replace('/\s+/', '|', trim($string)));
+       return mb_strtoupper(urldecode($string), 'UTF-8');
+}
+$search = search_prepare($search);
-search_prepare($search);
-$rows = mysql_query("SELECT COUNT(*) FROM articles WHERE (hide = 0) and ((title LIKE '%" . $_POST['search-str'] . "%') or (s_disc LIKE '%" . $POST['search-str'] . "%'))"); // количество новостей в базе
+$rows = mysql_query("SELECT COUNT(*) FROM articles WHERE (hide = 0) and ((title LIKE '%$search%') or (s_disc LIKE '%$search%'))"); // количество новостей в базе

@@ -35,8 +33,7 @@

-do {
-       $query = "SELECT id, title, s_disc, date FROM articles WHERE MATCH title, s_disc AGAINST ('$search') LIMIT '$start', '$art'"; //запрос на выборку
+$query = "SELECT id, title, s_disc, date FROM articles WHERE (hide = 0) and ((title LIKE '%$search%') or (s_disc LIKE '%$search%')) LIMIT '$start', '$art'"; 

@@ -45,32 +42,27 @@
-                       echo "<div class='result'><div class='r_title'><a href='index.php?news=<?$array[id]?>'>$array[title]</a></div><div class='r_disc'>$array[s_disc]</div></div>";
+               echo "<div class='result'><div class='r_title'><a href='index.php?news={$array['id']}'>{$array['title']}</a></div><div class='r_disc'>{$array['s_disc']}</div></div>";
-       if ($page != 1) $pervpage = '<a href=view_cat.php?cat=' . $cat . '&page=1>Первая</a> | <a href=view_cat.php?cat=' . $cat . '&page=' . ($page - 1) . '>Предыдущая</a> | ';
-       // Проверяем нужны ли стрелки вперед
-       if ($page != $total) $nextpage = ' | <a href=view_cat.php?cat=' . $cat . '&page=' . ($page + 1) . '>Следующая</a> | <a href=view_cat.php?cat=' . $cat . '&page=' . $total . '>Последняя</a>';
-
-       // Находим две ближайшие станицы с обоих краев, если они есть
-       if ($page - 5 > 0) $page5left = ' <a href=view_cat.php?cat=' . $cat . '&page=' . ($page - 5) . '>' . ($page - 5) . '</a> | ';
-       if ($page - 4 > 0) $page4left = ' <a href=view_cat.php?cat=' . $cat . '&page=' . ($page - 4) . '>' . ($page - 4) . '</a> | ';
-       if ($page - 3 > 0) $page3left = ' <a href=view_cat.php?cat=' . $cat . '&page=' . ($page - 3) . '>' . ($page - 3) . '</a> | ';
-       if ($page - 2 > 0) $page2left = ' <a href=view_cat.php?cat=' . $cat . '&page=' . ($page - 2) . '>' . ($page - 2) . '</a> | ';
-       if ($page - 1 > 0) $page1left = '<a href=view_cat.php?cat=' . $cat . '&page=' . ($page - 1) . '>' . ($page - 1) . '</a> | ';
-
-       if ($page + 5 <= $total) $page5right = ' | <a href=view_cat.php?cat=' . $cat . '&page=' . ($page + 5) . '>' . ($page + 5) . '</a>';
-       if ($page + 4 <= $total) $page4right = ' | <a href=view_cat.php?cat=' . $cat . '&page=' . ($page + 4) . '>' . ($page + 4) . '</a>';
-       if ($page + 3 <= $total) $page3right = ' | <a href=view_cat.php?cat=' . $cat . '&page=' . ($page + 3) . '>' . ($page + 3) . '</a>';
-       if ($page + 2 <= $total) $page2right = ' | <a href=view_cat.php?cat=' . $cat . '&page=' . ($page + 2) . '>' . ($page + 2) . '</a>';
-       if ($page + 1 <= $total) $page1right = ' | <a href=view_cat.php?cat=' . $cat . '&page=' . ($page + 1) . '>' . ($page + 1) . '</a>';

-               echo "$pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage";
+       $pervpage = '';
+       if ($page > 1) $pervpage = '<a href=view_cat.php?cat=' . $cat . '&page=1>Первая</a> | <a href=view_cat.php?cat=' . $cat . '&page=' . ($page - 1) . '>Предыдущая</a> | ';
+       $nav = $pervpage;
+       // Находим ближайшие станицы с обоих краев, если они есть
+       for ($i = -5; $i < 5; $i++) {
+               if ($i == 0) $nav .= "<b>$page</b>";
+               if ($i != 0 && (($page + $i) > 0) && (($page + $i) <= $total)) $nav .= ' <a href=view_cat.php?cat=' . $cat . '&page=' . ($page + $i) . '>' . ($page + $i) . '</a> | ';

+
+       // Проверяем нужны ли стрелки вперед
+       $nextpage = '';
+       if ($page < $total) $nextpage = ' | <a href=view_cat.php?cat=' . $cat . '&page=' . ($page + 1) . '>Следующая</a> | <a href=view_cat.php?cat=' . $cat . '&page=' . $total . '>Последняя</a>';
+       $nav .= $nextpage;
 }
+
+echo $nav;
graymaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод побитовый преобразований EddieG Общие вопросы C/C++ 2 19.09.2010 17:18
Шифрование методом аналитических преобразований Margosha89 Помощь студентам 0 31.05.2010 16:04
Шифрование методом аналитических преобразований! Margosha89 PHP 7 31.05.2010 11:49
Поиск в листе Excel одного значения несколько раз Andr3000 Microsoft Office Excel 2 23.04.2010 10:24
Вывод массива после некоторых преобразований в С++ xnise Помощь студентам 8 05.12.2009 12:13