|
|
|
| Это единственный вариант который у меня заработал, думаю ошибок в коде более чем достаточно, но его работа меня более меня устраивает, главное что он работает в отличии от всех предыдущих моих попыток.
Я хотел бы попросить специалистов помочь оптимизировать код т.е. убрать без чего в коде можно обойтись, и если есть дыры в безопасности по возможности их закрыть.
Надеюсь, Вы мне поможете
<form action="" method="GET">
<input type="text" name="zpr" size="50">
<input type="submit" value=" поиск " name="goo"><br>
<input type="radio" name="radio" checked value="or">ИЛИ
<input type="radio" name="radio" value="and">И
</form>
<ul class="ul">
<?php
// Получаем данные из формы
$rad = @$_GET["radio"];
$zapros = @$_GET["zpr"];
// Удаляем символы. Проверка формы на непустой ввод. Удаляет пробелы. Разбиваем строку на слова. Формируем запросы
$zapros = preg_replace("|[^a-zа-яё0-9 ]+|i", "", $zapros);
if(strlen($zapros)<3)
{
echo("Введено недостаточное количество символов</ul>");
exit(include "../inc/footer.htm");
}
$zapros = trim($zapros);
$words = preg_split("|[\s]+|",$zapros);
foreach($words as $wrd)
{
$tmp[] = "title LIKE '%$wrd%'";
}
if(!empty($tmp))
{
$query = "SELECT * FROM metadata WHERE ".implode(" $rad ", $tmp);
}
// Открыть базу данных
$db = sqlite_open("sity.sdb");
// Определяем общее количество записей в таблице
$posts = sqlite_query($db, $query);
$num_rows = sqlite_num_rows($posts);
$num = 20;
@$page = $_GET['page'];
//print("<br>".$page."<br>");
//print($num_rows);
$total=$num_rows/$num;
$total=ceil($total);
//print($total);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$posts = sqlite_query($db, "$query ORDER BY id DESC LIMIT $start, $num");
print("<CENTER>по вашему запросу <font color='red'>".$zpr."</font><br> найдено страниц
<font size='-1'>".$num_rows."</font></CENTER><br>");
if (sqlite_num_rows($posts) == 0)
{
echo "Поиск не дал результатов";
exit(include "../inc/footer.htm");
}
else
{
// Выводим сообщения
while (@$arr = sqlite_fetch_array($posts))
{
echo("<li><a href=\"../".$arr['page'].".htm\">".$arr['title']."</a> ...</li>");
}
}
echo "</ul>";
//Теперь надо организовать навигацию. Формируем составляющие будущей навигации.
//Коды стрелки «в начало» и «назад» поместим в одну переменную, также поступим и со стрелками «в конец» и «вперед».
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = "<a href=".$_SERVER['PHP_SELF']."?
zpr=".$zpr."&radio=".$radio."&page=1>к началу</a> |
<a href=".$_SERVER['PHP_SELF']."?zpr=".$zpr."&radio=".$radio."&page=". ($page - 1) .">предыдущая</a> ";
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = " <a href=".$_SERVER['PHP_SELF']."?
zpr=".$zpr."&radio=".$radio."&page=". ($page + 1) .">следующая</a> |
<a href=".$_SERVER['PHP_SELF']."?zpr=".$zpr."&radio=".$radio."&page=" .$total. ">в конец</a>";
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 3 > 0) $page3left = " <a href=".$_SERVER['PHP_SELF']."?
zpr=".$zpr."&radio=".$radio."&page=". ($page - 3) .">". ($page - 3) ."</a> | ";
if($page - 2 > 0) $page2left = " <a href=".$_SERVER['PHP_SELF']."?zpr=".$zpr."&radio=".$radio."&page=". ($page - 2) .">". ($page - 2) ."</a> | ";
if($page - 1 > 0) $page1left = " <a href=".$_SERVER['PHP_SELF']."?zpr=".$zpr."&radio=".$radio."&page=". ($page - 1) .">". ($page - 1) ."</a> | ";
if($page + 3 <= $total) $page3right = " | <a href=".$_SERVER['PHP_SELF']."?
zpr=".$zpr."&radio=".$radio."&page=". ($page + 3) .">". ($page + 3) ."</a>";
if($page + 2 <= $total) $page2right = " | <a href=".$_SERVER['PHP_SELF']."?
zpr=".$zpr."&radio=".$radio."&page=". ($page + 2) .">". ($page + 2) ."</a>";
if($page + 1 <= $total) $page1right = " | <a href=".$_SERVER['PHP_SELF']."?
zpr=".$zpr."&radio=".$radio."&page=". ($page + 1) .">". ($page + 1) ."</a>";
// Вывод меню
@print("<table cellpadding='0' cellspacing='0' width='99%'><tr><td width='33%'>
<font size='-1'>".$pervpage."</font></td><td width='33%' align='center'><font size='-1'>".$page3left.$page2left.$page1left."<b>".$page."</b>".$page1right.$page2right.$page3right."
</font></td><td width='33%' align='right'><font size='-1'>".$nextpage."</font></td></tr></table>");
?>
|
| |
|
|
|
|
|
|
|
для: dedev
(29.01.2007 в 13:05)
| | Специалисты, подскажите не все ли так плохо в коде? | |
|
|
|
|
|
|
|
для: dedev
(29.01.2007 в 13:05)
| | Лучше от греха поставить проверку
<?php
$rad = @$_GET["radio"];
$zapros = @$_GET["zpr"];
if (!get_magic_quotes_gpc())
{
$rad = mysql_escape_string($rad);
$zapros = mysql_escape_string($zapros);
}
?>
|
Злоумышленику и без этого будет сложно провести SQL-инъекцию, но приведённая выше проверка исключит такую возможность вообще. | |
|
|
|