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

Форум MySQL

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

 

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

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

тема: Объясните что это означает (mysql_fetch_array)?
 
 автор: Dizels   (27.04.2009 в 14:02)   письмо автору
 
 

if(trim($_GET['pos'])=="")
{
// выбираем статьи именно этого раздела
$cnt = mysql_query("select count(*) from dostoprim_articles where id_page=".$_GET['id_page'].";");
if($cnt)
{
$count = mysql_fetch_array($cnt);
if($count['count(*)'] == "") $pos = 1;
else $pos = $count['count(*)'] + 5;
}

else
{
echo "<p><b>Error: ".mysql_error()."</b><p>";
puterror("Ошибка при обращении к блоку статей");
}
}

Не понимаю то, что выделено жирным, объясните, пожалуйста, логику. А то из-за этого не могу дописать скрипт, чтобы работал как мне надо.

  Ответить  
 
 автор: Trianon   (27.04.2009 в 14:06)   письмо автору
 
   для: Dizels   (27.04.2009 в 14:02)
 

присвоить переменной единицу, если результат запроса нулевой.
Иначе присвоить значение на 5 больше результата.
Что имел в виду автор, можно только гадать.

  Ответить  
 
 автор: Dizels   (27.04.2009 в 14:21)   письмо автору
 
   для: Trianon   (27.04.2009 в 14:06)
 

