|
|
|
| Добрый день!
Вывод комментариев выводим для модерации. Коммент выводится на странице университета с id_university
Комменты лежат в таблице comment
CREATE TABLE IF NOT EXISTS `comment` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`post` int(5) NOT NULL,
`author` varchar(30) NOT NULL,
`text` text NOT NULL,
`date` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=135 ;
где post соотвествует id_university статьи
Надо вывести еще и название университета, которое лежит в таблице universities
Вопрос как связать 2 нижеследующих запроса
$sql = "SELECT * FROM comment ORDER by date DESC";
$result = mysql_query($sql);
$post = $result['post'];
$sql2 = "SELECT * FROM universities WHERE id_university='$post'";
$result2 = mysql_query($sql2);
|
| |
|
|
|
|
|
|
|
для: миша
(14.07.2012 в 19:32)
| | Можно начать отталкиваться от следующего запроса
SELECT
c.*,
u.*
FROM
comment c
LEFT JOIN
universities u
ON c.post = id_university
|
| |
|
|
|
|
|
|
|
для: cheops
(15.07.2012 в 05:57)
| | Дает ошибку.
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home.... on line 28
No rows found, nothing to print so am exiting
Привожу часть кода
<table >
<?php
$sql = "SELECT comment.*, universities.* FROM comment c
LEFT JOIN universities and ON comment.post = id_university";
$result = mysql_query($sql);
if (mysql_num_rows($result) == 0) {
echo "No rows found, nothing to print so am exiting";
exit;
}
|
| |
|
|
|
|
|
|
|
для: миша
(16.07.2012 в 05:49)
| | Обработайте ошибку при помощи функции mysql_error(), что выдается в ответ? | |
|
|
|
|
|
|
|
для: миша
(16.07.2012 в 05:49)
| | откуда взялось and в запросе?
и после присвоения алиасов не допустимо обращаться к полному имени таблицы
cheops дал вам запрос в который осталось добавить только сортировку
но для начала просто подставьте его запрос в свой код | |
|
|
|
|
|
|
|
для: Valick
(16.07.2012 в 09:39)
| |
$sql = "SELECT comment.*, universities.* FROM comment c
LEFT JOIN universities u ON comment.post = id_university";
$result = mysql_query($sql);
if (!$result)
echo "Ошибка базы данных. MySQL пишет:", mysql_error();
|
Ошибка базы данных. MySQL пишет:Unknown table 'comment' | |
|
|
|
|
|
|
|
для: миша
(22.07.2012 в 02:08)
| | Попробуйте поправить запрос следующим образом
$sql = "SELECT comment.*, universities.* FROM comment
LEFT JOIN universities ON comment.post = universities.id_university";
|
| |
|
|
|
|
|
|
|
для: cheops
(22.07.2012 в 06:35)
| | ошибки нет.
но таблица с данными не выводится.
в колонке title выводится ;
в колонке author выводится ";
в колонке date пусто
в колонке text пусто
<?php
if (isset($_GET['id'])) {$id = $_GET['id'];}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Модерация</title>
<link href="../style.css" rel="stylesheet" type="text/css">
</head>
<body>
<title>Редактирование комментария</title>
</head>
<body>
<h1 align="center">Редактирование комментария ВУЗа</h1>
<table border="1" cellspacing="0" cellpadding="4">
<?php
$sql = "SELECT comment.*, universities.* FROM comment
LEFT JOIN universities ON comment.post = universities.id_university";
$result = mysql_query($sql);
if (mysql_num_rows($result) == 0) {
echo "No rows found, nothing to print so am exiting";
exit;
}
while ($row = mysql_fetch_assoc($result)) {
echo "<tr bgcolor='#FFFF99'>
<td align='center'><p class='nomistake'>title</p></td>
<td align='center'><p class='nomistake'>author</p></td>
<td align='center'><p class='nomistake'>date</p></td>
<td align='center'><p class='nomistake'>text</p></td>
</tr>
<tr>
<td><p class='mod'>;" ?>
<?php
printf ("<a href='../post_university.php?id_university=%s'>%s</a>",$myrow3["id_university"],$myrow3["title"]);
?>
</p></td>
<td><p class='mod'>";
<?php
printf ("<a href='comment_edit.php?id=%s'>%s</a>",$myrow["id"],$myrow["author"]);
?>
</p></td>
<td><p class='mod'><?=$myrow["date"];?></p></td>
<td><p class='mod'><?=$myrow["text"];?></p></td>
</tr>
<?php
}
mysql_free_result($result);
print <<<HERE
<form name='form1' method='post' action='comment_update.php'>
<font color="#FF0000">
<p>
<label>Автор<br>
<input value="$myrow[author]" type="text" name="author" size="100" id="author">
</label>
</p>
<p>
<label>Дата комментария<br>
<input value="$myrow[date]" type="text" name="date" id="date">
</label>
<label>Текст комментария<br>
<textarea name="text" id="text" cols="120" rows="15">$myrow[text]</textarea>
</label>
</p>
<input name="id" type="hidden" value="$myrow[id]">
<p>
<label>
<input type="submit" name="submit" id="submit" value="Сохранить изменения">
</label>
</p>
</font>
</form>
HERE;
?>
</table>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: миша
(22.07.2012 в 19:25)
| | Делайте в коде отступы, иначе воспринимать его трудно.
Остановитесь пока на проблемах, и обратите внимание на запрос и вывод - вам не кажется ничего странным? Вы запросом выбираете все записи, а форма для редактирования одна! Спрашивается - а какую именно запись вы редактировать хотите? | |
|
|
|
|
|
|
|
для: confirm
(22.07.2012 в 20:22)
| | исправил ошибку.
вместо $myrow поставил $row
Вы запросом выбираете все записи, а форма для редактирования одна! Спрашивается - а какую именно запись вы редактировать хотите?
Все правильно. Выводим все записи, а далее нажимая на нужную запись - открыается окно для редактирования этой записи.
вот только у меня поле text не выводится
<?php
$sql = "SELECT comment.*, universities.* FROM comment
LEFT JOIN universities ON comment.post = universities.id_university";
$result = mysql_query($sql);
if (!$result)
echo "Ошибка базы данных. MySQL пишет:", mysql_error();
if (mysql_num_rows($result) == 0) {
echo "No rows found, nothing to print so am exiting";
exit;
}
while ($row = mysql_fetch_assoc($result)) {
echo "<tr bgcolor='#FFFF99'>
<td align='center'><p class='nomistake'>title</p></td>
<td align='center'><p class='nomistake'>author</p></td>
<td align='center'><p class='nomistake'>date</p></td>
<td align='center'><p class='nomistake'>text</p></td>
</tr>
<tr>
<td><p class='mod'>" ?>
<?php
printf ("<a href='../post_university.php?id_university=%s'>%s</a>",$row["id_university"],$row["title"]);
?>
</p></td>
<td><p class='mod'>
<?php
printf ("<a href='comment_edit.php?id=%s'>%s</a>",$row["id"],$row["author"]);
?>
</p></td>
<td><p class='mod'><?=$row["date"];?></p></td>
<td><p class='mod'><?=$row["text"];?></p></td>
</tr>
<?php
}
mysql_free_result($result);
print <<<HERE
|
| |
|
|
|
|
|
|
|
для: миша
(22.07.2012 в 22:10)
| | И что правильно то? Вот отвлеченно:
у вас есть массив значений 1,2,3,4,5
вы проходите его циклом приравнивая его значений переменной $a, выводя ее в столбец,
а после цикла подставляете эту переменную в качестве атрибута value в поле text формы.
Вопрос - что вы увидите в текстовом поле?
Вот так и у вас. Я вижу, что у вас есть ссылки с параметром id=..., и по имени запрашиваемого скрипта понимаю, что запрос на редактирование. Но что у вас будет обновлять форма, и зачем, которая в качестве значений получает значения последней записи?!
Это что?
if (mysql_num_rows($result) == 0) - 0, это false, достаточно if (!mysql_num_rows($result)).
"No rows found, nothing to print so am exiting" - а не лучше ли сообщать, что записей в базе нет, и почему это сообщение на английском, у вас англичане редактированием занимаются? :) А что же тогда остальное на русском, бедные инглиши... )
Примечание - делайте отступы в коде, ну неужто вам удобно разбираться в таком? Вот мне такое читать просто не охота, думаю не только мне. | |
|
|
|
|
|
|
|
для: confirm
(22.07.2012 в 22:32)
| | А что тогда в коде исправить конкретно? | |
|
|
|
|
|
|
|
для: миша
(22.07.2012 в 23:16)
| | Вот этого я не знаю, чего вам исправить, так как я не в курсе, чего вы вообще хотите от этой страницы, кроме ссылок на редактирование. | |
|
|
|
|
|
|
|
для: миша
(22.07.2012 в 22:10)
| | >исправил ошибку.
>вместо $myrow поставил $row
???
попробуй так
<?php
$sql = "SELECT comment.*, universities.*
FROM comment
LEFT JOIN universities
ON comment.post = universities.id_university";
$result = mysql_query($sql) or die("Ошибка : ".mysql_error());
if(mysql_num_rows($result) > 0)
{
while($row = mysql_fetch_array($result))
{
echo "<tr>
<td>title</td>
<td>author</td>
<td>date</td>
<td>text</td>
</tr>
<tr>
<td><a href='../post_university.php?id_university=$row[id_university]'>$row[title]</a></td>
<td><a href='comment_edit.php?id=$row[id]'>$row[author]</a></td>
<td>$row[date]</td>
<td>$row[text]</td>
</tr>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Jovidon
(24.07.2012 в 00:55)
| | Этот вариант тоже не работает (не выводит поле text)
А хочу я следующее.
В таблице выводим комменты (с колонками - title - название статьи где размещен коммент, автор, дата и сам коммент - text)
Далее кликая на конкретно автора или сам текст - чтобы выводилось новое окно, в котором происходит редактирования данного коммента. | |
|
|
|
|
|
|
|
для: миша
(24.07.2012 в 05:27)
| | >Далее кликая на конкретно автора или сам текст...
Комментарий - это кто-то добавил к статье этого автора свое видение, и каким это боком щелчок по имени автора связан с переходом на страницу какого-то комментария автору не принадлежащего? Логично, когда щелчок по имени автора приведет вас, например, на страницу его данных, не так ли?
А щелчок по тексту комментария. Ну ладно, комментарий это два, три слова, а если это приличный текст, вы представляете себе текст такой ссылки?
И вообще - кто редактирует и что? Если автор комментария, то ему должны быть доступны для редактирования только его комментарии. Этого у вас не видно (судя по выбору всех записей), следовательно речь может идти об администрировании/модерации.
Если это администрирование, и будь я администратором, я бы помер от такого редактирования, а вместе со мною и моя мышка. Это же как нужно загонять хвостатую, чтобы просмотреть все комментарии и общелкать те, которые необходимо комментировать! Такие вещи лучше делать как групповые операции, но...
Для размышления
А зачем вы выводите список всех комментариев? Если я предполагаю правильно, это администрирование/модерация, то, по логике вещей, вам надо редактировать только те комментарии, которые такую операцию еще не проходили - это новые комментарии. Зачем просматривать те, которые ранее редактировались?
Даже, если выводить список только новых комментариев, то нельзя сбрасывать со счетов возможность того, что их может быть много. Представляете себе такой список-портянку? Может быть все-таки предусмотреть навигацию?
Что есть суть редактирования? Это изменение данных с последующим их обновлением. А поле text формы при изменении данных в нем генерирует событие onchange. Сам браузер, конечно же не производит глубокого анализа, действительно ли данные изменились, и это возможно только сценарием сделать (а нужно ли?), но тем не менее, это инструмент.
Для того чтобы редактировать записи, совсем не обязательно прыгать на другую страницу (тем более открывать окно новое), выводя в ней форму для каждой записи. Достаточно одной страницы работающей в режиме просмотра/редактирования.
В одну форму выводятся записи новых комментариев (учитывая навигацию), которые помещаются в поля формы, каждая в свою. По id этой записи сразу выводится и чекбокс (name=del[] value=id) "Удалить" (если модерация, то такая возможность должна быть), связанный по id с текстовым полем.
Если произошли изменения в поле, то по событию onchange в форму добавляется чекбокс (name=update[] value=id) со значением id текстового поля в котором произошли изменения, и несущий информацию для сервера, что данную запись нужно обновить. Если разотметить этот чекбокс (отменить редактирование), то он удаляется из формы, и данная запись не будет обновлена в базе.
Сервер получит массив записей, которые были помещены в форму, но обновляться будут только те, у которых есть связанные по их id чекбоксы update. Записи, у которых присутствует чекбокс del, соответственно удаляются.
--------
В вашем коде напрочь отсутствует логика, а вы все ошибки правите.
Объясните сначала для чего на этой странице форма, если запрос на редактирование, это запрос к другой странице?
Размышление, это не обязательно "приказ" к действию, хотите редактируйте по одной записи, но выбор редактирования, это не ссылка в виде самого текста записи, а тем более не щелчок по имени автора, это просто ссылка - "Редактировать".
Подумайте сначала о логике своего скрипта, о задаче которую надо решить, и как лучше и удобнее ее решить, и только потом конкретно по каждой строчке кода, которая вызывает ошибку. | |
|
|
|
|
|
|
|
для: confirm
(24.07.2012 в 07:47)
| | привожу код.
<table>
<?php
if (!isset($id))
{
$result = mysql_query ("SELECT * FROM comment ORDER by date DESC");
$myrow = mysql_fetch_array($result);
do
{
?>
<tr>
<td align="center">author</td>
<td align="center">date</td>
<td align="center">text</td>
</tr>
<tr>
<td><?php
printf ("<a href='comment_edit.php?id=%s'>%s</a>",$myrow["id"],$myrow["author"]);
?>
</p></td>
<td><?=$myrow["date"];?></td>
<td><?=$myrow["text"];?></td>
</tr>
<?php
}
while ($myrow = mysql_fetch_array ($result));
}
else
{
$result = mysql_query ("SELECT * FROM comment where id=$id");
$myrow = mysql_fetch_array($result);
print <<<HERE
||| тут я вывожу форму которая выводит само сообщения и вносит обновление в БД
HERE;
}
?>
</table>
|
он рабочий.выводятся комменты, кликая на автора (можно поменятьссылку на text) выводится форма для корректировки сообщения.
Все работает! Хотелось только в ту таблицу выводить и title статьи где расположен коммент.
Можно выводить и последние комменты.
Подробнее вот здесь http://softtime.ru/forum/read.php?id_forum=1&id_theme=87084&page=1 | |
|
|
|
|
|
|
|
для: миша
(25.07.2012 в 04:21)
| | Это другое дело, если форма после else, становиться понятно, что она тут не так приляпана, даже, если код был бы не с начала.
Вот только mysql_fetch_array(), do...while, сколько еще раз повторять, что это не хорошо?
>кликая на автора (можно поменятьссылку на text)
Не можно, а нужно. Если вы делаете это исключительно для себя, можете и по автору щелкать, но для других (в частности для меня), это странная логика, не догадался бы как запустить редактирование (без инструкции по эксплуатации).
>Можно выводить и последние комменты.
Не можно, а нужно, если речь идет об редактировании.
Что касается вывода, то код вам показали, и если есть в записях таблиц соответствия параметров запроса, и если в правой таблице у соответствий не пустые значения, значит вывод должен быть. Правда, по уму, запрос должен быть не к двум, а к трем таблицам. У вас должна быть таблица пользователей содержащая их id и имена, а таблица комментариев должна указывать не имя, а id пользователя, которому они принадлежат.
PS. Строковые значения при выводе на страницу необходимо пропускать через функцию htmlspecialchars(). | |
|
|
|
|