|
|
|
| Разобрал по косточкам ваш utils.php по части вывода структурного форума, но у меня почему-то ничего не выводится. Подскажите, в чем проблема?
<?php
$idt = $_GET['idt'];
$idp = $_GET['idp'];
// Функция вывода поста на страницу
function post_down($idp,
$idt,
$theme)
{
function putpost($idp,$idt,$theme)
{
// структурный форум
// Выводим сообщение с id_post == $id_post
$query = "SELECT * FROM posts
WHERE idp = $idp";
$psts = mysql_query($query);
if ($psts)
{
$posts = mysql_fetch_array($psts);
post_down($idp,
$idt,
$theme);
// Выводим подчинённые сообщения
$query = "SELECT * FROM posts
WHERE parent_post = $idp
ORDER BY idp";
$psts = mysql_query($query);
if ($psts)
{
$num_rows=mysql_num_rows($psts);
while($posts = mysql_fetch_array($psts))
{
// Рекурсивно вызываем функцию putpost для обработки подчинённых постов
putpost($posts['idp'],
$idt);
}
} else puterror("Ошибка при выборке сообщений темы...1");
}
else puterror("Ошибка при выборке сообщений темы...");
}
}
?>
|
| |
|
|
|
|
|
|
|
для: SS
(11.06.2006 в 22:48)
| | Уберите определение
<?php
function putpost($idp,$idt,$theme)
{
?>
|
Оно не позволяет выполнятся коду и по сути уже является лишним. | |
|
|
|
|
|
|
|
для: cheops
(12.06.2006 в 00:16)
| | Спасибо.
Подскажите, как сделать сравнение для такой функции?
Задача: если $r['idp'] = $idp, то тему нужно выделить другим цветом.
<?php
$idp = $_GET['idp']; // id_post
function catalogs($idp)
{
$result=mysql_query("SELECT * FROM posts WHERE parent_post = $idp");
while($r=mysql_fetch_array($result))
{
echo "<span style='margin-left : ".$r['level']."px;'> ".$r['theme']."</span><br>";
catalogs($r['idp']);
}
}
catalogs(0);
?>
|
| |
|
|
|
|
|
|
|
для: SS
(12.06.2006 в 01:59)
| | Для этого обычно поступают следующим образом
<?php
$idp = $_GET['idp']; // id_post
function catalogs($idp)
{
$result=mysql_query("SELECT * FROM posts WHERE parent_post = $idp");
while($r=mysql_fetch_array($result))
{
if($r['idp'] == $idp) $style = "'margin-left : ".$r['level']."px; color : red'";
else $style = "'margin-left : ".$r['level']."px;'";
echo "<span style=$style> ".$r['theme']."</span><br>";
catalogs($r['idp']);
}
}
catalogs(0);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(12.06.2006 в 10:44)
| | Почему-то первое условие не срабатывает, во всех случаях только второе.
И еще вопрос: как поставить второе условие на выборку из таблицы? Таким образом не получается:
$result=mysql_query("SELECT * FROM posts WHERE parent_post = $idp AND idt = $idt");
|
| |
|
|
|
|
|
|
|
для: SS
(12.06.2006 в 11:28)
| | 1) Хм... выводите значения r['idp'] и $idp в цикле, чтобы выяснить, что не так
<?php
echo r['idp']." - ".$idp."<br>";
?>
|
Есть ли среди них совпадающие пары?
2) А в чём выражается не работа - возникает ошибка или не выводятся нужные записи? Вроде на первый взгляд всё правильно. | |
|
|
|
|
|
|
|
для: cheops
(12.06.2006 в 21:38)
| | Что-то я ничего не понимаю:
r['idp'] = $idp = ($_GET['idp']), — нормально, а вот
".$idp." получается равным $parent_post
2) Выдает сообщение: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in... | |
|
|
|
|
|
|
|
для: SS
(13.06.2006 в 00:57)
| | 2) Поставьте проверку
<?php
$result=mysql_query("SELECT * FROM posts WHERE parent_post = $idp")
if(!$result) exit(mysql_error());
?>
|
Что пишет? | |
|
|
|
|
|
|
|
для: cheops
(13.06.2006 в 10:36)
| | Пишет: Parse error: syntax error, unexpected T_IF in /home/....read.php on line 132 | |
|
|
|
|
|
|
|
для: SS
(13.06.2006 в 10:51)
| | Есть такое дело... забыли точку с запятой поставить после первого оператора
<?php
$result=mysql_query("SELECT * FROM posts WHERE parent_post = $idp");
if(!$result) exit(mysql_error());
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(13.06.2006 в 11:05)
| | Сообщений об ошибке нет, все нормально. | |
|
|
|
|
|
|
|
для: cheops
(13.06.2006 в 11:05)
| | Т.е. я хотел сказать не все нормально, а сообщений нет, но проблема осталась. :) | |
|
|
|
|
|
|
|
для: SS
(13.06.2006 в 22:10)
| | А выведите запрос
<?php
echo "SELECT * FROM posts WHERE parent_post = $idp";
?>
|
Как он выглядит и к чему приводит его выполнение в phpMyAdmin или любом другом клиенте? | |
|
|
|
|
|
|
|
для: cheops
(13.06.2006 в 22:18)
| | Проверил:
фактически idp ($_GET['idp']) =37, parent_post=33
Пишет (parent_post = $idp): parent_post = 33, при этом ".$r['idp']." = 37, где $idp = $_GET['idp'];
Бред какой-то или у меня уже шарики за ролики... | |
|
|
|
|
|
|
|
для: SS
(13.06.2006 в 23:07)
| | Если честно, что-то не очень понял этот пост... | |
|
|
|
|
|
|
|
для: cheops
(14.06.2006 в 23:58)
| | В этой функции
<?php
$idp = $_GET['idp'];
$idt = $_GET['idt'];
function catalogs($idp)
{
$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) $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);
}
?>
|
две проблемы:
1) не могу добавить второе условие на выборку из таблицы. Как только добавляю к запросу
пишет “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”.
2) Не работает условие
<?php
if($r['idp'] == $idp) $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>";
?>
|
— всегда только первый вариант. Это неверно. Смысл в том, чтобы в дереве убрать ссылку и выделить другим цветом активное сообщение, чтобы было видно, где находишься. | |
|
|
|
|
|
|
|
для: SS
(15.06.2006 в 00:24)
| | 1) А откуда берётся переменная $idt - ведь функции передаётся только один параметр: $idp.
2) Т.е. получается, что $idp и $r['idp'] всегда равны друг другу? | |
|
|
|
|
|
|
|
для: cheops
(15.06.2006 в 11:17)
| | 1) Подскажите, как надо сделать?
2) Получается, что они всегда не равны друг другу. | |
|
|
|
|
|
|
|
для: SS
(15.06.2006 в 18:42)
| | 1) Передать второй параметр, т.е. вместо
<?php
function catalogs($idp)
{
?>
|
писать
<?php
function catalogs($idp,$idt)
{
?>
|
2) Не очень понятно, почему же тогда срабатывает первое условие? | |
|
|
|
|
|
|
|
для: cheops
(15.06.2006 в 22:55)
| | Я добавил. Ничего не изменилось....................................................
Помогите, пожалуйста мне с этим «деревом» — мне не важно, какая там будет функция. Мне важно - вывести в структурном виде сообщения. В самом начале поста — второй вариант, точнее первый, но он тоже не работает, даже после удаления лишней функции. НЕ выводится ни одно сообщение. У МЕНЯ УЖЕ МОЗГ ПЛАВИТСЯ!!! | |
|
|
|
|
|
|
|
для: SS
(16.06.2006 в 00:37)
| | Что означают переменные $idp и $idt? | |
|
|
|
|
|
|
|
для: cheops
(16.06.2006 в 10:32)
| |
TABLE 'posts'
'idp' int(11) NOT NULL auto_increment,
'idt' int(11) NOT NULL default '0',
'parent_post' int(11) NOT NULL default '0',
PRIMARY KEY ('idp'),
|
и т.д.,
где
idp — id_post
idt — id_theme
parent_post — id_post сообщения, на который был этот ответ | |
|
|
|
|
|
|
|
для: SS
(16.06.2006 в 14:22)
| | Тогда получается, что проверка "AND idt = $idt" лишняя ведь ответ можно будет восстановить по первому условию, так как поле idp - уникально и двух одинаковых значений быть не может. | |
|
|
|
|
|
|
|
для: cheops
(16.06.2006 в 15:20)
| | Хорошо. Как должна выглядеть функция? Сейчас она выглядит так:
<?php
function catalogs($idp)
{
$result=mysql_query("SELECT * FROM posts WHERE parent_post = $idp");
if(!$result) exit(mysql_error());
while($r=mysql_fetch_array($result))
{
if($r['idp'] == $idp) $style = "<span style='margin-left : ".$r['level']."px; color: #CC0000'> ".$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 "<b>$style <font color='#996666'>— ".$r['author']."</b></font><font color='#808080'> — ".$r['time']."</font></span>";
catalogs($r['idp']);
}
}
catalogs($idp);
}
?>
|
в данный момент она:
1) не выделяет цветом активный пост;
2) показывает только посты, на которые есть ответы уровнем ниже, т.е. для такой схемы:
post1
.....post2
.....post3
..........post4
...............post5
если мы находимся на post1 - оттображается вся ветка, а если находимся на post2 - отображаются только:
..........post4
...............post5 | |
|
|
|
|
|
|
|
для: SS
(16.06.2006 в 22:04)
| | Активный пост это кто и как он действует? Т.е. всё что выше его не выводится? | |
|
|
|
|
|
|
|
для: cheops
(17.06.2006 в 00:47)
| | Активный пост — это то сообщение, которые мы смотрим в данный момент.
Т.е. интересует такой вид, как вот здесь: http://www.set.ru/srs/board/read.cgi?user=181&board=1&type=tree&start=0&topic=377&from=0&message=1956 | |
|
|
|
|
|
|
|
для: SS
(17.06.2006 в 01:33)
| | Тогда вам следует передавать два параметра: первый тот, что есть, а второй номер активного поста. Использовать рабочий параметр рекурсивного спуска в качестве маркера активного поста нельзя, так как он постоянно меняется на каждой итерации рекурсии. | |
|
|
|
|
|
|
|
для: cheops
(17.06.2006 в 10:36)
| | Я не могу этого проверить, потому что, как писал выше:
2) показывает только посты, на которые есть ответы уровнем ниже, т.е. для такой схемы:
post1
.....post2
.....post3
..........post4
...............post5
если мы находимся на post1 - оттображается вся ветка, а если находимся на post2 - отображаются только:
..........post4
...............post5 | |
|
|
|
|
|
|
|
для: SS
(17.06.2006 в 11:31)
| | Как вы вызываете функцию catalogs()?
PS Давайте перебираться в новую тему. | |
|
|
|
|
|
|
|
для: cheops
(17.06.2006 в 13:21)
| | Вы шутите? Я уже два раза код приводил.
Вот весь кусок:
<?php
function catalogs($idp)
{
$result=mysql_query("SELECT * FROM posts WHERE parent_post = $idp");
if(!$result) exit(mysql_error());
while($r=mysql_fetch_array($result))
{
if($r['idp'] == $idp) $style = "<span style='margin-left : ".$r['level']."px; color: #CC0000'> ".$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 "<b>$style <font color='#996666'>— ".$r['author']."</b></font><font color='#808080'> — ".$r['time']."</font></span>";
catalogs($r['idp']);
}
}
catalogs($idp);
}
?>
|
| |
|
|
|
|
|
|
|
для: SS
(17.06.2006 в 15:30)
| | Это определение функции, а как вы её вызывате - в каком контексте, откуда берёте параметр $idp? | |
|
|
|
|
|
|
|
для: cheops
(17.06.2006 в 16:22)
| | $idp я беру из адресной строки
А как вызываю — не знаю. Я эту функцию у вас на форуме нашел. А как ее надо вызывать?
Я думал, за это отвечает строка функции
Если это не так — то простите мою темноту и подскажите, как надо. | |
|
|
|
|
|
|
|
|
для: cheops
(13.06.2006 в 22:18)
| | Напоминаю про себя. | |
|
|
|