Ок, вот таблица:
CREATE TABLE `dostoprim_articles` (
  `id_article` int(10) unsigned NOT NULL auto_increment,
  `name` tinytext NOT NULL,
  `pos` mediumint(9) NOT NULL default '0',
  `hide` enum('show','hide') NOT NULL default 'show',
  `id_page` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id_article`),
  KEY `id_page` (`id_page`)
) ENGINE=MyISAM;


Вот дамп БД которая получается:
INSERT INTO `dostoprim_articles` VALUES (1, 'Статья о золотых рыбках',5, 'show', 1);
INSERT INTO `dostoprim_articles` VALUES (11, 'Статья о черных кошках"',6, 'show', 3);
INSERT INTO `dostoprim_articles` VALUES (10, 'Статья о рыжих кошках', 5, 'show', 3);
INSERT INTO `dostoprim_articles` VALUES (4, 'Статья о барбусах', 8, 'show', 1);
INSERT INTO `dostoprim_articles` VALUES (5, 'Статья о пони, 5, 'show', 2);
INSERT INTO `dostoprim_articles` VALUES (6, 'Статья о беговых лошадях', 6, 'show', 2);
INSERT INTO `dostoprim_articles` VALUES (7, 'Статья о лошадях', 7, 'show', 2);


Тогда вообще как-то не понятно, каким образом присваивается значение pos.

Вот смотрим, к примеру я хочу добавить еще одну статью про кошек, нажимаю соответствующую ссылку, вместе с ней передается параметр id_page=3. Следовательно, согласно коду приведенному выше выходит, что параметр pos должен увеличиваться на 5, а он увеличивается на 1.

Прошу разъяснить мне этот алгоритм.
Пытаюсь его понять, чтобы сделать скрипты по смещению статьи вверх\вниз.

Сами скрипты взяты из книги: "PHP 5 Практика создания WEB-сайтов 1-издание"

  Ответить  
 
 автор: Trianon   (27.04.2009 в 15:04)   письмо автору
 
   для: Dizels   (27.04.2009 в 14:21)
 

Ошибка, вероятно.

  Ответить  
 
 автор: Dizels   (27.04.2009 в 15:12)   письмо автору
 
   для: Trianon   (27.04.2009 в 15:04)
 

Да нет, судя по всему - все правильно, так как значения то присваиваются верные. Просто я логику того как они присваиваются понять не могу. Может еще что нужно выложить?

Скрипты рабочие это точно.

  Ответить  
 
 автор: Trianon   (27.04.2009 в 15:14)   письмо автору
 
   для: Dizels   (27.04.2009 в 15:12)
 

во всяком случае, по этому фрагменту что-либо конкретное определить трудно.

  Ответить  
 
 автор: Dizels   (27.04.2009 в 15:23)   письмо автору
 
   для: Trianon   (27.04.2009 в 15:14)
 

Ок, тогда попробую дать больше инфы.
В админке нажимаю на ссылку добавить статью. Ссылка имеет вид:
http://domen.ru/admin/dostoprim_articles/addartform.php?id_page=3

Файл addartform.php:
<?
  
// Устанавливаем соединение с базой данных
  
require_once("../config.php");
  
// Устанавливаем значения переменных по умолчанию
  
if(!isset($action)) $action "addart.php";
  if(!isset(
$button)) $button "Добавить";
  if(!isset(
$title)) $title "Добавление новой статьи";
  
// Если значение $tmp неустановленно, помечаем вновь добавляемую статью
  // как доступную для просмотра (не скрытую).
  
if(!isset($tmp)) $tmp "checked";
  if(!isset(
$_GET['id_page']))
  {
    echo 
"Страница не выбрана";
    exit();
  }
  else
  {
      if (
$_GET['id_page'] ==""$_GET['id_page'] = 0;
    if(
trim($_GET['pos'])=="")
    {
        
// выбираем статьи именно этого раздела
      
$cnt mysql_query("select count(*) from dostoprim_articles where id_page=".$_GET['id_page'].";");
      if(
$cnt)
      {
        
$count mysql_fetch_array($cnt);
        if(
$count['count(*)'] == ""$pos 1;
        else 
$pos $count['count(*)'] + 5;
      }
      else
      {
        echo 
"<p><b>Error: ".mysql_error()."</b><p>";
        
puterror("Ошибка при обращении к блоку статей");
      }
    }
    else 
$pos=$_GET['pos'];
  }

?>
<p><a href="javascript: history.back()">Назад</a>
<form action=<?php echo $action?> method=post>
  <table>
    <tr>
        <td width="110"><p class=zag2>Название</td>
        <td><input size=80 class=input type="text" name="name" value="<?= $name ?>"></td>
    </tr>
    <tr>
        <td><p class=zag2>Отображать</td>
        <td><input type="checkbox" name="hide" <?= $tmp ?>></td>
    </tr>
    <tr>
        <td></td>
        <td><input class="button" type="submit" value="<?= $button ?>"></td>
    </tr>
  <input type=hidden name=pos size=40 maxlength=10 value=<?= $pos ?>>
  <input type="hidden" name="id_page" value="<?= $_GET['id_page'?>">
  <input type="hidden" name="id_article" value="<?= $id_article ?>">
</form>

Файл addart.php:
<?php
  
// Устанавливаем соединение с базой данных
  
require_once("../config.php");
  
// Проверяем, заполнено ли поле name формы
  
if(empty($_POST['name'])) links($_POST['id_page'], "Введите название статьи.");
  
// Определяем, скрыта статья или нет
  
if($_POST['hide'] == "on"$showhide "show";
  else 
$showhide "hide";
  
// Заменяем одинарные кавычки обратными
  
$name str_replace("'","`",$_POST['name']);
   
$pos $_POST['pos'];
  
// Формируем и осуществляем SQL-запрос на добавление статьи
  
$query "INSERT INTO dostoprim_articles VALUES (
            NULL,
            '
$name',
            
$pos,
            '
$showhide',".
            
$_POST['id_page'].")";
  if(
mysql_query($query))
  {
    
// Выясняем первичный ключ id_article сгенерированный для статьи
    // механизмом AUTO_ICREMENT, чтобы добавить заголовок в таблицу
    // paragraphes
    
$id_article mysql_insert_id();
    
// Автоматически добавляем заголовок в статью, совпадающий с
    // названием статьи
    
$query "INSERT INTO dostoprim_paragraphes
              VALUES (NULL,
                      'title',
                      '
$name',
                      '',
                      '',
                      '',
                      1,
                      0,
                      'show',
                      
$id_article)";
    if(
mysql_query($query))
    {
      echo 
"<HTML><HEAD>
            <META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php?id_page="
.$_POST['id_page']."'>
            </HEAD></HTML>"
;
    } else 
puterror("Ошибка при обращении к блоку статей");
  }
  else 
puterror("Ошибка при обращении к блоку статей");
  
// Функция вывода ошибки и ссылок возврата в окно браузера
  
function links($id_page,$msg)
  {
    echo 
"<p>".$msg."</p>";
    echo 
"<p><a href=# onClick='history.back()'>Вернуться к правке параграфа</a></p>";
    echo 
"<p><a href=index.php?id_page=$id_page>Администрирование статей</a></p>";
    exit();
  }
?>

Ну вот собственно выложил все. Выше можно посмотреть структуру таблицы из БД в которую идет запись новой статьи и собственно дамп БД

  Ответить  
 
 автор: Trianon   (27.04.2009 в 15:31)   письмо автору
 
   для: Dizels   (27.04.2009 в 15:23)
 

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

  Ответить  
 
 автор: Dizels   (27.04.2009 в 15:35)   письмо автору
 
   для: Trianon   (27.04.2009 в 15:31)
 

Вы видимо не поняли мой вопрос, посмотрите внимательно на дамп БД как видите, там pos к примеру статей про кошек идут по порядку, т.е. 5,6,7 и т.д. вот я не могу понять, где это в коде прописано.

Ладно, раз работаю как надо, то не буду им(скриптам) мешать))

  Ответить  
 
 автор: Trianon   (27.04.2009 в 17:09)   письмо автору
 
   для: Dizels   (27.04.2009 в 15:35)
 

Идут.
Это означает лишь то, что на БД воздействовал не этот (или не только этот) скрипт.
Кстати, я несколько неверно описал поведение.
Дело в том, что mysql_fetch_array в любом случае возвращает массив строк, а не чисел.
А значит, результат count(*) никогда не будет равен пустой строке.

Вообще же чтобы понять, что происходит в этом фрагменте, можно вывести весь массив через
$count = mysql_fetch_array($cnt);
print_r($count);
if($count['count(*)'] == "") ...


В любом случае, этот код грязен, и опираться на него в реальном проекте я бы не стал.

  Ответить  
Rambler's Top100
вверх

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