• 0
Sign in to follow this  
jefponte

Dúvida sobre criação de área de comentários em postagens.

Question

http://www.gcsufc.com.br/beckuppostagem.php

Eu fiz nesse link um relacionamento de tabelas onde os comentários do forum entram com o ID da postagem. Mas na hora de apresentar os dados, só aparecem as postagem que tem comentário feito.

:blink:

Olha os codigos da apresentação dos dados.

<?php

$query = mysql_query("SELECT novapostagem.*, forum.`comentario` FROM `novapostagem` JOIN `forum` ON novapostagem.`id` = forum.`postagem_id` ORDER BY id desc");

while($mostrar = mysql_fetch_array($query))

{

echo "<div class='post'>";

echo "<h3>" .'<a href="http://www.gcsufc.com.br/postagem.php?titulo='.$mostrar'>http://www.gcsufc.com.br/postagem.php?titulo='.$mostrar['id'].'"> '.$mostrar['titulo'].'</a>' ."<br>". "</h3>";

echo "<small>". $mostrar['data'] . '<br>' . "Postado por: " . $mostrar['autordotexto']. ' em'. '<a href=http://www.gcsufc.com.br/postagem.php? categoria='.$mostrar['categoria].'"> '.$mostrar['categoria'].'</a>' . '</small>'.'<br>' ;

echo $mostrar['corpodamensagem'];

echo '<div class=categ">Faça um comentário<hr>'. $mostrar['comentario]. '<hr>';

echo '</div><br>';

echo '<form action="insertforum.php" method="post" ><input type="hidden" name="postagem_id" Value="' . $mostrar['id'] . '"><textarea name=comentario id=textarea cols=50 rows=2></textarea><br><input type=submit /></form><br>';

echo "</div>";

}

?>

E ele ainda fica repetindo as postagens q possuem mais de um comentário.

Troquei o Order By por Group By e ele parou de repetir os que possuem mais de um comentário, mas mesmo assim ele deveria mostrar todas as postagens, só mostra postagens que possuem um comentário no banco.

Share this post


Link to post
Share on other sites

10 answers to this question

Recommended Posts

  • 0

se for para listar acredito que o melhor seria ter duas pesquisas

while(postagem)
{
    exibir tópico

    pesquisar comentarios do post

    if(existirem)
    {
        while(comentarios)
       {
           exibir comentarios do post
        }

    }
    else
    {
           sem comentarios pode exibir algo como seja o primeiro a comentar
    }

}

Share this post


Link to post
Share on other sites
  • 0

jissa, desculpa, sou um leigo. Eu não sabia que poderia colocar outro wile dentro de um wile. Então eu faço outro query? E essa If(se existirem) Como eu faço? Eu agradeceria se respondesse a essas perguntas. E já agradeço por sua resposta e atenção.

Edited by jefponte

Share this post


Link to post
Share on other sites
  • 0

Isso é so uma lógica basica, faz o while da postagem o que você já tem feito .. é so prestar bem atenção.

coloque para exibir o tópico o conteudo e tudo mais... (você também já fez)

agora faça a pesquisa dos comentarios relacionando o ID do tópico...

EXEMPLO (to usando o ID do tópico para buscar o comentario)

SELECT * FROM comentarios WHERE id = $mostra['id']

If(existirem) // muito simples se existir comentarios faça um while deles como fez do tópico e mostre eles

else (se não)

mostre uam mensagem que não existe comentarios.

mais explicado que isso so se for em aula / curso de PHP basico e suas sintaxes, acredito que se foi você que fez o código acima do teu post, vai entender muito bem como fazer o restante agora.

abs.

Share this post


Link to post
Share on other sites
  • 0

JaguA, desculpa, nunca fiz nenhum curso de PHP. Tudo o que eu sei aprendi com blogs e com o w3schol. Peço perdão a todos se estou fazendo perguntas bestas demais.

O problema não foi resolvido.

O código ficou assim.

<?php

$conexao = mysql_connect("localhost","oreidosl_root","[email protected]");

$banco = mysql_select_db("oreidosl_csufc", $conexao);

$query2 = mysql_query("SELECT * FROM forum WHERE postagem_id='". $titulo ."' ORDER BY id desc");

$query = mysql_query("SELECT * FROM novapostagem $string $filtrotitulo ORDER BY id desc");

while($mostrar = mysql_fetch_array($query))

{

echo "<div class='post'>";

echo "<h3>" .'<a href="http://www.gcsufc.com.br/postagem.php?titulo='.$mostrar['id'].'"> '.$mostrar['titulo'].'</a>' ."<br>". "</h3>";

echo "<small>". $mostrar['data'] . '<br>' . "Postado por: " . $mostrar['autordotexto']. ' em';

echo '<a href=http://www.gcsufc.com.br/postagem.php?categoria='.$mostrar['categoria].'"> '.$mostrar['categoria'].'</a>' . '</small>'.'<br>' ;

echo $mostrar['corpodamensagem'];

echo '<form action=insertforum.php" method="post" ><input type="hidden" name="postagem_id" Value="' . $mostrar['id] . '"><textarea name=comentario id=textarea cols=50 rows=2></textarea><br><input type=submit /></form><br>';

echo "</div>";

if

{

while($mostrar2 = mysql_fetch_array($query2))

{

echo $mostrar2['data'].'<br>' . $mostrar2['autor']. ': ' . $mostrar2['comentario'] . '<hr>';

}

else

{

echo 'não existem postagens';

}

}

?>

O código apresentou o seguinte erro:

Parse error: syntax error, unexpected '{', expecting '(' in /home/oreidosl/public_html/fcsufc/postagemtestes.php on line 94

(linha 94 é a linha onde está o segundo wile).

Share this post


Link to post
Share on other sites
  • 0

você fez algumas coisas errada ...

primeiro você precisa dar a condição do If, coisa que você não fez...

segundo precisa colcoar o select dentro do primeiro while antes do segundo... é uma consulta que tem que ser feita toda vez que ele buscar uma nova postagem ...

cara tente intender a lógica de como tem que funcionar, depois você escreve o código.. veja bem...

1 - SELECIONO COM O MYSQL_QUERY SELECIONANDO AS POSTAGEM

2 - CRIO UM WHILE PARA PERCORRE TODOS OS CAMPOS E IMPRIMIR AS POSTAGENS

3 - CRIO OUTRO SELECT COM O MYSQL_QUERY SELECIONADOS OS COMENTARIOS TENDO COMO CONDICAO O ID = ID DA POSTAGEM

4 - CRIO UM IF PARA VERIFICAR SE EXISTE COMENTARIOS

5 - SE EXISTE COMENTARIO CRIO UM WHILE PARA PERCORRE TODOS EXISTENTES E MOSTRA-LOS

6 - SE NÃO MOSTRO MENSAGEM QUE NÃO EXISTE COMENTARIO

7 - FECHO O IF

8 - FECHO O SEGUNDO WHILE

9 - FECHO O PRIMEIRO WHILE

10 - CÓDIGO já AKBO.

OBS: para verificar se existe comentario ou não utilize o mysql_num_row que conta a quantidade de registro e retorna em numero então se for mais q 0 existe ... (isso é o que você precisa fazer para criar o seu IF )

Share this post


Link to post
Share on other sites
  • 0

Eu tentei fazer isso, mas ainda continua dando erro.

<?php

$conexao = mysql_connect("localhost","oreidosl_root","senha");

$banco = mysql_select_db("oreidosl_csufc", $conexao);

//1 - SELECIONO COM O MYSQL_QUERY SELECIONANDO AS POSTAGEM

$query = mysql_query("SELECT * FROM novapostagem $string $filtrotitulo ORDER BY id desc");

//2 - CRIO UM WHILE PARA PERCORRE TODOS OS CAMPOS E IMPRIMIR AS POSTAGENS

while($mostrar = mysql_fetch_array($query))

{

echo "<div class='post'>";

echo "<h3>" .'<a href="http://www.gcsufc.com.br/postagem.php?titulo='.$mostrar['id'].'"> '.$mostrar['titulo'].'</a>' ."<br>". "</h3>";

echo "<small>". $mostrar['data'] . '<br>' . "Postado por: " . $mostrar['autordotexto']. ' em';

echo '<a href=http://www.gcsufc.com.br/postagem.php?categoria='.$mostrar['categoria].'"> '.$mostrar['categoria'].'</a>' . '</small>'.'<br>' ;

echo $mostrar['corpodamensagem'];

echo '<form action=insertforum.php" method="post" ><input type="hidden" name="postagem_id" Value="' . $mostrar['id] . '"><textarea name=comentario id=textarea cols=50 rows=2></textarea><br><input type=submit /></form><br>';

echo "</div>";

//3 - CRIO OUTRO SELECT COM O MYSQL_QUERY SELECIONADOS OS COMENTARIOS TENDO COMO CONDICAO O ID = ID DA POSTAGEM

$query2 = mysql_query("SELECT * FROM forum WHERE postagem_id='". $mostrar['id'] ."' ORDER BY id desc");

//4 - CRIO UM IF PARA VERIFICAR SE EXISTE COMENTARIOS

if ($num_rows = mysql_num_rows($query2) > 0);

{

//5 - SE EXISTE COMENTARIO CRIO UM WHILE PARA PERCORRE TODOS EXISTENTES E MOSTRA-LOS

while($mostrar2 = mysql_fetch_array($query2))

{

echo $mostrar2['data'].'<br>' . $mostrar2['autor']. ': ' . $mostrar2['comentario'] . '<hr>';

//6 - SE NÃO MOSTRO MENSAGEM QUE NÃO EXISTE COMENTARIO

else

{

echo 'não existem comentários, quer ser o primeiro a postar?';

}

//7 - FECHO O IF

}

//8 - FECHO O SEGUNDO WHILE

}

//9 - FECHO O PRIMEIRO WHILE

}

//10 - CÓDIGO já AKBO.

?>

Ainda está dando erro:

Parse error: syntax error, unexpected T_ELSE in /home/oreidosl/public_html/fcsufc/postagemtestes.php on line 109

Tentei fazer de outra forma, assim:

<?php

$conexao = mysql_connect("localhost","oreidosl_root","senha");

$banco = mysql_select_db("oreidosl_csufc", $conexao);

//1 - SELECIONO COM O MYSQL_QUERY SELECIONANDO AS POSTAGEM

$query = mysql_query("SELECT * FROM novapostagem $string $filtrotitulo ORDER BY id desc");

//2 - CRIO UM WHILE PARA PERCORRE TODOS OS CAMPOS E IMPRIMIR AS POSTAGENS

while($mostrar = mysql_fetch_array($query))

{

echo "<div class=post'>";

echo "<h3>" .'<a href="http://www.gcsufc.com.br/postagem.php?titulo='.$mostrar['id].'"> '.$mostrar['titulo'].'</a>' ."<br>". "</h3>";

echo "<small>". $mostrar['data'] . '<br>' . "Postado por: " . $mostrar['autordotexto']. ' em';

echo '<a href=http://www.gcsufc.com.br/postagem.php?categoria='.$mostrar['categoria].'"> '.$mostrar['categoria'].'</a>' . '</small>'.'<br>' ;

echo $mostrar['corpodamensagem'];

echo '<form action=insertforum.php" method="post" ><input type="hidden" name="postagem_id" Value="' . $mostrar['id] . '"><textarea name=comentario id=textarea cols=50 rows=2></textarea><br><input type=submit /></form><br>';

echo "</div>";

//3 - CRIO OUTRO SELECT COM O MYSQL_QUERY SELECIONADOS OS COMENTARIOS TENDO COMO CONDICAO O ID = ID DA POSTAGEM

$query2 = mysql_query("SELECT * FROM forum WHERE postagem_id='". $mostrar['id'] ."' ORDER BY id desc");

//4 - CRIO UM IF PARA VERIFICAR SE EXISTE COMENTARIOS

if ($num_rows = mysql_num_rows($query2) > 0);

{

//5 - SE EXISTE COMENTARIO CRIO UM WHILE PARA PERCORRE TODOS EXISTENTES E MOSTRA-LOS

while($mostrar2 = mysql_fetch_array($query2))

{

echo $mostrar2['data'].'<br>' . $mostrar2['autor']. ': ' . $mostrar2['comentario'] . '<hr>';

// Fecho o primeiro wile

}

//6 - SE NÃO MOSTRO MENSAGEM QUE NÃO EXISTE COMENTARIO

else

{

echo 'não existem comentários, quer ser o primeiro a postar?';

//fecho o else

}

//7 - FECHO O IF

}

//9 - FECHO O PRIMEIRO WHILE

}

//10 - CÓDIGO já AKBO.

?>

Resposta:

Parse error: syntax error, unexpected T_ELSE in /home/oreidosl/public_html/fcsufc/postagemtestes.php on line 108

Pelo termo else da pra ver que o erro é na linha onde está o else. E aí, JaguA. Eu tentei.

Aqui o link:

http://gcsufc.com.br/postagemtestes.php

Ainda com problema.

Edited by jefponte

Share this post


Link to post
Share on other sites
  • 0

Mas o else eu só posso abrir depois que eu fechar o if, não é??

Então, acho que deveria ficar assim.

Mas mesmo assim está dando erro, na linha do else.

<?php

$conexao = mysql_connect("localhost","oreidosl_root","[email protected]");

$banco = mysql_select_db("oreidosl_csufc", $conexao);

//1 - SELECIONO COM O MYSQL_QUERY SELECIONANDO AS POSTAGEM

$query = mysql_query("SELECT * FROM novapostagem $string $filtrotitulo ORDER BY id desc");

//2 - CRIO UM WHILE PARA PERCORRE TODOS OS CAMPOS E IMPRIMIR AS POSTAGENS

while($mostrar = mysql_fetch_array($query))

{

echo "<div class='post'>";

echo "<h3>" .'<a href="http://www.gcsufc.com.br/postagem.php?titulo='.$mostrar['id'].'"> '.$mostrar['titulo'].'</a>' ."<br>". "</h3>";

echo "<small>". $mostrar['data'] . '<br>' . "Postado por: " . $mostrar['autordotexto']. ' em';

echo '<a href=http://www.gcsufc.com.br/postagem.php?categoria='.$mostrar['categoria].'"> '.$mostrar['categoria'].'</a>' . '</small>'.'<br>' ;

echo $mostrar['corpodamensagem'];

echo '<form action=insertforum.php" method="post" ><input type="hidden" name="postagem_id" Value="' . $mostrar['id] . '"><textarea name=comentario id=textarea cols=50 rows=2></textarea><br><input type=submit /></form><br>';

echo "</div>";

//3 - CRIO OUTRO SELECT COM O MYSQL_QUERY SELECIONADOS OS COMENTARIOS TENDO COMO CONDICAO O ID = ID DA POSTAGEM

$query2 = mysql_query("SELECT * FROM forum WHERE postagem_id='". $mostrar['id'] ."' ORDER BY id desc");

//4 - CRIO UM IF PARA VERIFICAR SE EXISTE COMENTARIOS

if ($num_rows = mysql_num_rows($query2) > 0);

{

//5 - SE EXISTE COMENTARIO CRIO UM WHILE PARA PERCORRE TODOS EXISTENTES E MOSTRA-LOS

while($mostrar2 = mysql_fetch_array($query2))

{

echo $mostrar2['data'].'<br>' . $mostrar2['autor']. ': ' . $mostrar2['comentario'] . '<hr>';

// Fecho o primeiro wile

}

//7 - FECHO O IF

}

//6 - SE NÃO MOSTRO MENSAGEM QUE NÃO EXISTE COMENTARIO

else

{

echo 'não existem comentários, quer ser o primeiro a postar?';

//fecho o else

}

//9 - FECHO O PRIMEIRO WHILE

}

//10 - CÓDIGO já AKBO.

?>

Share this post


Link to post
Share on other sites
  • 0

você não fecho o else..

quando você abre o IF precisa fecha-lo a estrutura é essa

If(condição) {

conteudo 

} else {

conteudo inverso

}

Share this post


Link to post
Share on other sites
  • 0

Não JaguA, eu fechei o else, mas eu descobri qual era o erro. E você me ajudou muito com essa sua ultima postagem. O problema era no IF.

Você disse: If(condição) {

E eu estava escrevendo:

If(condição);{

Depois que tirei o ponto virgula funcionou.

Veja no link funcionando:

http://gcsufc.com.br/postagemtestes.php

O código corretamente:

$banco = mysql_select_db("oreidosl_csufc", $conexao);

//1 - SELECIONO COM O MYSQL_QUERY SELECIONANDO AS POSTAGEM

$query = mysql_query("SELECT * FROM novapostagem $string $filtrotitulo ORDER BY id desc");

//2 - CRIO UM WHILE PARA PERCORRE TODOS OS CAMPOS E IMPRIMIR AS POSTAGENS

while($mostrar = mysql_fetch_array($query))

{

echo "<div class='post'>";

echo "<h3>" .'<a href="http://www.gcsufc.com.br/postagem.php?titulo='.$mostrar['id'].'"> '.$mostrar['titulo'].'</a>' ."<br>". "</h3>";

echo "<small>". $mostrar['data'] . '<br>' . "Postado por: " . $mostrar['autordotexto']. ' em';

echo '<a href=http://www.gcsufc.com.br/postagem.php?categoria='.$mostrar['categoria].'"> '.$mostrar['categoria'].'</a>' . '</small>'.'<br>' ;

echo $mostrar['corpodamensagem'];

echo '<form action=insertforum.php" method="post" ><input type="hidden" name="postagem_id" Value="' . $mostrar['id] . '">';

echo '<textarea name=comentario id=textarea cols=50 rows=2>';

echo '</textarea><br><input type=submit /></form><br>';

echo "</div>";

//3 - CRIO OUTRO SELECT COM O MYSQL_QUERY SELECIONADOS OS COMENTARIOS TENDO COMO CONDICAO O ID = ID DA POSTAGEM

$query2 = mysql_query("SELECT * FROM forum WHERE postagem_id='". $mostrar['id'] ."' ORDER BY id desc");

//4 - CRIO UM IF PARA VERIFICAR SE EXISTE COMENTARIOS

if ($num_rows = mysql_num_rows($query2) > 0)

{

//5 - SE EXISTE COMENTARIO CRIO UM WHILE PARA PERCORRE TODOS EXISTENTES E MOSTRA-LOS

while($mostrar2 = mysql_fetch_array($query2))

{

echo $mostrar2['data'].'<br>' . $mostrar2['autor']. ': ' . $mostrar2['comentario'] . '<hr>';

// Fecho o primeiro wile

}

//7 - FECHO O IF

}

//6 - SE NÃO MOSTRO MENSAGEM QUE NÃO EXISTE COMENTARIO

else

{

echo 'Sem comentários, quer ser o primeiro a postar?';

//fecho o else

}

//9 - FECHO O PRIMEIRO WHILE

}

//10 - CÓDIGO já AKBO.

?>

Eu adoro esse forum.

Obrigado JaguA e oBrigado Jissa.

Funcionou!!!

Edited by jefponte

Share this post


Link to post
Share on other sites
  • 0

é verdade você fechou, agora que reparei ele ta mais embaixo é que eu costumo mante na mesma linha para não me perde e como não vi o seu proximo deduzi isto, rsrs que bom que resolveu ...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this