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

Форум PHP

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

 

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

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

тема: Проблема с модулем СТАТЬИ САЙТА
 
 автор: Andrei_IW   (11.10.2006 в 17:28)   письмо автору
 
 

Проблема с модулем СТАТЬИ САЙТА

Уважаемые редакторы. У меня к Вам вопрос по сайту, который идёт в месте с книгой PHP5. Вопрос по модулю Статьи сайта.

А именно, не выводяться $title, $description, $keywords.

При создании новой статьи, я заполняю в админ меню разделы: Описание, Название(title), Описание(description), Ключевые слова(keywords). Всё добавляется в базу на Ура! Проверяю при помощи phpMyAdmin разделы description, html_title, html_description, html_keywords, таблицы articles, всё нештяк. Добавилась как надо.

Далее открываю файл /article/index.php, и вижу часть кода, выводящие нужные значения,


  $query="SELECT * FROM articles WHERE id_article=".$_GET['id_article'];
  $res = mysql_query($query);
  if ($res && mysql_num_rows($res)>0)
  {
    $page = mysql_fetch_array($res);
    if ($page['html_title']!="") $title = $page['html_title'];
    $description = $page['html_description'];
    $keywords = $page['html_keywords'];  
    include "../util/top.php";


Однако значения не выводятся. Однако для проверки я поступил так. Немного изменил код:


$query="SELECT * FROM articles WHERE id_article=".$_GET['id_article'];
$res = mysql_query($query);
$page = mysql_fetch_array($res);
echo  "Название статьи: ".$page['html_title']."<br>";
echo  "Описание статьи: ".$page['html_description']."<br>";
 echo  "Ключевые слова: ".$page['html_keywords'].""; 


и вставил его перед include "art.php", что бы результаты выводились вначале статьи. И всё заработало. В верху сайта, перед началом статьи на экране появились нужные результаты. Попробовал перейти к другой статье, и там всё в порядке. Выводятся значения, которые динамически корректно меняются в зависимости от статьи. Проще говоря, тот же самый запрос, что и в самом верху файла в середине файла работает, а на своём месте, в начале файла, работать отказывается. Подскажите, с чем это может быть связвно?

   
 
 автор: slonik   (11.10.2006 в 22:09)   письмо автору
 
   для: Andrei_IW   (11.10.2006 в 17:28)
 

Ща ляпну, чтобы хоть как-то открыть тему :)

Процентов 70, что туплю, но не понимаю этого кода:

if ($page['html_title']!="") $title = $page['html_title']; 
    $description = $page['html_description']; 
    $keywords = $page['html_keywords'];   


Почему в if написано $page['html_title']!="" и почему после if нету открытия { и закрытия } ...

p.s. Что там за движок не знаю, поэтому могу ошибаться в каждой букве своего сообщения.

   
 
 автор: elenaki   (12.10.2006 в 10:35)   письмо автору
 
   для: slonik   (11.10.2006 в 22:09)
 

там идет проверка - если не пустое значение у $page['html_title'], то оно присваивается переменной $title. а скобки не нужны, если после проверки условия должен выполниться только один оператор. хотя, может быть ,есть смысл поставить все три оператора после условия в фигурные скобки.

   
 
 автор: Trianon   (12.10.2006 в 10:51)   письмо автору
 
   для: elenaki   (12.10.2006 в 10:35)
 

Либо сдвинуть оставшиеся два вровень с if, дабы не смущать тех, кто с этим кодом будет работать в будущем. В зависимости от того, какая логика требуется. Из приведеного фрагмента это понять трудно.

   
 
 автор: Andrei_IW   (13.10.2006 в 13:21)   письмо автору
 
   для: Trianon   (12.10.2006 в 10:51)
 

Привожу полный код


require_once("../admin/config.php");
$title="Статьи";

if(isset($_GET['id_article']))
{
  $query="SELECT * FROM articles WHERE id_article=".$_GET['id_article'];
  $res = mysql_query($query);

  if ($res && mysql_num_rows($res)>0)
    {
      $page = mysql_fetch_array($res);
      if ($page['html_title']!="") $title = $page['html_title'];
     $description = $page['html_description'];
      $keywords = $page['html_keywords'];  
      include "../util/top.php";
      echo "<p><a href=http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?id_page=".$page['id_ page'].">Все статьи из текущего раздела</a>";
    include "art.php"; 
  } 
}

   
 
 автор: Trianon   (13.10.2006 в 13:28)   письмо автору
 
   для: Andrei_IW   (13.10.2006 в 13:21)
 

