X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> советы профи
Salikhoff_hb
Salikhoff_hb
Topic Starter сообщение 26.3.2011, 11:06; Ответить: Salikhoff_hb
Сообщение #1


есть вот такой вот говнястый код [PHP]<?php
require_once ('main/config.php');
if (isset($_GET['amiso'])){
$request = $_GET['amiso'];
$request = rtrim($request);
$request = strip_tags($request);
$request = stripslashes($request);
$request = htmlspecialchars($request);
$request = str_replace("'","&quot;",$request);
$request = ereg_replace(" +"," ",$request);
$request = rtrim($request);
if ($request!='' && strlen($request)>2){
@$list = (int)$_GET['list'];
if (isset($_GET['section'])){
$counter = mysql_query("SELECT COUNT(*) FROM `catalog` WHERE ((`keywords` LIKE '%$request%') OR (`title` LIKE '%$request%') OR (`info` LIKE '%$request%') OR (`url` LIKE '%$request%')) AND `section`=".$_GET['section']."", $db);
}
else {
$counter = mysql_query("SELECT COUNT(*) FROM `catalog` WHERE ((`keywords` LIKE '%$request%') OR (`title` LIKE '%$request%') OR (`info` LIKE '%$request%') OR (`url` LIKE '%$request%'))", $db);
}
$counter = mysql_fetch_array($counter);
$counter = $counter[0];
$total = (($counter-1)/10)+1;
$total = intval($total);
$list = intval($list);
if (empty($list) or $list < 0)
$list = 1;
if ($list > $total)
$list = $total;
$start = $list*10-10;
if ($start < 0){$start = 0;}
if (isset($_GET['section'])){
$result = mysql_query("SELECT * FROM `catalog` WHERE ((`keywords` LIKE '%$request%') OR (`title` LIKE '%$request%') OR (`info` LIKE '%$request%') OR (`url` LIKE '%$request%')) AND `section`=".$_GET['section']." LIMIT $start, 10", $db);
}
else {
$result = mysql_query("SELECT * FROM `catalog` WHERE ((`keywords` LIKE '%$request%') OR (`title` LIKE '%$request%') OR (`info` LIKE '%$request%') OR (`url` LIKE '%$request%')) LIMIT $start, 10", $db);
}
if (!$result){exit(mysql_error());}
$n = 1 + $start;
if (mysql_num_rows($result) > 0){
echo ("<strong class='font'>Найдено <strong class='font' style='color:#7f99d2'>".$counter."</strong> ответов по вашему запросу.</strong>");
while ($row=mysql_fetch_array($result)){
echo ("<div id='block'>");
echo ("<div class='number'>".$n."</div>");
echo ("<div id='result'>");
echo ("<a href=".$row['url']." target='_blank' class='title'>".$row['title']."</a>");
echo ("<div class='content_result'>".$row['info']."</div>");
echo ("<a href=".$row['url']." target='_blank' class='url'>".$row['url']."</a>");
echo ("</div></div>");
$n ++;
}
while ($row = mysql_fetch_array($result));
if (isset($_GET['section'])){
if ($list!=1) $page1="<div class=arrows>&larr;</div> <a href='catalog.php?section=".$_GET['section']."&list=".($list - 1)."&amiso=".$request."'>влево</a> | ";
if ($list!=$total) $npage=" | <a href='catalog.php?section=".$_GET['section']."&list=".($list + 1)."&amiso=".$request."'>вправо</a> <div class=arrows>&rarr;</div>";
if ($list-3>0) $p3l=" <a href='catalog.php?section=".$_GET['section']."&list=".($list - 3)."&amiso=".$request."'>".($list-3)."</a> | ";
if ($list-2>0) $p2l=" <a href='catalog.php?section=".$_GET['section']."&list=".($list - 2)."&amiso=".$request."'>".($list-2)."</a> | ";
if ($list-1>0) $p1l=" <a href='catalog.php?section=".$_GET['section']."&list=".($list - 1)."&amiso=".$request."'>".($list-1)."</a> | ";
if ($list+3<=$total) $p3r=" | <a href='catalog.php?section=".$_GET['section']."&list=".($list + 3)."&amiso=".$request."'>".($list+3)."</a>";
if ($list+2<=$total) $p2r=" | <a href='catalog.php?section=".$_GET['section']."&list=".($list + 2)."&amiso=".$request."'>".($list+2)."</a>";
if ($list+1<=$total) $p1r=" | <a href='catalog.php?section=".$_GET['section']."&list=".($list + 1)."&amiso=".$request."'>".($list+1)."</a>";
}
else{
if ($list!=1) $page1='<div class=arrows>&larr;</div> <a href="catalog.php?list='.($list - 1).'&amiso='.$request.'">влево</a> | ';
if ($list!=$total) $npage=' | <a href="catalog.php?list='.($list + 1).'&amiso='.$request.'">вправо</a> <div class=arrows>&rarr;</div>';
if ($list-3>0) $p3l=' <a href="catalog.php?list='.($list - 3).'&amiso='.$request.'">'.($list-3).'</a> | ';
if ($list-2>0) $p2l=' <a href="catalog.php?list='.($list - 2).'&amiso='.$request.'">'.($list-2).'</a> | ';
if ($list-1>0) $p1l=' <a href="catalog.php?list='.($list - 1).'&amiso='.$request.'">'.($list-1).'</a> | ';
if ($list+3<=$total) $p3r=' | <a href="catalog.php?list='.($list + 1).'&amiso='.$request.'">'.($list+3).'</a>';
if ($list+2<=$total) $p2r=' | <a href="catalog.php?list='.($list + 2).'&amiso='.$request.'">'.($list+2).'</a>';
if ($list+1<=$total) $p1r=' | <a href="catalog.php?list='.($list + 1).'&amiso='.$request.'">'.($list+1).'</a>';
}
if ($total > 1){Error_Reporting(E_ALL & ~E_NOTICE);
echo ("<div class='list' align='center'>");
echo ($page1.$p3l.$p2l.$p1l.'<div class="this">'.$list.'</div>'.$p1r.$p2r.$p3r.$npage);
echo ("</div>");
}
}
else {
echo ("<strong class='error'>К сожалению по вашему запросу ничего не найдено...</strong>");
}
}
else {
echo ("<strong class='error'>Задан пустой поисковый запрос или строка поиска содержит менее 3 символов...</strong>");
}
}
?>[/PHP]делал что мог, но теперь понадобилось его максимально улучшить, т.е. ускорить облегчить и прочее. кто что подскажет?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Salikhoff_hb
Salikhoff_hb
Topic Starter сообщение 26.3.2011, 20:09; Ответить: Salikhoff_hb
Сообщение #2


