Ir para conteúdo

Arquivado

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

Helio Webmaster

Sistema de comentários PHP + MySQL

Recommended Posts

Olá pessoal, desenvolvi um sistema de comentários para meu site em PHP e MySQL, juntamente com o banco de dados do PHPMyAdmin, e tudo está funcionando perfeitamente! Porém, os mesmos comentários aparecem em todas as páginas do site, ou seja, em todos os posts/artigos do site. Alguém poderia me dizer como fazer para que o sistema de comentários só exiba os comentários enviados por "aquela página", isto é, pela página que o visitante está? Imagino que isto esteja relaciona a uma identificação (como um id, por exemplo), mas não sei como fazer!

 

Abaixo segue a codificação PHP que utilizei nas páginas para o sistema funcionar:

 

comentarios.php

<?php
$conexao = mysql_connect("servidor", "usuário", "senha");
$banco = mysql_select_db("banco de dados");
?>

<form name="form" method="post" action="enviarcomentarios.php">
<input name="titulo" type="hidden" value="comentarios2" />
Nome: <input type="text" name="nome" />
<br />
E-mail: <input type="text" name="email" />
<br />
Comentário: <textarea name="comentario"></textarea>
<br /><br />
<input type="submit" value="Enviar comentário" />
</form>
<br /><br />

<?
$id = $_REQUEST["id"];
$sql = "select * from comentarios where titulo='$id' order by id desc";
$executar = mysql_query($sql);
while ($exibir = mysql_fetch_array($executar)){;
echo "<strong>Nome: </strong>".$exibir['nome'];
echo "<br/><br/>";
echo "<strong>E-mail: </strong>".$exibir['email'];
echo "<br/><br/>";
echo "<strong>Data de envio: </strong>".$exibir['data'];
echo "<br/><br/>";
echo "<strong>Comentário: </strong>".$exibir['comentario'];
echo $exibir['titulo'];
echo "<br/><hr>";
}
?>

enviarcomentarios.php

<?php
$conexao = mysql_connect("servidor", "usuário", "senha");
$banco = mysql_select_db("banco de dados");
?>
<?php
$nome = $_POST['nome'];
$email = $_POST['email'];
$comentario = $_POST['comentario'];
$data = date("Y-m-d");
$titulo = $_POST['titulo'];
if($nome == null){
echo "Preencha o campo nome!";
exit();
}
if($email == null){
echo "Preencha o campo e-mail!";
exit();
}
if($comentario == null){
echo "Preencha o campo comentário!";
exit();
}
$inserir = mysql_query("insert into comentarios (titulo, nome, email, data, comentario) values ('$titulo', '$nome', '$email', '$data', '$comentario')");
if($inserir > 0){
echo "Comentário enviado com sucesso!";
}else{
echo "Não foi possível enviar o comentário";
}
?>

 

Alguém poderia me ajudar? Agradeço desde já!

XD :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Dexter Morgan, obrigado pela atenção!

 

Mas, poderia me explicar melhor sobre isso, utilizando exemplos das partes que eu preciso modificar em meu código? Disponibilizei o tópico na pergunta para que alguém pudesse me ajudar...

 

Agradeço desde já Dexter Morgan!

 

:D :P :D :P :D :P :D :P :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

ta +- isso

 

<?php
$conexao = mysql_connect("servidor", "usuário", "senha");
$banco = mysql_select_db("banco de dados");
?>

<form name="form" method="post" action="enviarcomentarios.php">
<input name="titulo" type="hidden" value="comentarios2" />
Nome: <input type="text" name="nome" />
<br />
E-mail: <input type="text" name="email" />
<br />
Comentário: <textarea name="comentario"></textarea>
<br /><br />
<input type="submit" value="Enviar comentário" />
</form>
<br /><br />

<?
$id_artigo = $_GET["id_artigo"];
$id = $_REQUEST["id"];
$sql = "select * from comentarios where id_artigo = '$id_artigo' and titulo='$id' order by id desc";
$executar = mysql_query($sql);
while ($exibir = mysql_fetch_array($executar)){;
echo "<strong>Nome: </strong>".$exibir['nome'];
echo "<br/><br/>";
echo "<strong>E-mail: </strong>".$exibir['email'];
echo "<br/><br/>";
echo "<strong>Data de envio: </strong>".$exibir['data'];
echo "<br/><br/>";
echo "<strong>Comentário: </strong>".$exibir['comentario'];
echo $exibir['titulo'];
echo "<br/><hr>";
}
?>

enviarcomentarios.php

