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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: вывод данных из двух таблиц в одном запросе

Сообщения:  [1-10]   [11-18] 

 
 автор: confirm   (25.07.2012 в 15:11)   письмо автору
 
   для: миша   (25.07.2012 в 04:21)
 

Это другое дело, если форма после else, становиться понятно, что она тут не так приляпана, даже, если код был бы не с начала.
Вот только mysql_fetch_array(), do...while, сколько еще раз повторять, что это не хорошо?

>кликая на автора (можно поменятьссылку на text)

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

>Можно выводить и последние комменты.

Не можно, а нужно, если речь идет об редактировании.

Что касается вывода, то код вам показали, и если есть в записях таблиц соответствия параметров запроса, и если в правой таблице у соответствий не пустые значения, значит вывод должен быть. Правда, по уму, запрос должен быть не к двум, а к трем таблицам. У вас должна быть таблица пользователей содержащая их id и имена, а таблица комментариев должна указывать не имя, а id пользователя, которому они принадлежат.

PS. Строковые значения при выводе на страницу необходимо пропускать через функцию htmlspecialchars().

  Ответить  
 
 автор: миша   (25.07.2012 в 04:21)   письмо автору
 
   для: 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

  Ответить  
 
 автор: confirm   (24.07.2012 в 07:47)   письмо автору
 
   для: миша   (24.07.2012 в 05:27)
 

>Далее кликая на конкретно автора или сам текст...

Комментарий - это кто-то добавил к статье этого автора свое видение, и каким это боком щелчок по имени автора связан с переходом на страницу какого-то комментария автору не принадлежащего? Логично, когда щелчок по имени автора приведет вас, например, на страницу его данных, не так ли?
А щелчок по тексту комментария. Ну ладно, комментарий это два, три слова, а если это приличный текст, вы представляете себе текст такой ссылки?

И вообще - кто редактирует и что? Если автор комментария, то ему должны быть доступны для редактирования только его комментарии. Этого у вас не видно (судя по выбору всех записей), следовательно речь может идти об администрировании/модерации.

Если это администрирование, и будь я администратором, я бы помер от такого редактирования, а вместе со мною и моя мышка. Это же как нужно загонять хвостатую, чтобы просмотреть все комментарии и общелкать те, которые необходимо комментировать! Такие вещи лучше делать как групповые операции, но...

Для размышления

А зачем вы выводите список всех комментариев? Если я предполагаю правильно, это администрирование/модерация, то, по логике вещей, вам надо редактировать только те комментарии, которые такую операцию еще не проходили - это новые комментарии. Зачем просматривать те, которые ранее редактировались?

Даже, если выводить список только новых комментариев, то нельзя сбрасывать со счетов возможность того, что их может быть много. Представляете себе такой список-портянку? Может быть все-таки предусмотреть навигацию?

Что есть суть редактирования? Это изменение данных с последующим их обновлением. А поле text формы при изменении данных в нем генерирует событие onchange. Сам браузер, конечно же не производит глубокого анализа, действительно ли данные изменились, и это возможно только сценарием сделать (а нужно ли?), но тем не менее, это инструмент.

Для того чтобы редактировать записи, совсем не обязательно прыгать на другую страницу (тем более открывать окно новое), выводя в ней форму для каждой записи. Достаточно одной страницы работающей в режиме просмотра/редактирования.

В одну форму выводятся записи новых комментариев (учитывая навигацию), которые помещаются в поля формы, каждая в свою. По id этой записи сразу выводится и чекбокс (name=del[] value=id) "Удалить" (если модерация, то такая возможность должна быть), связанный по id с текстовым полем.

Если произошли изменения в поле, то по событию onchange в форму добавляется чекбокс (name=update[] value=id) со значением id текстового поля в котором произошли изменения, и несущий информацию для сервера, что данную запись нужно обновить. Если разотметить этот чекбокс (отменить редактирование), то он удаляется из формы, и данная запись не будет обновлена в базе.

Сервер получит массив записей, которые были помещены в форму, но обновляться будут только те, у которых есть связанные по их id чекбоксы update. Записи, у которых присутствует чекбокс del, соответственно удаляются.

--------

В вашем коде напрочь отсутствует логика, а вы все ошибки правите.
Объясните сначала для чего на этой странице форма, если запрос на редактирование, это запрос к другой странице?

Размышление, это не обязательно "приказ" к действию, хотите редактируйте по одной записи, но выбор редактирования, это не ссылка в виде самого текста записи, а тем более не щелчок по имени автора, это просто ссылка - "Редактировать".

Подумайте сначала о логике своего скрипта, о задаче которую надо решить, и как лучше и удобнее ее решить, и только потом конкретно по каждой строчке кода, которая вызывает ошибку.

  Ответить  
 
 автор: миша   (24.07.2012 в 05:27)   письмо автору
 
   для: Jovidon   (24.07.2012 в 00:55)
 

Этот вариант тоже не работает (не выводит поле text)

А хочу я следующее.
В таблице выводим комменты (с колонками - title - название статьи где размещен коммент, автор, дата и сам коммент - text)

Далее кликая на конкретно автора или сам текст - чтобы выводилось новое окно, в котором происходит редактирования данного коммента.

  Ответить  
 
 автор: Jovidon   (24.07.2012 в 00:55)   письмо автору
 
   для: миша   (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>"
;
    }
}
?>

  Ответить  
 
 автор: confirm   (22.07.2012 в 23:29)   письмо автору
 
   для: миша   (22.07.2012 в 23:16)
 

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

  Ответить  
 
 автор: миша   (22.07.2012 в 23:16)   письмо автору
 
   для: confirm   (22.07.2012 в 22:32)
 

А что тогда в коде исправить конкретно?

  Ответить  
 
 автор: confirm   (22.07.2012 в 22:32)   письмо автору
 
   для: миша   (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" - а не лучше ли сообщать, что записей в базе нет, и почему это сообщение на английском, у вас англичане редактированием занимаются? :) А что же тогда остальное на русском, бедные инглиши... )

Примечание - делайте отступы в коде, ну неужто вам удобно разбираться в таком? Вот мне такое читать просто не охота, думаю не только мне.

  Ответить  
 
 автор: миша   (22.07.2012 в 22:10)   письмо автору
 
   для: 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

  Ответить  
 
 автор: confirm   (22.07.2012 в 20:22)   письмо автору
 
   для: миша   (22.07.2012 в 19:25)
 

Делайте в коде отступы, иначе воспринимать его трудно.
Остановитесь пока на проблемах, и обратите внимание на запрос и вывод - вам не кажется ничего странным? Вы запросом выбираете все записи, а форма для редактирования одна! Спрашивается - а какую именно запись вы редактировать хотите?

  Ответить  

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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