Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal.
Bom, estou quebrando a cabeça, tentando criar um sistema de mensagem pessoal mas não estou conseguindo criar por completo...
Preciso de uma lógica.
Tenho uma página de busca, onde o usuário busca o nome de uma pessoa, e quando clica no nome da pessoa, abre uma página e um formulário para enviar a mensagem à essa pessoa. Mas ao enviar a pessoa, programei para que se existisse uma mensagem sua ou da pessoa, aparece uma mensagem como "Você já está em uma conversa com Fulano. Clique aqui para ver a conversa."
Quando a pessoa clicar no link, abre uma outra página com as mensagens da pessoa e um formulário para responder a mensagem.
Há uma outra página também onde aparecem todos os nomes das pessoas que enviaram mensagens e o número de mensagens, como: "Fulano (2), Ciclano (4)" e assim vai...
O ruim é que eu não estou conseguindo criar esse sistema. Quando eu começo a mecher com os selects e as variáveis eu me perco todo e mesmo comentando o código eu me atrapalho. Talvez eu não esteja utilizando a lógica correta.
Minha tabela é a seguinte:
Tenho 1 tabela onde está o nome do usuário cadastrado, id e dados pessoais.
Outra tabela onde armazena as mensagens e outros dados:
Estrutura da tabela msgs
--msgs (
id int(11) NOT NULL AUTO_INCREMENT,
lida enum('S','N') NOT NULL DEFAULT 'N',
idremetente varchar(50) NOT NULL,
iddestinatario varchar(50) NOT NULL,
nomeremetente varchar(100) NOT NULL,
nomedestinatario varchar(100) NOT NULL,
mensagem varchar(300) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=36 ;
--
--
Pesquisei muito sobre como fazer mas não consegui achar alguma coisa.
Obrigado pela atenção.
Olá novamente pessoal.
Durante algumas horas trabalhando, fiz alguns testes e criei o seguinte sistema:
arquivo usermensagens.php que lista as conversas do usuário:
<?php
$a = mysql_query("SELECT DISTINCT idremetente, iddestinatario FROM msgs WHERE nomedestinatario = '$listnome' AND lida = 'N'");
//$listnome é o nome do usuário logado
while($aa = mysql_fetch_array($a)){
$cont = mysql_query("SELECT * FROM msgs WHERE idremetente = '$aa[idremetente]' AND lida = 'N'");
$controws = mysql_num_rows($cont);
$b = mysql_query("SELECT * FROM fichas WHERE id = '$aa[idremetente]'");
$bb = mysql_fetch_array($B)/>/>;
if($bb['foto']==""){
echo "<img class=\"imag\" src=\"img/aa.png\" />";
}else{
echo "<img class=\"imag\" src=\"$bb[foto]\" />";
}
echo "<p>";
echo "Nome: <a href=\"listmensagens.php?pss=$aa[idremetente]\">$bb[text1] ($controws)</a><br />";
echo "Localidade: $bb[text2]<br />";
echo "Profissão: $bb[text6], ";
echo "$bb[text9]";
echo "</p><br />";
echo "<hr style=\"width:500px; margin-right:397px;\"><br />";
}
$aff = mysql_query("SELECT DISTINCT idremetente, iddestinatario FROM msgs WHERE nomedestinatario = '$listnome' AND lida = 'N'");
$aaff = mysql_fetch_array($aff);
$iremetente = $aaff['idremetente'];
$idestinatario = $aaff['iddestinatario'];
$test = mysql_query("SELECT * FROM msgs WHERE idremetente = '$iremetente' AND iddestinatario = '$idestinatario'");
$rowstest = mysql_num_rows($test);
if($rowstest=="0"){
$a2 = mysql_query("SELECT DISTINCT iddestinatario, idremetente FROM msgs WHERE nomeremetente = '$listnome'");$b2 = mysql_query("SELECT * FROM fichas WHERE id = '$aa2[iddestinatario]'");
$bb2 = mysql_fetch_array($b2);
if($bb2['foto']==""){
echo "<img class=\"imag\" src=\"img/aa.png\" />";
}else{
echo "<img class=\"imag\" src=\"$bb2[foto]\" />";
}
echo "<p>";
echo "Nome: <a href=\"listmensagens.php?pss=$aa2[iddestinatario]\">$bb2[text1]</a><br />";
echo "Localidade: $bb2[text2]<br />";
echo "Profissão: $bb2[text6], ";
echo "$bb2[text9]";
echo "</p><br />";
echo "<hr style=\"width:500px; margin-right:397px;\"><br />";
}
}
?>
e o arquivo listmensagens.php que lista a conversa do usuário com outro usuário. Ainda não obtive sucesso... Tentei com while() mas não consegui:
<?php
$pss = $_GET['pss'];
$a = mysql_query("SELECT * FROM msgs WHERE idremetente = '$listid' OR iddestinatario = '$listid' AND idremetente = '$pss' OR iddestinatario = '$pss'");
//$listid é o id do usuário logado
$aa = mysql_fetch_array($a);
$b = mysql_query("SELECT * FROM msgs WHERE idremetente = '$listid'");
$b2 = mysql_query("SELECT * FROM fichas WHERE id = '$listid'");
$bb = mysql_fetch_array($B)/>/>;
$bb2 = mysql_fetch_array($b2);
if($bb2['foto']==""){
echo "<img class=\"imag\" src=\"img/aa.png\" />";
}else{
echo "<img class=\"imag\" src=\"$bb2[foto]\" />";
}
echo "<ul style=\"margin:0px;\">";
echo "<p>$bb2[text1] disse:<br />";
echo "às 10 e meia<br />";
echo "$bb[mensagem]";
echo "</p></ul>";
echo "<hr style=\"width:500px; margin-right:397px;\"><br />";
$c = mysql_query("SELECT * FROM msgs WHERE idremetente = '$pss'");
$c2 = mysql_query("SELECT * FROM fichas WHERE id = '$pss'");
$cc = mysql_fetch_array($c);
$cc2 = mysql_fetch_array($c2);
if($cc2['foto']==""){
echo "<img class=\"imag\" src=\"img/aa.png\" />";
}else{
echo "<img class=\"imag\" src=\"$cc2[foto]\" />";
}
echo "<ul style=\"margin:0px;\">";
echo "<p>$cc2[text1] disse:<br />";
echo "às 10 e meia<br />";
echo "$cc[mensagem]";
echo "</p></ul>";
echo "<hr style=\"width:500px; margin-right:397px;\"><br />";
$updat = mysql_query("UPDATE msgs SET lida = 'S' WHERE idremetente = '$pss'");
?>
Desculpe pelas variáveis mal nomeadas.
O problema está na listmensagens.php, não consigo criá-la...
Pessoal uma ajuda por favor...
Tenho a tabela msgs:
Estrutura da tabela msgs
--
CREATE TABLE IF NOT EXISTS `msgs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`lida` enum('S','N') NOT NULL DEFAULT 'N',
`idremetente` varchar(50) NOT NULL,
`iddestinatario` varchar(50) NOT NULL,
`nomeremetente` varchar(100) NOT NULL,
`nomedestinatario` varchar(100) NOT NULL,
`mensagem` varchar(300) NOT NULL,
`data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
--
--
Como faço para listar as conversas que o usuário tem em uma página?
Não sei como posso fazer...
Uma ajuda aqui por favor.
Cara você tem que relacionar as tabelas, usando o inner join, com as entidades relacionadas
fica mais facil de programar, e a logica ficará mais clara.Oh a tabela a entidade mensagem vai concerteza
ser uma tabela então a tabela mensagem va ter foreign key do remetente e do destinatario, entendeu...
Pessoal eu preciso de uma ajuda.
Não estou conseguindo criar o código e também a lógica inteira...
Preciso montar um sistema de conversas.
Uma página para listar o nome dos usuários com as conversas somente, pois a página que lista a conversa com o usuário já está criada:
<?php
$a = mysql_query("SELECT * FROM msgrecebida WHERE idremetente = '$listid' AND iddestinatario = '$idremetente' OR idremetente = '$idremetente' AND iddestinatario = '$listid'");
while($aa = mysql_fetch_array($a)){
$ll = $aa['idremetente'];
$b = mysql_query("SELECT * FROM fichas WHERE id = '$ll'");
$bb = mysql_fetch_array($B);
$nome = $bb['text1'];
$mensagem = $aa['mensagem'];
echo "<div class=\"cuf\">";
if($ll !== $_GET['pss']){
echo "<ul style=\"margin-left:0px; padding:10px 10px 0 10px; width:70%; border:5px solid #fff; background:#fff; box-shadow:0 0 5px blue; -moz-box-shadow:0 0 5px blue; -webkit-box-shadow:0 0 5px blue;\">";
}else{
echo "<ul style=\"margin-left:5%; padding:10px 10px 0 10px; width:70%; border:5px solid #fff; background:#fff; box-shadow:0 0 5px #999; -moz-box-shadow:0 0 5px #999; -webkit-box-shadow:0 0 5px #999;\">";
}
if($bb['foto']==""){
echo "<img class=\"imag\" src=\"img/aa.png\" />";
}else{
echo "<img class=\"imag\" src=\"$bb[foto]\" />";
}
echo "<p style=\"font-size:15px;\">";
if($ll !== $_GET['pss']){
echo "<b>Você</b> disse:<br />";
}else{
echo "<a href=\"#\" style=\"float:right; display:inline-block;\">Apagar</a>";
echo "<b>".$nome."</b> disse:<br />";
}
echo "Em data 000000<br /><br />";
echo $mensagem;
echo "</p>";
echo "</ul><br /><br />";
echo "</div>";
}
echo "
<form id=\"form12\" method=\"post\" action=\"processarmp.php\">
<label for=\"mp\"></label>
<textarea name=\"mp\" id=\"mp\" cols=\"45\" rows=\"5\"></textarea><br />
<input style=\"padding:3px;\" type=\"submit\" name=\"submit\" id=\"submit\" value=\"Enviar\" />
<input type=\"hidden\" name=\"id\" id=\"id\" value=\"$_GET[pss]\" />
</form><br />
";
?>
Agora só falta a de listar os usuários... Preciso de uma ajuda.
bom cara como você falou de lógica eu li aqui e ignorei o seu code.
o que pensei agora foram 2 tabelas ligadas uma que é só para colocar as mensagens enviadas e outras as recebidas, mas por que isso apesar de ser a mesma mensagem?
se o usuário que recebeu a mensagem apagar a dele a da pessoa que enviou deve continuar e vice-versa então acho que esse é o primeiro problema que você deve arrumar na tabela.
depois se você não consegui continuar abra um novo tópico.