Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CheshireChat

sistema comentarios php+mysql

Recommended Posts

É o seguinte...desenvolvi um sistema de comentários php+mysql, pra complementar o sistema de notícias que eu ja havia feito, e ta tudo funcionando perfeitinho...a única coisa que eu não consigo eh achar um modo para que cada notícia postada tenha sua própria página de comentários.

 

Por enquanto, os comentários postados numa notícia valem para todas e eu não sei como arrumar isso! Que método eu posso usar para que meu sistema de comentários fique como todos os outros, cada notícia com seus comentários? Quando o usuário clica, aparece uma página de comentários zerada para cada uma, e assim vai?

 

Obrigada pela atenção!

 

os codes:

 

enviar_coment.php

 

<?
$conexao = mysql_connect("dbmy0013.whservidor.com" , "raindropwe" , "********");
$banco = mysql_select_db("raindropwe");
?>

<?
$nome = $_POST['nome'];
$email = $_POST['email'];
$site = $_POST['site'];
$comentario = $_POST ['comentario'];
$data = date('Y-m-d');
$inserir = mysql_query("insert into comentarios (nome, email, site, comentario, data) values ('$nome', '$email', '$site', '$comentario', '$data')");

if($nome == null) {
echo "Favor, inserir o nome";
exit ();
}
if($email == null) {
echo "Favor, inserir e-mail";
exit ();
}
if($comentario == null) {
echo "Favor, inserir seu comentario";
exit ();
}

if($inserir > 0){
echo "<script>window.location.href='comentarios.php'</script>";
}

?>

 

comentarios.php

 

<html>
<head>
</head>
<body>

<?php

$conexao = mysql_connect("dbmy0013.whservidor.com" , "raindropwe" , "********");
$banco = mysql_select_db("raindropwe");

?>

<?php

$sql = "select * from comentarios order by id desc";
$executar = mysql_query ($sql);
while ($exibir = mysql_fetch_array ($executar)){;

echo "<strong>Nome:</strong>".$exibir ["nome"];
echo "<br/>";
echo "<strong>E-mail:</strong>".$exibir ["email"];
echo "<br/>";
echo "<strong>Site/Blog:</strong>".$exibir ["site"];
echo "<br/>";
echo "<strong>Data:</strong>".$exibir ["data"];
echo "<br/>";
echo "<strong>Comentário:</strong>".$exibir ["comentario"];
echo "<br/><br /><br />";
}
?>

<br /><br /><br />

<form name="form" method="post" action="enviar_coment.php" enctype="multipart/form-data"> 
Nome: <input type="text" name="nome"> 
<br /> 
E-mail: <input type="text" name="email">  
<br /> 
Site/Blog: <input type="text" name="site">  
<br /> 
Comentário: <textarea name="comentario"> 
</textarea> 
<br /> 
<input type="submit" value="postar"> 
</form> 

</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal seria você armazenar, no banco, junto com o comentário o ID da noticia ao qual ele se refere.

Dessa forma, na hora de exibir os comentários você só selecionaria do banco os comentários com o ID da noticia que estiver sendo exibida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal seria você armazenar, no banco, junto com o comentário o ID da noticia ao qual ele se refere.

Dessa forma, na hora de exibir os comentários você só selecionaria do banco os comentários com o ID da noticia que estiver sendo exibida.

 

eu fiz isso...na tabela dos comentarios, coloquei o campo "noticias_id" e a id da noticia la...mas nao funciona...qual a maneira correta de fazer isso?

 

e eu lembro q no antigo Haloscan, mudava um numero no link pro comentario, e a pagina zerava dai...tentei achar como fazer isso, mas não consegui, tem alguma idéia?

Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cheshirechat,

 

Vou tentar dar-lhe uma mãozinha...

 

Na sua tabela do banco de dados, crie um campo para armazenar a ID da notícia.

No formulário onde o usuário preenche os campos para enviar o formulário crie um "hidden field" (campo oculto) com o value (valor) correspondente ao ID da notícia.

 

Aí na hora de inserir a notícia faça assim:

$inserir = mysql_query("INSERT INTO comentarios (idnoticia, nome, email, site, comentario, data) values ('$idnoticia', '$nome', '$email', '$site', '$comentario', '$data')");

E na hora de exibir os comentários referente a notícia, faça assim:

$exibir = mysql_query("SELECT * FROM comentarios WHERE idnoticia='$IDNOTICIA' ORDER BY id DESC");

 

INFORMAÇÕES IMPORTANTES:

Nos códigos acima, onde estiver IDNOTICIA minúsculo, corresponde ao nome do campo na tabela.

