Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Два в одном, постраничная навигация и поиск отладить код
 
 автор: dedev   (29.01.2007 в 13:05)   письмо автору
 
 

Это единственный вариант который у меня заработал, думаю ошибок в коде более чем достаточно, но его работа меня более меня устраивает, главное что он работает в отличии от всех предыдущих моих попыток.

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

Надеюсь, Вы мне поможете

<form action="" method="GET">
<input type="text" name="zpr" size="50">
<input type="submit" value="&nbsp;&nbsp;поиск&nbsp;&nbsp;" 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 0$page3left " <a href=".$_SERVER['PHP_SELF']."?
zpr="
.$zpr."&radio=".$radio."&page=". ($page 3) .">". ($page 3) ."</a> | "
if(
$page 0$page2left " <a href=".$_SERVER['PHP_SELF']."?zpr=".$zpr."&radio=".$radio."&page=". ($page 2) .">". ($page 2) ."</a> | "
if(
$page 0$page1left " <a href=".$_SERVER['PHP_SELF']."?zpr=".$zpr."&radio=".$radio."&page=". ($page 1) .">". ($page 1) ."</a> | "
if(
$page <= $total$page3right " | <a href=".$_SERVER['PHP_SELF']."?
zpr="
.$zpr."&radio=".$radio."&page=". ($page 3) .">". ($page 3) ."</a>"
if(
$page <= $total$page2right " | <a href=".$_SERVER['PHP_SELF']."?
zpr="
.$zpr."&radio=".$radio."&page=". ($page 2) .">". ($page 2) ."</a>"
if(
$page <= $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 в 16:20)   письмо автору
 
   для: dedev   (29.01.2007 в 13:05)
 

Специалисты, подскажите не все ли так плохо в коде?

   
 
 автор: cheops   (30.01.2007 в 00:44)   письмо автору
 
   для: 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-инъекцию, но приведённая выше проверка исключит такую возможность вообще.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования