Помогите пожалуйста решить проблему с кодом)

Maroon

Новичок
Помогите пожалуйста решить проблему с кодом)

Здравствуйте, помогите пожалуйста решить проблему, решил сделать регистрацию, сделал с сессией,вот когда дошло до комментов, то я хотел сделать так чтобы ссылка была на автора(ссылка на профиль) на именно того который ОСТАВИЛ его) вот делаю вроде все правильно, хотя если бы делал, то ужэе бы сделал) не поможете вот код, где 100% нуно поменять я даже знаю что, но НА что не знаю
сначала таблицы их две:
register: id,nick,pass и т.д.
и 2:
comments: id,post,author и т.д.

вот код:
PHP:
$result3 = mysql_query ("SELECT * FROM comments WHERE post='$id' ORDER BY id DESC",$db); 

if (mysql_num_rows($result3) > 0) {
  $myrow3 = mysql_fetch_array($result3);
  $result4 = mysql_query ("SELECT  nick FROM register WHERE nick='$myrow3[author]'",$db);
  $myrow4 = mysql_fetch_array ($result4);

  $result7 = mysql_query ("SELECT author FROM comments WHERE author='$myrow4[nick]'",$db);
  $myrow7 = mysql_fetch_array($result7);

  $result55 = mysql_query ("SELECT id FROM register WHERE nick='$myrow7[author]'",$db);
  $myrow55 = mysql_fetch_array($result55);
  do{
    printf (
"<div class='post_div'>
<p class='post_comment_add'>
<strong><a href='profile.php?id=%s'>%s</a></strong><br>
Дата:<strong>%s </strong></p>
<p>%s</p></div>",
$myrow55["id"],$myrow3["author"],$myrow3["date"],$myrow3["text"]);
  } while ($myrow3 = mysql_fetch_array($result3));
}
при таком раскладе у меня появляется id=2 то есть ссылка идет на пользователя с id=2,я тут много пытался сделать обращений чтобы табл коммент, где автор была равно табл регистр, где ник, вот не поможете?)
и заметил если я поставлю в строчке:
$result4 = mysql_query ("SELECT nick FROM register WHERE nick='$myrow3[author]'",$db);
вместо $myrow3[author] например имя, в таблице, ну то есть любого зарегестрированно пользователя то будет его id, вот такая билеберда)))) не поможете?):)
 

Фанат

oncle terrible
Команда форума
в таблице постов должен быть не ник, а id автора
хотя это и не принципиально

-~{}~ 11.10.08 19:38:

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

Фанат

oncle terrible
Команда форума
ужасный код, как ты в нем сам-то разбираешься.
Maroon, зачем ты тягаешь по одному полю из таблицы?
почему нельзя запросить ник и ид СРАЗУ, в одном запросе?
зачем ты повторно достаешь автора, если он у тебя и так есть?
 

Maroon

Новичок
*****
делаю так чтобы ник сообщения совпадал с ником зарегестируевомого человека) а они находятся в разных таблицах)а как лучше тогда сделать?
 

Фанат

oncle terrible
Команда форума
я задал три вопроса. это был ответ на какой из них?
 

Maroon

Новичок
зачем ты тягаешь по одному полю из таблицы? ответ был

-~{}~ 11.10.08 19:50:

почему нельзя запросить ник и ид СРАЗУ, в одном запросе?-с 2-х таблиц?
зачем ты повторно достаешь автора, если он у тебя и так есть?есть, но находится в таблице регистируируемого, а я сделал так что когда пишет человек по сессии, выводится его сообщение, и в базу комментов вводится все и ник его, короче нужно переделать
 

Фанат

oncle terrible
Команда форума
из каких ДВУХ таблиц?!
SELECT nick FROM register
SELECT id FROM register
где здесь две таблицы?
 

Maroon

Новичок
ой, про эти) я подумал о comments и register

-~{}~ 11.10.08 20:01:

я настолько уже запутался в нем
 

Фанат

oncle terrible
Команда форума
не надо извиняться.
надо объяснить смысл своих хитроумных действий.
ты можешь показать, какой у тебя был код до введения регистрации?
 

Maroon

Новичок
был вот такой,
$result3 = mysql_query ("SELECT * FROM comments WHERE post='$id' ORDER BY id DESC",$db);
if (mysql_num_rows($result3) > 0)
{
$myrow3 = mysql_fetch_array($result3);
do{
printf ("<div class='post_div'><p class='post_comment_add'><strong>%s</strong><br>Дата:<strong>%s </strong></p><p>%s</p></div>",$myrow3["author"],$myrow3["date"],$myrow3["text"]);
}
while ($myrow3 = mysql_fetch_array($result3));
}

-~{}~ 11.10.08 20:06:

а вот форма которая с регистрацией уже:
<form action="comment.php" method="post" name="form">
<input name="author" id="author" type="hidden" value="<? echo $_SESSION['user'] ?>" >
<p><label>Комментарий:<br>
<textarea name="text" cols="40" rows="6"></textarea>
</label></p>
<input name="id" type="hidden" value="<? echo $id;?>">
<p><input name="sub_com" type="submit" value="Комментировать" class="submit_search"> </p>
</form>
 

Фанат

oncle terrible
Команда форума
отлично.
я смотрю, у тебя просто мания писать все по два раза.
здесь, например, два раза пишется mysql_fetch_array. зачем - загадка.

Вопрос. У тебя уже были комментарии к постам без регистрации, и их надо сохранить, наряду с зарегистрированными? Или ты делаешь с нуля, и комментарии будут только от зарегистрированных?
 

Maroon

Новичок
да были, нет не нужно

-~{}~ 11.10.08 20:10:

Автор оригинала: *****
отлично.
я смотрю, у тебя просто мания писать все по два раза.
здесь, например, два раза пишется mysql_fetch_array. зачем - загадка.
ага, щас тоже когда копировал посмотрел и подумал зачем написал 2 раза)

-~{}~ 11.10.08 20:13:

комменты только для регистированных
 

Фанат

oncle terrible
Команда форума
затем, что ты используешь почему-то do while вместо while

если бы было нужно сохранить старые, то в таблицу комментариев пришлось бы добавить еще одно поле - id комментатора.
если ненужно, то надо переделать и вместо имени писать id
это должно быть жесткая презумпция - таблицы связываются только по id.

дальше
переделываешь свой код на while, и добавляешь внутрь цикла только ОДИН запрос - запрос к таблице пользователей, из которой достаешь имя. которое и подставляешь. только имя, потому что id у тебя и так есть.

как сделаешь - будешь учиться делать все одним запросом.
 

Maroon

Новичок
$_SESSION['user'] добавляется у меня в табл коммент, то есть человек с таким-то ником зашел и написал, его ник отправляется в табл комментов,
$result55 = mysql_query ("SELECT id,nick FROM register WHERE nick='$myrow3[author]'",$db);
$myrow55 = mysql_fetch_array($result55);
это я пытался сделать чтобы автор коммента был равен зарегстрируемого. вот.
немного не понял как сделать

-~{}~ 11.10.08 20:29:

и вот если бы они совпадали то выводился бы id того зарегестируемого пользователя вот сюда
printf ("<div class='post_div'><p class='post_comment_add'><strong><a href='profile.php?id=%s'>%s</a></strong><br>Дата:<strong>%s </strong></p><p>%s</p></div>",$myrow55["id"],$myrow3["author"],$myrow3["date"],$myrow3["text"]);
$myrow55["id"]-здесь его id должен быть, у меня просто выводится только id=1 то есть первый зарегенный пользователь.
 

Фанат

oncle terrible
Команда форума
вот в табл коммент надо записывать id
а делаешь ты все правильно.
у меня просто выводится только id=1 то есть первый зарегенный пользователь.
ты внутри цикла его запрашиваешь или снаружи?
ты все сделал, как я сказал?
где код с while и с запросом ника пользователя внутри цикла?

-~{}~ 11.10.08 20:53:

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

как написать запрос, чтобы сразу доставить и коммент и имя автора тебе покажут

И не забудь один очень важный момент: ВСЁ, что введено пользователем, должно выводиться через функцию htmlspecialchars
 

Maroon

Новичок
И не забудь один очень важный момент: ВСЁ, что введено пользователем, должно выводиться через функцию htmlspecialchars это естественно я сделал)
ты внутри цикла его запрашиваешь или снаружи?-внутри
щас делаю)

-~{}~ 11.10.08 21:00:

Спасибо за помощь

-~{}~ 12.10.08 01:06:

*****
эм, а как тут можно перестроить только на while?
<?
echo "<p class='post_comment'>Комментарии:</p>";
$result3 = mysql_query ("SELECT * FROM comments WHERE post='$id' ORDER BY id DESC",$db);

if (mysql_num_rows($result3) > 0)
{
$myrow3 = mysql_fetch_array($result3);

$result55 = mysql_query ("SELECT id,nick FROM register WHERE nick='$myrow3[author]'",$db);
$myrow55 = mysql_fetch_array($result55);
do{
printf ("<div class='post_div'><p class='post_comment_add'><strong><a href='profile.php?id=%s'>%s</a></strong><br>Дата:<strong>%s </strong></p><p>%s</p></div>",$myrow55["id"],$myrow3["author"],$myrow3["date"],$myrow3["text"]);
}
while ($myrow3 = mysql_fetch_array($result3));
}
?>
 
Сверху