Onde estiver IDNOTICIA maiúsculo, corresponde a varíavel que pega o ID da notícia.

 

 

CORREÇÃO DO SEU SCRIPT:

Crie na tabela um campo chamado IDNOTICIA e altere os arquivos conforme descrito nos códigos abaixo.

 

enviar_coment.php

<?
$conexao = mysql_connect("dbmy0013.whservidor.com" , "raindropwe" , "********");
$banco = mysql_select_db("raindropwe");
?>

<?
$nome = $_POST['nome'];
$email = $_POST['email'];
$site = $_POST['site'];
$comentario = $_POST ['comentario'];
$data = date('Y-m-d');
$inserir = mysql_query("insert into comentarios (idnoticia, nome, email, site, comentario, data) values ('$idnoticia', '$nome', '$email', '$site', '$comentario', '$data')");

if($nome == null) {
echo "Favor, inserir o nome";
exit ();
}
if($email == null) {
echo "Favor, inserir e-mail";
exit ();
}
if($comentario == null) {
echo "Favor, inserir seu comentario";
exit ();
}

if($inserir > 0){
echo "<script>window.location.href='comentarios.php'</script>";
}

?>

 

comentarios.php

<html>
<head>
</head>
<body>

<?php

$conexao = mysql_connect("dbmy0013.whservidor.com" , "raindropwe" , "********");
$banco = mysql_select_db("raindropwe");

?>

<?php

$sql = "select * from comentarios where idnoticia='$id' order by id desc";
$executar = mysql_query ($sql);
while ($exibir = mysql_fetch_array ($executar)){;

echo "<strong>Nome:</strong>".$exibir ["nome"];
echo "<br/>";
echo "<strong>E-mail:</strong>".$exibir ["email"];
echo "<br/>";
echo "<strong>Site/Blog:</strong>".$exibir ["site"];
echo "<br/>";
echo "<strong>Data:</strong>".$exibir ["data"];
echo "<br/>";
echo "<strong>Comentário:</strong>".$exibir ["comentario"];
echo "<br/><br /><br />";
}
?>

<br /><br /><br />

<form name="form" method="post" action="enviar_coment.php" enctype="multipart/form-data"> 
Nome: <input type="text" name="nome"> 
<br /> 
E-mail: <input type="text" name="email">  
<br /> 
Site/Blog: <input type="text" name="site">  
<br /> 
Comentário: <textarea name="comentario"> 
</textarea> 
<br /> 
<input type="submit" value="postar"> 
</form> 

</body>
</html>
No código do arquivo acima, no query SELECT, o "$id" corresponde a variável onde está armazenado o ID da NOTÍCIA.

 

 

OBS: Eu não verifiquei se seu arquivo tinha erro em alguma parte do código, apenas alterei as consultas SQL.

 

 

Espero ter ajudado!

Qualquer dúvida não deixe de postar!

 

 

Um abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmmm entendi...vou testar, mas só uma dúvida antes...esse value no campo hidden do formulário eu vo ter de alterar sempre manualmente? e sempre na página comentarios.php? nesse caso, quando eu mudar o valor, então noticias antigas nao poderao mais ser comentadas?

 

muito obrigada! eu ja tinha recebido a dica do id da noticia, agora entendi bem como funciona, só tenho essa dúvida mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

CheshireChat,

 

O value do campo hidden você passa por echo no PHP.

 

Vou lhe dar as 2 possibilidades que você tem de fazer.

 

1ª Possibilidade:

Com campo hidden.

<input name="idnoticia" type="hidden" value="<?php echo "$id"; ?>" />
No exemplo acima, você cria um campo oculto no formulário com o id da notícia.

 

2ª Possibilidade:

Sem campo hidden.

<form name="formcomentarios" method="post" action="arquivo-que-insere-comentario.php?idnoticia=<?php echo "$id"; ?>">
No exemplo acima, você envia o valor da id diretamente pelo URL.

 

 

Em ambas possibilidades o ID é automatico e passado pela URL. Por exemplo:

noticia.php?id=10, colocando um $id = $_REQUEST["id"]; no seu arquivo noticia.php ele identificará que a variável $id = 10. Automático quando o usuário vai ler a notícia!

 

 

Espero ter ajudado!

Qualquer dúvida, não deixe de postar!

 

 

Um abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahhh então é assim! eu só preciso acrescentar esse $id = $_REQUEST["id"] dai? Certo...no caso, minhas notícias nao possuem uma página própria cada uma, porque eu fiz o sistema bem simples...no caso do meu site, isso não é necessário, espero que isso nao atrapalhe...atrapalha?

 

