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

Форум PHP

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

 

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

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

тема: Вывод подкатегорий, подскажите метод порадикальней?
 
 автор: Usta   (23.03.2008 в 05:48)   письмо автору
 
 

1) Подскажите как можно этот код сжать, или тут идет нормальный запрос от БД? В принципе грузит он не так уж и медленно, но на локальном хосте скорость одна, а в инете будит другая.

    <?
  // Выводим группы категорий
  $query = "SELECT id_artpage,name FROM artpage WHERE hide = 'show' ";
  $ctg = mysql_query($query);
  if (!$ctg) puterror("Ошибка при обращении к Выводом меню");
  if(mysql_num_rows($ctg)>0)
  {
    while($catig = mysql_fetch_array($ctg))
    {
      echo "\n<div class='doljn' id='sot'><a href=index.php?id_page=".$catig['id_artpage'].">".$catig['name']."</a></div>\n";
      ////// ВЫВОДИМ ПОДМЕНЮ 
      if ($_GET['id_page'] == $catig['id_artpage']) 
         { 
  $query1 = "SELECT id_article,name FROM articles
            WHERE id_page=".$_GET['id_page']."
            AND hide = 'show' ";
  $ctg1 = mysql_query($query1);
//  if( mysql_num_rows($ctg) >0 )
  {
    while($cat = mysql_fetch_array($ctg1))
    { 
      echo "\t<div class='pid'><a href=index.php?id_page=".$_GET['id_page']."&id_article=".$cat['id_article'].">".$cat['name']."</a></div>\n ";
    } // Конец цикла while
  } // Конец if(mysql_num_rows($ctg)>0)
         } 
      //////////////////////////
      // КОНЕЦ ВЫЫОДА ПОДМЕНЮ
    }
  }
?>

   
 
 автор: Atheist   (23.03.2008 в 11:26)   письмо автору
 
   для: Usta   (23.03.2008 в 05:48)
 

> if(mysql_num_rows($ctg)>0)
Эта проверка тут не нужна.

> $catig = mysql_fetch_array($ctg)
Используй mysql_fetch_assoc.

> "SELECT id_article,name FROM articles WHERE id_page=".$_GET['id_page']." AND hide = 'show' "
Уязвимость (попробуй найти сам).

> <a href=index.php?id_page=".$_GET['id_page']."
Другая уязвимость (попробуй найти сам).

В целом, стоит еще посмотреть везде ли стоят индексы, где надо. А так больше особо в скорости не выиграешь. Если только заменить два запроса на один многотабличный. Но не уверен, что скорость от этого как-то заметно изменится.

[поправлено модератором]

   
 
 автор: Usta   (24.03.2008 в 00:29)   письмо автору
 
   для: Atheist   (23.03.2008 в 11:26)
 

Спасибо за mysql_fetch_assoc() почитал в книжке, это проще.

А что касается:
>> "SELECT id_article,name FROM articles WHERE id_page=".$_GET['id_page']." AND hide = 'show' "
>Уязвимость (попробуй найти сам).
>
>> <a href=index.php?id_page=".$_GET['id_page']."
>Другая уязвимость (попробуй найти сам).

Тут наверное нужно написать

if(isset($_GET['id_page'])) $page = $_GET['id_page'];  
if (!preg_match("|^[\d]+$|", $id_page))   { exit ("<p>Неверный формат запроса! Проверьте URL!");   }

--- ---
 WHERE id_page=$page AND hide = 'show'

-----
и тоже самое <a href=index.php?id_page=$id_page;

   
 
 автор: cree   (24.03.2008 в 23:20)   письмо автору
 
   для: Usta   (24.03.2008 в 00:29)
 

Вот зачем использовать для приведения полученной переменной к числу череж ж..пу (прошу прощения), то бишь через регулярки?
лучше уж так:

$_GET['id_page'] = empty($_GET['id_page']) ? 0 : (int) $_GET['id_page'];

или, кому данный пример сложен:

$_GET['id_page'] = (int) @$_GET['id_page'];

   
 
 автор: sparhok13   (01.07.2008 в 10:38)   письмо автору
 
   для: cree   (24.03.2008 в 23:20)
 

А какой запрос нужно писать что-бы контент выводился так как нужно ??

   
 
 автор: mihdan   (01.07.2008 в 11:00)   письмо автору
 
   для: cree   (24.03.2008 в 23:20)
 

Извините, но вы неправы:

<?
$str = 123456789789;
echo (int)$str;
?>


Что выводит?