И что Вас смущает?

if ($page['html_title']!="") $title = $page['html_title'];

если поле html_title, взятое из таблицы - не пустая строка, то присвоить его значение переменной $title. В противном случае оставить эту переменную нетронутой ( т.е. содержащей строку "Статьи").

Очевидно, для полей html_description и html_keywords такая замена не требуется.

   
 
 автор: Andrei_IW   (13.10.2006 в 18:31)   письмо автору
 
   для: Trianon   (13.10.2006 в 13:28)
 

А смущает вот что:

На родном месте(в начале файла) переменные title, description, keywords пустые, и туда не присваиваются значения из базы данных. В итоге на сайте тэги ключевых слов и описания остаются пустыми. Только почему???? Ведь тот же самый код, но в середине файла работает правильно.

   
 
 автор: Trianon   (14.10.2006 в 14:20)   письмо автору
 
   для: Andrei_IW   (13.10.2006 в 18:31)
 

а в таблице БД они точно есть?
Приведите дамп таблицы и скрипт, формирующий html. Это видимо ../util/top.php

   
 
 автор: Andrei_IW   (14.10.2006 в 18:09)   письмо автору
 
   для: Trianon   (14.10.2006 в 14:20)
 

Да, в базе данных информация содержится. Я ещё раз проверил это при помощи phpMyAdmin. К тому же, этот код прекрасно работает в середине файла. Я это писал в первом сообщении. Хочу его процитировать снова:

Однако для проверки я поступил так. Немного изменил код:

$query="SELECT * FROM articles WHERE id_article=".$_GET['id_article']; 
$res = mysql_query($query); 
$page = mysql_fetch_array($res); 
echo  "Название статьи: ".$page['html_title']."<br>"; 
echo  "Описание статьи: ".$page['html_description']."<br>"; 
echo  "Ключевые слова: ".$page['html_keywords']."";

и вставил его перед include "art.php", что бы результаты выводились вначале статьи. И всё заработало. В верху сайта, перед началом статьи на экране появились нужные результаты. Попробовал перейти к другой статье, и там всё в порядке. Выводятся значения, которые динамически корректно меняются в зависимости от статьи. Проще говоря, тот же самый запрос, что и в самом верху файла в середине файла работает, а на своём месте, в начале файла, работать отказывается.

Если бы в базе данных информации не было, то это я сразу бы увидел при помощи phpMyAdmin, и мой немного модернизированный скрипт не чего бы не выдал.

Теперь по поводу формирующего HTML кода. Да, за это отвечает файл ../util/top.php. Привожу его верхнюю часть кода.

  require_once "../admin/config.php";
  $config_php = "already_include";
  include "../counter/count.php";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta HTTP-EQUIV="Expires" CONTENT="0">
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
<meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<script language="javascript">
    function showpicture(image, title){
        window.open('../util/showpicture.php?image='+image+'&title='+title,'','Toolbar=0,Location=0,Directories=0,Status=0,Menubar=0,Scrollbars=0,Resizable=0,Width=650,Height=500,left=150, top=150');
    }
    
</script>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</script>
<title><?= $title ?></title>
<meta name="description" content='<?= $description ?>'>
<meta name="keywords" content='<?= $keywords ?>'>
<link rel="StyleSheet" type="text/css" href="../util/site.css">
</head>
<body leftmargin="0" rightmargin="0" bottommargin="0" topmargin="0">

Пробовал я убирать Java скрипт(красивое меню), но это не помогает.

   
 
 автор: Andrei_IW   (16.10.2006 в 10:33)   письмо автору
 
   для: Andrei_IW   (14.10.2006 в 18:09)
 

Вот из-за этой неразберихи я и обратился за Вашей помощью. Очень надеюсь на Ваш совет.

   
 
 автор: Andrei_IW   (19.10.2006 в 11:04)   письмо автору
 
   для: Andrei_IW   (16.10.2006 в 10:33)
 

Может дело в какой то функции? Подскажите пожалуйста.

   
Rambler's Top100
вверх

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