<?php
$conexao = mysql_connect("servidor", "usuário", "senha");
$banco = mysql_select_db("banco de dados");
?>
<?php
$id_artigo = $_GET["id_artigo"];
$id_artigo = $_POST['id_artigo'];
$nome = $_POST['nome'];
$email = $_POST['email'];
$comentario = $_POST['comentario'];
$data = date("Y-m-d");
$titulo = $_POST['titulo'];
if($nome == null){
echo "Preencha o campo nome!";
exit();
}
if($email == null){
echo "Preencha o campo e-mail!";
exit();
}
if($comentario == null){
echo "Preencha o campo comentário!";
exit();
}
$inserir = mysql_query("insert into comentarios (id_artigo, titulo, nome, email, data, comentario) values ('id_artigo', '$titulo', '$nome', '$email', '$data', '$comentario')");
if($inserir > 0){
echo "Comentário enviado com sucesso!";
}else{
echo "Não foi possível enviar o comentário";
}
?>

 

lembrando que na sua tabela de cometarios tem que inserir id_artigo beleza testa aí

 

cara coloca os códigos dentro da tag "[ code ]" "[ /code ]"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu cara, vou testar aqui agora! Depois que eu testar eu posto o resultado aqui beleza?

 

Agradeço a atenção e já já posto o resultado, vlw!

 

Aee cara, agora num pega mais nada, não envia o comentário, e ainda aparece a seguinte mensagem de erro:

 

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/fonteweb/public_html/comentarios2.php on line 32

 

:!:

 

Aee cara, agora num pega mais nada, não envia o comentário, e ainda aparece a seguinte mensagem de erro:

 

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/fonteweb/public_html/comentarios2.php on line 32

 

:!:

Compartilhar este post


Link para o post
Compartilhar em outros sites

posta o comentarios2.php completo para ver a linha 32

 

você alterou sua tabela sql? pq tem que colocar id_artigo na tabela ou ou id do artigo nao sei como esta o id da tabela artigo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leitura recomendada: Relacionamento entre tabelas SQL e chaves estrangeiras

Aqui tem um link, mas pesquise em outros. Não é difícil entender.

:seta: http://www.macoratti.net/cursql2.htm

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela atenção Dexter Morgan e Rick.hjpbarcelos, porém, ainda estou com problemas!

 

Não está sendo exibida nenhuma mensagem de erro na página, envia corretamente as informações do comentário para o banco de dados, para a tabela, entretanto, não está exibindo os resultados na página. Acredito que seja algum problema com as variáveis "$exibir", "$executar" ou "$sql", que não estão conseguindo exibir os comentários enviados. Ou talvez o comando que identifica a id do artigo talvez não esteja funcionando! Poderia me ajudar?

 

A codificação atual segue abaixo:

 

comentarios2.php

 

<?php
$conexao = mysql_connect("servidor", "usuário", "senha");
$banco = mysql_select_db("banco de dados");
?>

<form name="form" method="post" action="enviarcomentarios.php">
<input name="titulo" type="hidden" value="comentarios2" />
Nome: <input type="text" name="nome" />
<br />
E-mail: <input type="text" name="email" />
<br />
Comentário: <textarea name="comentario"></textarea>
<br /><br />
<input type="submit" value="Enviar comentário" />
</form>
<br /><br />

<?
$id = $_POST["id"];
$sql = "select * from comentarios where titulo = '$titulo' and titulo='$id' order by id desc";
$executar = mysql_query($sql);
while ($exibir = mysql_fetch_array($executar)){;
echo "<strong>Nome: </strong>".$exibir['nome'];
echo "<br/><br/>";
echo "<strong>E-mail: </strong>".$exibir['email'];
echo "<br/><br/>";
echo "<strong>Data de envio: </strong>".$exibir['data'];
echo "<br/><br/>";
echo "<strong>Comentário: </strong>".$exibir['comentario'];
echo $exibir['titulo'];
echo "<br/><hr>";
}
?>

 

enviarcomentarios.php

 

<?php
$conexao = mysql_connect("servidor", "usuário", "senha");
$banco = mysql_select_db("banco de dados");
?>

<?php
$titulo = $_POST['titulo'];
$nome = $_POST['nome'];
$email = $_POST['email'];
$comentario = $_POST['comentario'];
$data = date("Y-m-d");
$titulo = $_POST['titulo'];
if($nome == null){
echo "Preencha o campo nome!";
exit();
}
if($email == null){
echo "Preencha o campo e-mail!";
exit();
}
if($comentario == null){
echo "Preencha o campo comentário!";
exit();
}
$inserir = mysql_query("insert into comentarios (titulo, nome, email, data, comentario) values ('$titulo', '$nome', '$email', '$data', '$comentario')");
if($inserir > 0){
echo "Comentário enviado com sucesso!";
}else{
echo "Não foi possível enviar o comentário";
}
?>

 

