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

Форум MySQL

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

 

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

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

тема: Структурный форум (продолжение)
 
 автор: cheops   (17.06.2006 в 16:31)   письмо автору
 
 

Это продолжение темы http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=19077

$idp я беру из адресной строки
$idp = $_GET['idp'];

А как вызываю — не знаю. Я эту функцию у вас на форуме нашел. А как ее надо вызывать?
Я думал, за это отвечает строка функции
catalogs($idp); 

Если это не так — то простите мою темноту и подскажите, как надо.

   
 
 автор: cheops   (17.06.2006 в 16:37)   письмо автору
 
   для: cheops   (17.06.2006 в 16:31)
 

Как формируется URL с параметром idp? При помощи какого кода? У вас будет только одна тема или будет их несколько?

>Если это не так — то простите мою темноту и подскажите, как надо.
Я вижу перед собой только кусок картины (замысла), не могу воспроизвести ситуацию на локальной машине, так как у меня нет полного исходного кода, поэтому мы вынуждены двигаться лишь наводящими вопросами и я не могу сразу предоставить нужный вам код (иначе бы я сразу бы так и сделал).

   
 
 автор: SS   (17.06.2006 в 19:56)   письмо автору
 
   для: cheops   (17.06.2006 в 16:37)
 

URL с параметром idp формируется с главной страницы ajhevf index.htm, содержащей ссылки на темы, т.е. он всегда передается с idp:

<a href=read.htm?idt=".$msg['idt']."&idp=".$msg['idp']."> ".$msg['theme']."</a>

А на странице read.htm, выводящей первое сообщение темы, под сообщением должна выводится ветка дерева, по которой уже можно перемещаться и активное сообщение долно выделяться другим цветом, чтобы было видно, где ты находишься.
Еще раз пример, как это примерно выглядит: http://www.set.ru/srs/board/read.cgi?user=181&board=1&type=tree&start=0&topic=370&from=0&message=1913

   
 
 автор: cheops   (17.06.2006 в 22:02)   письмо автору
 
   для: SS   (17.06.2006 в 19:56)
 

Я бы посоветовал бы следующи аглоритм: передавать три аргумента
catalogs($idt,$id_theme,$idp)
$idt - идентификатор темы
$id_theme - идентификатор сообщения, при первом вызове должно передавать первое сообщение данной темы, для которого все последующие сообщения являются потомками.
$idp - идентификатор сообщения который следует выделить
<?php
<?php 
$idp 
$_GET['idp']; 
$id_post $_GET['id_post'];
$idt $_GET['idt']; 
function 
catalogs($idp$id_post$idt

$result=mysql_query("SELECT * FROM posts WHERE  parent_post = $idp AND idt = $idt"); 
if(!
$result) exit(mysql_error()); 
    while(
$r=mysql_fetch_array($result)) 
    { 
        if(
$r['idp'] == $id_post$style "<span style='margin-left : ".$r['level']."px; color: #00FF00'> ".$r['theme'].""
        else 
$style "<span style='margin-left : ".$r['level']."px; color: #FFFFFF'> <a href=read.htm?idt=".$r['idt']."&idp=".$r['idp'].">".$r['theme']."</a>"
        echo 
"$style <font color='#808080'>— <b>".$r['author']."</b> — ".$r['time']." [to: ".$r['parent_post']."]</span></font>"
            
catalogs($r['idp']); 
    } 

catalogs(0); 

?>
?>

   
 
 автор: SS   (18.06.2006 в 02:17)   письмо автору
 
   для: cheops   (17.06.2006 в 22:02)
 

id_post переименовал в idp_theme — это главное сообщение темы, у которого нет родительского поста, т.е. parent_post = 0, соответственно, извлекаем этот параметр не из адресной строки, а из запроса. В общем, выглядит теперь так:

<?php
$sql 
"SELECT idp FROM posts WHERE idt = '$idt' AND parent_post = '0'";
list(
$idp_theme) = mysql_fetch_rowmysql_query($sql) ); 
$idp $_GET['idp']; 
$idt $_GET['idt']; 
function 
catalogs($idp$idp_theme$idt

$result=mysql_query("SELECT * FROM posts WHERE  parent_post = $idp AND idt = $idt"); 
if(!
$result) exit(mysql_error()); 
    while(
$r=mysql_fetch_array($result)) 
    { 
        if(
$r['idp'] == $idp_theme$style "<span style='margin-left : ".$r['level']."px; color: #00FF00'> ".$r['theme'].""
        else 
$style "<span style='margin-left : ".$r['level']."px; color: #FFFFFF'> <a href=read.htm?idt=".$r['idt']."&idp=".$r['idp'].">".$r['theme']."</a>"
        echo 
"$style <font color='#808080'>— <b>".$r['author']."</b> — ".$r['time']." [to: ".$r['parent_post']."]</span></font>"
            
catalogs($r['idp']); 
    } 

catalogs(0); 

?>


Однако выдает ошибку:

Warning: Missing argument 2 for catalogs(), called in read.php on line 118 and defined in read.php on line 106

Warning: Missing argument 3 for catalogs(), called in read.php on line 118 and defined in read.php on line 106
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

где:
line 106

function catalogs($idp, $idp_theme, $idt) 

line 118

catalogs(0); 

   
 
 автор: cheops   (18.06.2006 в 02:29)   письмо автору
 
   для: SS   (18.06.2006 в 02:17)
 

Вместо catalogs(0); следует осуществлять вызов
catalogs(0,$idp,$idt);

А саму функцию давайте перепишем так
function catalogs($idp, $idp_theme, $idt) 

  $result=mysql_query("SELECT * FROM posts WHERE  parent_post = $idp AND idt = $idt"); 
  if(!$result) exit(mysql_error()); 
  while($r=mysql_fetch_array($result)) 
  { 
        if($r['idp'] == $idp_theme) $style = "<span style='margin-left : ".$r['level']."px; color: #00FF00'> ".$r['theme'].""; 
        else $style = "<span style='margin-left : ".$r['level']."px; color: #FFFFFF'> <a href=read.htm?idt=".$r['idt']."&idp=".$r['idp'].">".$r['theme']."</a>"; 
        echo "$style <font color='#808080'>— <b>".$r['author']."</b> — ".$r['time']." [to: ".$r['parent_post']."]</span></font>"; 
            catalogs($r['idp'],$idp_theme, $idt); 
   } 

?>

   
 
 автор: SS   (18.06.2006 в 04:47)   письмо автору
 
   для: cheops   (18.06.2006 в 02:29)
 

Игорь, огромное спасибо! Очень Вам благодарен. Остаюсь постоянным посетителем вашего замечательного сайта.

   
 
 автор: hell_riser   (18.06.2006 в 18:21)   письмо автору
 
   для: cheops   (17.06.2006 в 16:31)
 

Вклинюсь в тему.
Помогите с логикой выборки и вывода сообщений т.е. у меня проблемы с выборкой и выводом ответа на ответ.
Вот структура таблицы:
id INT(7) PRIMARY KEY auto_increment,
f_id INT(2) NOT NULL,
parent INT(7) NOT NULL,
title VARCHAR(100) NULL,
children ENUM('y', 'n') NOT NULL DEFAULT'n',
author VARCHAR(30) NOT NULL,
post_date TIMESTAMP NOT NULL,
message TEXT NULL

   
 
 автор: cheops   (18.06.2006 в 22:19)   письмо автору
 
   для: hell_riser   (18.06.2006 в 18:21)
 

Давайте лучше в новую тему. Какого рода проблемы возникают? С SQL-запросом или с PHP-кодом?

   
Rambler's Top100
вверх

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