e no caso, o campo idnoticias precisa ser auto-increment? porque ele não permite 2 campos com esse valor...dai eu preciso alterar o id então?

 

desculpe as dúvidas, ainda so meio nova nesse negócio de mysql! obrigada pela atenção!

 

esquece a pergunta do auto-increment, ja entendi...

 

desculpe a ignorancia mas...aonde eu jogo o $id = $_REQUEST["id"]? segue o code da minha pagina de noticias:

 

posts.php

 

<?php

$conexao = mysql_connect("dbmy0013.whservidor.com" , "raindropwe" , "rain1132");
$banco = mysql_select_db("raindropwe");

?>

<?php

$sql = "select * from noticias order by id desc";
$executar = mysql_query ($sql);
while ($exibir = mysql_fetch_array ($executar)){;

echo "<table class=style border=0 cellpadding=0 cellspacing=0 width=515><tr>";
echo "<td  valign=top><div id=table-post>".$exibir ["titulo"];".</div>";

echo "<br /><div id=complemento><a href=http://www.thetudors.com.br/comentarios.php>Comentarios</a> ~ ".$exibir ["data"];".</div></td></tr>";

echo "";
echo"<tr><td><div id=posts>".$exibir ["texto"];".</div></td></tr>";
echo "</table>";

echo "<br /><br /><br />";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Levando em consideração que a página comentarios.php faça o trabalho de exibir e postar os comentarios, faça a seguinte alteração.

 

Na seguinte linha do arquivo posts.php:

echo "<br /><div id=complemento><a href=http://www.thetudors.com.br/comentarios.php>Comentarios</a> ~ ".$exibir ["data"];".</div></td></tr>";

altere para:

echo "<br /><div id=complemento><a href=http://www.thetudors.com.br/comentarios.php?id=".$exibir[id].">Comentarios</a> ~ ".$exibir[data]."</div></td></tr>";

E então no arquivo comentario.php você colocará:

$id = $_REQUEST["id"]

E ai é só fazer como foi dito pelo Cícero. Usar a variável $id para fazer o SELECT no banco e como um campo hidden no formulario de postagem.

Se tiver algum problema posta o codigo do arquivo comentarios.php. Só não esqueça de alterar o usuário e senha do banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá, eu fiz como tu sugeriu mas ainda assim...os comentários continuam valendo para as duas postagens! vou postar os codes aqui, e nessa url, pode entrar na pagina dos posts e eh soh clicar no link comentarios de ambos os posts: http://www.thetudors.com.br/posts.php

 

os dois estão funcionando perfeitamente, não ocorre nenhum erro durante as postagens, e são arquivados devidamente no banco de dados...devo ter errado alguma coisa no que vcs me passaram pra resolver o problema ou qual a sugestão?

 

a id ali do comentario realmente esta o numero da id do post mas...porque o comentario postado ainda vale para as duas notícias?

 

obrigada pela atenção!

 

 

posts.php

 

<?php

$conexao = mysql_connect("dbmy0013.whservidor.com" , "raindropwe" , "***");
$banco = mysql_select_db("raindropwe");

?>

<?php

$sql = "select * from noticias order by id desc";
$executar = mysql_query ($sql);
while ($exibir = mysql_fetch_array ($executar)){;

echo "<table class=style border=0 cellpadding=0 cellspacing=0 width=515><tr>";
echo "<td  valign=top><div id=table-post>".$exibir ["titulo"];".</div>";

echo "<br /><div id=complemento><a href=http://www.thetudors.com.br/comentarios.php?id=".$exibir[id].">Comentarios</a> ~ ".$exibir ["data"];".</div></td></tr>";

echo "";
echo"<tr><td><div id=posts>".$exibir ["texto"];".</div></td></tr>";
echo "</table>";

echo "<br /><br /><br />";
}
?>

 

enviar_post.php

 

<?
$conexao = mysql_connect("dbmy0013.whservidor.com" , "raindropwe" , "***");
$banco = mysql_select_db("raindropwe");
?>

<?
$titulo = $_POST['titulo'];
$nome = $_POST['nome'];
$texto = $_POST['texto'];
$data = date('Y-m-d');
$inserir = mysql_query("insert into noticias (titulo, nome, data, texto) values ('$titulo', '$nome', '$data', '$texto')");
if($titulo == null) {
echo "Favor, inserir o título do post";
exit ();
}
if($nome == null) {
echo "Favor, inserir seu nome";
exit ();
}
if($texto == null) {
echo "Favor, inserir seu texto";
exit ();
}
if($inserir > 0){
echo "Post efetuado com sucesso!";
}else{ "Ops! Ocorreu algum erro, verifique a sua postagem!";
}
?>

 

 

comentarios.php

 

<?php

$conexao = mysql_connect("dbmy0013.whservidor.com" , "raindropwe" , "***");
$banco = mysql_select_db("raindropwe");

?>

<?php

$sql = "select * from comentarios where idnoticia='$id' order by id desc limit 10";
$resultado = mysql_query($sql)
or die ("Não foi possível realizar a consulta ao banco de dados");

while ($linha=mysql_fetch_array($resultado)) {

$nome = $linha["nome"];
$site = $linha["site"];
$data = $linha["data"];
$comentario = $linha["comentario"];

$id = $_REQUEST["id"];

$novadata = substr($data,8,2) . "/" .substr($data,5,2) . "/" . 
substr($data,0,4);
$novahora = substr($hora,0,2) . "h" .substr($hora,3,2) . "min";

echo "<b>$nome</b> ~ $site ~ $novadata";
echo "<div id=box2>$comentario</div>";
echo "<br /><br />";

}
?>

<br /><br /><br />

<form name="form" method="post" action="enviar_coment.php" enctype="multipart/form-data"> 
<table border="0">
<input name="idnoticia" type="hidden" value="<?php echo "$id"; ?>" />
<tr><td><b>Nome</b>:</td> <td><input type="text" name="nome" size="35"></td></tr> 
<tr><td><b>E-mail</b>:</td> <td><input type="text" value="nao sera mostrado" name="email" size="35"> </td></tr> 
<tr><td><b>Site/Blog</b>:</td> <td><input type="text" name="site" size="35"> </td></tr> 
<tr><td><b>Comentário</b>:</td> <td><textarea name="comentario" cols="35" rows="7"></textarea> </td></tr>   
<tr><td colspan="2" align="right"><input type="submit" class="botao" value="Comentar!"> </td></tr>
</table>
</form> 

 

enviar_coment.php

 

<?
$conexao = mysql_connect("dbmy0013.whservidor.com" , "raindropwe" , "***");
$banco = mysql_select_db("raindropwe");
?>

<?
$nome = $_POST['nome'];
$email = $_POST['email'];
$site = $_POST['site'];
$comentario = $_POST ['comentario'];
$data = date('Y-m-d');
$inserir = mysql_query("insert into comentarios (idnoticia, nome, email, site, comentario, data) values ('$idnoticia', '$nome', '$email', '$site', '$comentario', '$data')");

if($nome == null) {
echo "Favor, inserir o nome";
exit ();
}
if($email == null) {
echo "Favor, inserir e-mail";
exit ();
}
if($comentario == null) {
echo "Favor, inserir seu comentario";
exit ();
}

if($inserir > 0){
echo "<script>window.location.href='comentarios.php'</script>";
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, na página comentarios.php a linha $id = $_REQUEST['id'] deve vir antes do $sql.

 

Só não esquece de receber e enviar o id da noticia na enviar_coment.php também.

 

Outra coisa é que, nesta mesma página, você faz as verificações nos parametros recebidos mas você o faz depois de ja ter passado a query pro MySql, acho que o ideal seria só passar a query caso tudo esteja correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, funcionou, os comentários ficam somente para aquela notícia, e quando eu posto uma nova, aparece uma página zerada!

 

mas a única coisa é que assim que posta o comentário, ele não aparece, eu preciso voltar para a página posts.php e entrar de novo na comentarios.php para o comentario aparecer...é assim mesmo ou tem alguma coisa que eu precise arrumar ainda para que o comentário apareça na hora, não precisando entrar na página novamente?

 

mesmo tendo outros comentarios ja postados, quando posta um novo, todos somem, dai ao entrar de novo na página, eles aparecem...

 

creio que agora é só dar essa arrematada, pois está funcionando perfeitamente os comentários ficarem para as respectivas noticias!

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, funcionou, os comentários ficam somente para aquela notícia, e quando eu posto uma nova, aparece uma página zerada!

 

mas a única coisa é que assim que posta o comentário, ele não aparece, eu preciso voltar para a página posts.php e entrar de novo na comentarios.php para o comentario aparecer...é assim mesmo ou tem alguma coisa que eu precise arrumar ainda para que o comentário apareça na hora, não precisando entrar na página novamente?

 

mesmo tendo outros comentarios ja postados, quando posta um novo, todos somem, dai ao entrar de novo na página, eles aparecem...

 

creio que agora é só dar essa arrematada, pois está funcionando perfeitamente os comentários ficarem para as respectivas noticias!

 

Tenta colocar isso na ultima página que está a utilizar:

 

<?php

echo "<meta HTTP-EQUIV='refresh' CONTENT='0'>";

?>

 

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.