ну кто нить мне сегодня подскажет хоть?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Witu
Witu
сообщение 26.3.2011, 20:35; Ответить: Witu
Сообщение #3


(' post='107049 @ 26.3.2011, 13:06)
while ($row = mysql_fetch_array($result));

это чаво такое? вот этого чела чтоль?http://evgeniypopov.com/

на вот эти вот поля KEYWORDS, TITLE, INFO, URL воткнуть индексы
только вот составной индекс или одиночный точно сказать не могу


if ($total > 1){Error_Reporting(E_ALL & ~E_NOTICE);

бред какой то...
Error_Reporting(E_ALL & ~E_NOTICE);
в 99.999% случаев ставят на 2й строке файла ну или покрайней мере до начала работы с базой
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Salikhoff_hb
Salikhoff_hb
Topic Starter сообщение 27.3.2011, 10:26; Ответить: Salikhoff_hb
Сообщение #4


HTMLandPHP, вот это я вообще хотел переделать на циклы, но в циклах я не шарю пока оставил так [PHP]if (isset($_GET['section'])){
if ($list!=1) $page1="<div class=arrows>&larr;</div> <a href='catalog.php?section=".$_GET['section']."&list=".($list - 1)."&amiso=".$request."'>влево</a> | ";
if ($list!=$total) $npage=" | <a href='catalog.php?section=".$_GET['section']."&list=".($list + 1)."&amiso=".$request."'>вправо</a> <div class=arrows>&rarr;</div>";
if ($list-3>0) $p3l=" <a href='catalog.php?section=".$_GET['section']."&list=".($list - 3)."&amiso=".$request."'>".($list-3)."</a> | ";
if ($list-2>0) $p2l=" <a href='catalog.php?section=".$_GET['section']."&list=".($list - 2)."&amiso=".$request."'>".($list-2)."</a> | ";
if ($list-1>0) $p1l=" <a href='catalog.php?section=".$_GET['section']."&list=".($list - 1)."&amiso=".$request."'>".($list-1)."</a> | ";
if ($list+3<=$total) $p3r=" | <a href='catalog.php?section=".$_GET['section']."&list=".($list + 3)."&amiso=".$request."'>".($list+3)."</a>";
if ($list+2<=$total) $p2r=" | <a href='catalog.php?section=".$_GET['section']."&list=".($list + 2)."&amiso=".$request."'>".($list+2)."</a>";
if ($list+1<=$total) $p1r=" | <a href='catalog.php?section=".$_GET['section']."&list=".($list + 1)."&amiso=".$request."'>".($list+1)."</a>";
}
else{
if ($list!=1) $page1='<div class=arrows>&larr;</div> <a href="catalog.php?list='.($list - 1).'&amiso='.$request.'">влево</a> | ';
if ($list!=$total) $npage=' | <a href="catalog.php?list='.($list + 1).'&amiso='.$request.'">вправо</a> <div class=arrows>&rarr;</div>';
if ($list-3>0) $p3l=' <a href="catalog.php?list='.($list - 3).'&amiso='.$request.'">'.($list-3).'</a> | ';
if ($list-2>0) $p2l=' <a href="catalog.php?list='.($list - 2).'&amiso='.$request.'">'.($list-2).'</a> | ';
if ($list-1>0) $p1l=' <a href="catalog.php?list='.($list - 1).'&amiso='.$request.'">'.($list-1).'</a> | ';
if ($list+3<=$total) $p3r=' | <a href="catalog.php?list='.($list + 1).'&amiso='.$request.'">'.($list+3).'</a>';
if ($list+2<=$total) $p2r=' | <a href="catalog.php?list='.($list + 2).'&amiso='.$request.'">'.($list+2).'</a>';
if ($list+1<=$total) $p1r=' | <a href="catalog.php?list='.($list + 1).'&amiso='.$request.'">'.($list+1).'</a>';
} [/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
LifeUP
LifeUP
сообщение 28.3.2011, 17:22; Ответить: LifeUP
Сообщение #5


ну хотябы немного сократить часть кода
[PHP]
if (isset ($_GET['amiso']))
{
$request = trim ($_GET['amiso']);
// Регулярка которая вырежет все ненужные знаки
$request = preg_replace ('|[^a-zA-Zа-яА-Я]|siu', '', $request);
}

$list = isset ($_GET['list']) ? (int)$_GET['list'] : '';

$section = isset ($_GET['section']) ? trim ($_GET['section']) : '';

$sql = "
SELECT COUNT(*) as `count`
FROM `catalog`
WHERE (`keywords` LIKE '%" . mysql_real_escape_string ($request) . "%'
OR `title` LIKE '%" . mysql_real_escape_string ($request) . "%'
OR `info` LIKE '%" . mysql_real_escape_string ($request) . "%'
OR `url` LIKE '%" . mysql_real_escape_string ($request) . "%')";

if (!empty ($section))
{
$sql .= "AND `section` = " . mysql_real_escape_string ($section);
}

$query = mysql_query ($sql, $db);
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 28.3.2011, 18:46; Ответить: Mulder_hb
Сообщение #6


Да тут непаханное поле, сократить можно раз в 10...
К примеру,
[PHP]$request = preg_replace('|[^a-zA-Zа-яА-Я]|siu', '', $request);[/PHP]
Зачем перечислять дважды алфавит, если уже стоит регистронезависимый флаг 'i'? Мало того, используйте псевдо-классы для таких вещей:
[PHP]$request = preg_replace('/\W+/siu', '', $request);[/PHP]
Далее, это что за поток сознания:
[PHP] $request = $_GET['amiso'];
$request = rtrim($request);
$request = strip_tags($request);
$request = stripslashes($request);
$request = htmlspecialchars($request);
$request = str_replace("'","&quot;",$request);
$request = ereg_replace(" +"," ",$request);
$request = rtrim($request);
[/PHP]
Зачем дважды применять trim? ereg_replace() устаревшая функция. Применение здесь комплекса strip_tags()+stripslashes()+htmlspecialchars()+str_replace()+ereg_replace() вызывает весьма странные мысли. Что вы хотели этим сказать?
Далее
[PHP]if ($request!='' && strlen($request)>2)[/PHP]
Зачем дважды проверять на длину? Пустая строка - это строка, чья длина равна 0. Так зачем вы отдельно проверяете на 0 и на 2, если при любых раскладах 0 вам не подходит. Тут уже чисто логика, никакого пхп. Достаточно просто проверить на длину более 2-х.
Дальше читать не стал, но запросы в мускул нужно защищать.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Salikhoff_hb
Salikhoff_hb
Topic Starter сообщение 28.3.2011, 19:16; Ответить: Salikhoff_hb
Сообщение #7


[PHP]$request = preg_replace('/\W+/siu', '', $request);[/PHP] не работает с русскими буквами
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 28.3.2011, 19:28; Ответить: Mulder_hb
Сообщение #8


Хотя можно и продолжить.
[PHP]@$list = (int)$_GET['list']; [/PHP]
Во-первых, собака не там стоит. Во-вторых никогда в подобных случаях не подавляйте вывод. Подавлять вывод нужно при помощи соответствующих настроек и функций пхп (display_errors, error_reporting). Это здорово облегчит жизнь при дебаге.

[PHP]$counter = mysql_query("SELECT COUNT(*) FROM `catalog` WHERE ((`keywords` LIKE '%$request%') OR (`title` LIKE '%$request%') OR (`info` LIKE '%$request%') OR (`url` LIKE '%$request%')) AND `section`=".$_GET['section']."", $db); [/PHP]
Во-первых, эскейпингом данных и не пахнет. Во-вторых, весьма странный способ проверить все несвязанные между собой поля одной переменной. Тут уже вопрос проектирования бд.

[PHP]$counter = mysql_fetch_array($counter);
$counter = $counter[0];[/PHP]
А почему бы не сделать просто:
[PHP]$counter = mysql_result($counter, 0); [/PHP]

[PHP]$total = (($counter-1)/10)+1;
$total = intval($total); [/PHP]
Тут вообще на лицо не понимание того, как работает код. Запрос COUNT(*) в мускуле всегда возвратит число. Даже если каким-то невероятным образом в $counter окажется не число, арифметические операции внесут в $total число. Так зачем вы дополнительно пропускаете это число через intval?

[PHP]$list = intval($list);[/PHP]
Невнимательность? Зачем дважды преобразовывать к int? Объясню вашим же кодом:
[PHP]$list = (int)$_GET['list'];
// куча кода
$list = intval($list);[/PHP]

[PHP]if (empty($list) or $list < 0)
$list = 1; [/PHP]
Вы уже привели $list к числу. Там в любом случае будет только число. Поэтому проверка на пустоту (empty) то же самое, что и проверка на 0. И того ваш код преобразуется в
[PHP]if ($list == 0 or $list < 0)
$list = 1; [/PHP]
Сами догадаетесь, как правильно записывать подобное условие?
По поводу самого стиля оформления кода. Преобразовывайте переменные только тогда, когда будите их использовать, а не так как у вас: определение $list в начале кода, а первое его использование в середине.

[PHP]if (mysql_num_rows($result) > 0){[/PHP]
Такое ощущение, что либо вы это писали не сами, либо бездумно повыдерали из разных источников. Вы же уже сделали запрос COUNT(*) зачем опять считаете строки?
[PHP]if ($counter > 0) {[/PHP]

По поводу мантры с echo. Не используйте подряд несколько вызовов echo. Буферизируйте весь вывод в некую переменную $val, а потом сделайте один единственный вывод echo $val.

[PHP]while ($row=mysql_fetch_array($result)){
// куча кода
}
while ($row=mysql_fetch_array($result)){ [/PHP]
Зачем дважды парсите запрос? Учитесь делать все за один раз.

[PHP]}
else {
echo ("<strong class='error'>К сожалению по вашему запросу ничего не найдено...</strong>");
}
}
else {
echo ("<strong class='error'>Задан пустой поисковый запрос или строка поиска содержит менее 3 символов...</strong>");
}
}[/PHP]
Вот вы можете тут на форуме через месяц сходу сказать, к каким if относятся представленные else? Отсюда вывод: если это возможно, обработку ошибок нужно делать до рабочего кода, а не после.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 28.3.2011, 19:29; Ответить: Mulder_hb
Сообщение #9


(' post='107289 @ 28.3.2011, 22:16)
не работает с русскими буквами

Настраивать нужно уметь. Если лень, то либо не используйте i, либо не перечисляйте оба регистра.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 28.3.2011, 19:32; Ответить: Apay
Сообщение #10


(' post='107289 @ 28.3.2011, 22:16)
не работает с русскими буквами
правильно, в \W не входит кириллица, а еще всякие ероглифы и пр., надо просто указать диапазон
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Дайте советы по направлениям для заработка
38 Suagaring 4810 16.1.2024, 12:16
автор: Antarez
Открытая тема (нет новых ответов) Мультивертикальная партнерская сеть MyLead дает советы по продвижению
0 MyLead 1166 19.12.2022, 20:25
автор: MyLead
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыGAMBLING.pro - СРА-сеть для профи
97 Gamblingpro 38947 26.7.2022, 17:42
автор: Gamblingpro
Открытая тема (нет новых ответов) HomeWork - профи в монетизации студентов (18-24 года, Россия)
23 partner_hw 8635 5.4.2022, 17:23
автор: kuprum
Открытая тема (нет новых ответов) Качественный SEO-аудит Вашего сайта. Рекомендации, советы по сайту.
2 dimapwt 3516 29.11.2018, 5:51
автор: vitosbaltos


 



RSS Текстовая версия Сейчас: 16.4.2024, 12:07
Дизайн