|
|
|
| CMS из книги "PHP5: Практика создания..."
В базе, в таблице с разделами решил добавить поле title_html , как у статей, и в админке сделать возможность добавлять не только название раздела, но и заголовок title, что, на мой взгляд, весьма удобно!
Ну вроде просто это сделать, но новичку иногда бывает сложно разобраться в просытх ошибках...
Вот такая форма у меня для добавления РАЗДЕЛА:
<form action=<?php echo $_GET['action']; ?> method=post>
<table>
<tr>
<td width="110"><p class=zag2>Íàçâàíèå</td>
<td><input class=input type="text" name="name" size="40" maxlength="140" value="<?php echo $_GET['name']; ?>"></td></tr><tr>
<td width="110"><p class=zag2>Çàãîëîâîê (title)</td>
<td><input class=input type="text" name="title_html" size="40" maxlength="140" value="<?= $title_html ?>"></td>
</tr>
<tr>
<td></td>
<td><input class=button type="submit" value=<?php echo $_GET['button']; ?>></td>
</tr>
</table>
</form>
|
В обработчике следующее:
<?php
// Проверяем, заполнено ли поле name
if(empty($_POST['name'])) links("Введите название раздела.");
// Заменяем одинарные кавычки на обратные
$name = str_replace("'","'",$_POST['name']);
$title_html = str_replace("'","'",$_POST['title_html']);
// Формируем SQL-запрос на добавление нового раздела
$query = "INSERT INTO artpage VALUES (
NULL,
'$name',
'$title_html',
0)";
if(mysql_query($query))
{
// В случае успешного добавления переходим на главную страницу
// системы администрирования
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
</HEAD></HTML>";
}
else puterror("Ошибка при обращении к блоку статей");
// Функция вывода ошибки в окно браузера
function links($msg)
{
echo "<p>".$msg."</p>";
echo "<p><a href=# onClick='history.back()'>Вернуться к правке раздела</a></p>";
echo "<p><a href=index.php>Администрирование статей</a></p>";
exit();
}
?>
|
При создании раздела ошибка и текст: Ошибка при обращении к блоку статей...
Добавлю, что вручную создал поле title_html в таблице artpage ... | |
|
|
|
|
|
|
|
для: Радосвет
(20.04.2006 в 17:53)
| | Исправьте строку
<?php
else puterror("Ошибка при обращении к блоку статей");
?>
|
следующим образом
<?php
else puterror("Ошибка при обращении к блоку статей ".mysql_error());
?>
|
Как теперь выглядит сообщение об ошибке?
PS Вопросы, посвящённые MySQL и взаимодействию MySQL с PHP лучше сразу размещать в разделе MySQL. | |
|
|
|
|
|
|
|
для: cheops
(20.04.2006 в 23:31)
| | Извиняюсь, буду в след. раз внимательнее при создании темы...
Вот что мне выдало на этот раз:
Ошибка при обращении к блоку статей Incorrect integer value: 'Заголовок страницы' for column 'id_site' at row 1 | |
|
|
|
|
|
|
|
для: Радосвет
(21.04.2006 в 03:50)
| | Хм... а если так
<?php
else puterror("Ошибка при обращении к блоку статей ".mysql_error()." - ".$query);
?>
|
Что выводит? | |
|
|
|
|
|
|
|
для: cheops
(21.04.2006 в 09:44)
| | Да уж.... А теперь выводит:
Ошибка при обращении к блоку статей Incorrect integer value: 'Заголовок раздела' for column 'id_site' at row 1 - INSERT INTO artpage VALUES ( NULL, 'Название раздела', 'Заголовок раздела', 0)
Похоже, я неправаильно обращаюсь к таблице? | |
|
|
|
|
|
|
|
для: Радосвет
(21.04.2006 в 10:12)
| | Посмотрите куда вы добавили новое поле - похоже, что в конец таблицы, тогда запрос должен выглядеть
<?php
$query = "INSERT INTO artpage VALUES (
NULL,
'$name',
0,
'$title_html')";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(21.04.2006 в 10:25)
| | Огромное спасибо! Как-то упустил этот момент... Осталось только написать запрос к этому параметру и функцию его вывода... :) | |
|
|
|
|
|
|
|
для: Радосвет
(21.04.2006 в 13:37)
| | Наконец появилось время с этим разобраться, но я снова в ступоре...
Не пойму, как лучше написать эту функцию с выводом в <title></title> название раздела...
У меня файл ./art/index.php , в котором функция, выводящая либо список разделов, либо статью, если она в одна в разделе, либо список статей и т.д....
В начале файла у меня такой код:
<?php
// Делаем запрос на название раздела в заголовке и присваиваем значение результата переменной
if(!empty($_GET['id_page']))
{
if(!preg_match("|^[\d]+$|",$_GET['id_page'])) exit("Недопустимый формат URL");
$query = "SELECT name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1";
$pag = mysql_query($query);
if(!$pag) exit("Ошибка при обращении к таблице разделов");
[b]$title = mysql_result($pag,0);[/b]
}
// Если значение переменной не присвоено, присваиваем следующее имя заголовка
[b]if(!isset($title)) $title = "Список разделов";
$title="$title";[/b]
?>
|
Жирным я выделил, как я обозначил переменную... Она зависит от ИМЕНИ раздела...
В таблице я создал новое поле title_html, как мне сделать запрос и правильно присвоить значение переменной, чтобы вместо name раздела был title_html ?
Я перепробовал всё что мог, не получается... | |
|
|
|
|
|
|
|
для: Радосвет
(24.04.2006 в 16:06)
| | Запрос в этом случае должен выглядеть следующим образом
<?php
$query = "SELECT title_html FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(24.04.2006 в 22:45)
| | Спасибо! Удивительно, что я не догадался (или невнимателен)...
Я сделал так:
<?php
// Делаем запрос на название раздела в заголовке и присваиваем значение результата переменной
if(!empty($_GET['id_page']))
{
if(!preg_match("|^[\d]+$|",$_GET['id_page'])) exit("Недопустимый формат URL");
$query = "SELECT title_html FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1";
$query2 = "SELECT name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1";
$pag = mysql_query($query);
$pag_name = mysql_query($query2);
if(!$pag) exit("Ошибка при обращении к таблице разделов");
$title = mysql_result($pag,0);
$ttl_name = mysql_result($pag_name,0);
}
// Если значение переменной не присвоено, присваиваем следующее имя заголовка
if(!isset($title)) $title = "$ttl_name";
$title="$title";
?>
|
Единственное не знаю как сделать, чтобы при id=0 (список разделов) в заголовке выводилось "Список разделов"...
Как видно из моего кода, я заменил строку
<?php
if(!isset($title)) $title = "Список разделов";
?>
|
на строку
<?php
if(!isset($title)) $title = "$ttl_name";
?>
|
Мои пробы и манипуляции не увенчались успехом, при открытии списка разделов в заголовке НИЧЕГО не выводится....
И ещё, а вообще, грамотно ли я написал код выше? Два запроса всё-таки, громоздко... | |
|
|
|
|
|
|
|
для: Радосвет
(25.04.2006 в 00:28)
| | Лучше заменить !isset() на empty()
<?php
if(empty($title)) $title = "$ttl_name";
?>
|
| |
|
|
|