Sinceramente creio que o problema esteja relacionado à função "while", talvez por não estar conseguindo exibir os resultados. Alguém que saiba "filtrar" o que será exibido, ou seja, apenas os comentários enviados pela página que o usuário está, poderia me ajudar?

 

Obrigado pela atenção e colaboração Dexter Morgan e Rick.hjpbarcelos, aguardo seus retornos!

 

XD B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

ali ta estranho na parte que exibe e tem um ponto que começa e nao tem outro fechando, também tem ; ali no while

{;

ta errado faz assim

 

<?php
$sql = "select * from comentarios where titulo = '$titulo' and titulo='$id' order by id desc";
$resultado = mysql_query($sql) or die (mysql_error());
if(mysql_num_rows($resultado) < 1) {
echo "Erro";
}
else {
while ($linha = mysql_fetch_array($resultado)) {
$id = $linha["id"];
$titulo = $linha["titulo"];
$nome = $linha["nome"];
$email = $linha["email"];
$data = $linha["data"];
$comentario = $linha["comentario"];

echo "<strong>Nome: </strong>$nome";
echo "<br/><br/>";
echo "<strong>E-mail: </strong>$email";
echo "<br/><br/>";
echo "<strong>Data de envio: </strong>$data";
echo "<br/><br/>";
echo "<strong>Comentário: </strong>$comentario";
echo "$titulo";
echo "<br/><hr>";
}
}
?>

 

ve se funfa :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Executa direto no phpMyAdmin o sql que Dexter passou. Se der erro no sql também no phpMyAdmin, manda a estrutura das duas tabelas, a de post/artigo e de comentários.

No while não tem nenhum problema aparentemente, só vai der erro nele quando a query não retornar nenhum resultado, ao o mysq_fetch_array exibe um erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Manda a estrutura das tabelas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

:( Pessoal criei duas páginas para testar, uma com o seguinte endereço: http://www.fonteweb.com/comentarios.php,'>http://www.fonteweb.com/comentarios.php, e a outra com o seguinte endereço: http://www.fonteweb.com/comentarios2.php

 

http://www.fonteweb.com/comentarios.php

http://www.fonteweb.com/comentarios2.php

 

O que está acontecendo agora é o seguinte: Só são exibidos na página "comentarios2.php" os comentários que forem enviados pela outra página, "comentarios.php". E o que é enviada por ela mesma não aparece, só vai para o banco de dados.

 

Acho que estamos chegando perto, mas não sei aonde está o erro!

Alguém poderia rever os códigos e entrar nos endereços que eu disponibilizei acima para fazer um teste, para tentar me ajudar?

 

Agradeço desde já (to cansando... brink 's - kk ') :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Enviei o comentário "teste fodão" e está aparecendo nas duas páginas... o problema está na hora de inserir o comentário e na hora de buscar. Como já pedimos, mande a estrutura das duas tabelas.

 

 

Achei um problema, na comentarios2.php você tem a tag input

 

<input name="titulo" type="hidden" value="comentarios2" />

 

na página comentarios.php você não tem essa tag, então está salvando errado, e na hora de buscar não está definindo qual é artigo a busca.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dexter, você já parou pra pensar que, por exemplo, nesta página "comentarios2.php", o "while" ou a qualquer outra função que exiba os comentários, eu quero que esta função só exiba os comentários enviados por essa página, nesse caso, identificados por "comentarios2", que é uma informação enviada para o banco de dados através do "hidden field (campo oculto)" do formulário. Porém, estas variáveis "$id" e "$titulo" não estão identificando estas informações. Para reparar, procure no código se em alguma parte dos comandos de exibição dos comentários aparece a identificação definida como "comentarios2", assim você perceberá que ela não se encontra na codificação, apenas na parte do envio do formulario (campo oculto), que chega ao banco de dados. Eu acho que assim, o sistema não consegue identificar quais comentários ele deve exibir, o que talvez possa estar causando o problema. Estou dizendo isso como um complemento para talvez te ajudar a refletir sobre uma coisa que eu acabei de pensar.

 

Fico no aguardo! Vlw por tudooo!

 

XD :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sei qual é o problema e até já foi especificado acima, se mandar a estrutura da tabela, posso mostrar o que tem que ser feito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode copiar o comando Create Table de cada tabela.

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.