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

Форум MySQL

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

 

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

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

тема: <title>Заголовок</title> для раздела: проблемы с созданием...
 
 автор: Радосвет   (20.04.2006 в 17:53)   письмо автору
 
 

CMS из книги "PHP5: Практика создания..."

В базе, в таблице с разделами решил добавить поле title_html , как у статей, и в админке сделать возможность добавлять не только название раздела, но и заголовок title, что, на мой взгляд, весьма удобно!

Ну вроде просто это сделать, но новичку иногда бывает сложно разобраться в просытх ошибках...

Вот такая форма у меня для добавления РАЗДЕЛА:


<form action=<?php echo $_GET['action']; ?> method=post>
  <table>
    <tr>
        <td width="110"><p class=zag2>&#205;&#224;&#231;&#226;&#224;&#237;&#232;&#229;</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>&#199;&#224;&#227;&#238;&#235;&#238;&#226;&#238;&#234; (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 ...

   
 
 автор: cheops   (20.04.2006 в 23:31)   письмо автору
 
   для: Радосвет   (20.04.2006 в 17:53)
 

Исправьте строку
<?php
 
else puterror("Ошибка при обращении к блоку статей");
?>

следующим образом
<?php
 
else puterror("Ошибка при обращении к блоку статей ".mysql_error());
?>

Как теперь выглядит сообщение об ошибке?

PS Вопросы, посвящённые MySQL и взаимодействию MySQL с PHP лучше сразу размещать в разделе MySQL.

   
 
 автор: Радосвет   (21.04.2006 в 03:50)   письмо автору
 
   для: cheops   (20.04.2006 в 23:31)
 

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

Ошибка при обращении к блоку статей Incorrect integer value: 'Заголовок страницы' for column 'id_site' at row 1

   
 
 автор: cheops   (21.04.2006 в 09:44)   письмо автору
 
   для: Радосвет   (21.04.2006 в 03:50)
 

Хм... а если так
<?php 
else puterror("Ошибка при обращении к блоку статей ".mysql_error()." - ".$query); 
?>

Что выводит?

   
 
 автор: Радосвет   (21.04.2006 в 10:12)   письмо автору
 
   для: cheops   (21.04.2006 в 09:44)
 

Да уж.... А теперь выводит:

Ошибка при обращении к блоку статей Incorrect integer value: 'Заголовок раздела' for column 'id_site' at row 1 - INSERT INTO artpage VALUES ( NULL, 'Название раздела', 'Заголовок раздела', 0)

Похоже, я неправаильно обращаюсь к таблице?

   
 
 автор: cheops   (21.04.2006 в 10:25)   письмо автору
 
   для: Радосвет   (21.04.2006 в 10:12)
 

Посмотрите куда вы добавили новое поле - похоже, что в конец таблицы, тогда запрос должен выглядеть
<?php
 $query 
"INSERT INTO artpage VALUES ( 
            NULL, 
            '
$name', 
            0,
            '
$title_html')";
?>

   
 
 автор: Радосвет   (21.04.2006 в 13:37)   письмо автору
 
   для: cheops   (21.04.2006 в 10:25)
 

Огромное спасибо! Как-то упустил этот момент... Осталось только написать запрос к этому параметру и функцию его вывода... :)

   
 
 автор: Радосвет   (24.04.2006 в 16:06)   письмо автору
 
   для: Радосвет   (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 ?
Я перепробовал всё что мог, не получается...

   
 
 автор: cheops   (24.04.2006 в 22:45)   письмо автору
 
   для: Радосвет   (24.04.2006 в 16:06)
 

Запрос в этом случае должен выглядеть следующим образом
<?php
  $query 
"SELECT title_html FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1";
?>

   
 
 автор: Радосвет   (25.04.2006 в 00:28)   письмо автору
 
   для: 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";
?>

Мои пробы и манипуляции не увенчались успехом, при открытии списка разделов в заголовке НИЧЕГО не выводится....
И ещё, а вообще, грамотно ли я написал код выше? Два запроса всё-таки, громоздко...

   
 
 автор: cheops   (25.04.2006 в 10:14)   письмо автору
 
   для: Радосвет   (25.04.2006 в 00:28)
 

Лучше заменить !isset() на empty()
<?php 
  
if(empty($title)) $title "$ttl_name"
?>

   
Rambler's Top100
вверх

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