|
|
|
| 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("Ошибка при обращении к блоку статей");
}
}
Не понимаю то, что выделено жирным, объясните, пожалуйста, логику. А то из-за этого не могу дописать скрипт, чтобы работал как мне надо. | |
|
|
|
|
|
|
|
для: Dizels
(27.04.2009 в 14:02)
| | присвоить переменной единицу, если результат запроса нулевой.
Иначе присвоить значение на 5 больше результата.
Что имел в виду автор, можно только гадать. | |
|
|
|
|
|
|
|
для: 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-издание" | |
|
|
|
|
|
|
|
для: Dizels
(27.04.2009 в 14:21)
| | Ошибка, вероятно. | |
|
|
|
|
|
|
|
для: Trianon
(27.04.2009 в 15:04)
| | Да нет, судя по всему - все правильно, так как значения то присваиваются верные. Просто я логику того как они присваиваются понять не могу. Может еще что нужно выложить?
Скрипты рабочие это точно. | |
|
|
|
|
|
|
|
для: Dizels
(27.04.2009 в 15:12)
| | во всяком случае, по этому фрагменту что-либо конкретное определить трудно. | |
|
|
|
|
|
|
|
для: 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();
}
?>
|
Ну вот собственно выложил все. Выше можно посмотреть структуру таблицы из БД в которую идет запись новой статьи и собственно дамп БД | |
|
|
|
|
|
|
|
для: Dizels
(27.04.2009 в 15:23)
| | Возможно, так просто резервируется пространство позиций для четырех возможных добавлений в середину. | |
|
|
|
|
|
|
|
для: Trianon
(27.04.2009 в 15:31)
| | Вы видимо не поняли мой вопрос, посмотрите внимательно на дамп БД как видите, там pos к примеру статей про кошек идут по порядку, т.е. 5,6,7 и т.д. вот я не могу понять, где это в коде прописано.
Ладно, раз работаю как надо, то не буду им(скриптам) мешать)) | |
|
|
|
|
|
|
|
для: Dizels
(27.04.2009 в 15:35)
| | Идут.
Это означает лишь то, что на БД воздействовал не этот (или не только этот) скрипт.
Кстати, я несколько неверно описал поведение.
Дело в том, что mysql_fetch_array в любом случае возвращает массив строк, а не чисел.
А значит, результат count(*) никогда не будет равен пустой строке.
Вообще же чтобы понять, что происходит в этом фрагменте, можно вывести весь массив через
$count = mysql_fetch_array($cnt);
print_r($count);
if($count['count(*)'] == "") ...
|
В любом случае, этот код грязен, и опираться на него в реальном проекте я бы не стал. | |
|
|
|
|