• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

xploit

Sistema de mensagens

24 mensagens neste tópico

Boas pessoal eu gostaria de montar um sistema de mensagens entre utilizadores registados numa base de dados mysql , e que cada utilizador tivesse o seu painel para enviar/ ver mensagens recebidas/ e apagar..

So que não tenho bem a nocção de como fazer isto os campos da BD sao:

USERNAME  | MENSAGENS |

Agora como faço para do campo MENSAGENS listar a mensagem que la estiver com o seu respectivo titulo? e isso que nao percebo como posso fazer...o campo username é para verificar o painel de cada um utilizador.

env_mensagem.php

<?
include "config.php";
include "contador/usersonline.php";
include "confirmar_login.php";
include "variaveis_sessao.php";

if($_GET['acao'] == "enviar") {
$username = $_POST['username'];
$titulo = $_POST['titulo'];
$mensagem = $_POST['mensagem'];

$verifica_user = mysql_query("SELECT * FROM $tabela WHERE username='$username'");
if(mysql_num_rows($verifica_user) == 1) {
while($row=mysql_fetch_array($verifica_user)):
$mensagem_na_bd=$row['mensagem'];//
endwhile;

$poe_mensagem=mysql_query("UPDATE $tabela SET mensagem = '$mensagem' WHERE username = '$username'");

exit;

}else{ echo "O utilizador $username não existe!";

?>

<form action="env_mensagem?acao=enviar" >
<input type="text" name="username " />
<input type="text" name="titulo_mensagem " />
<textarea name"mensagem"></textarea>

Pronto isto é o que eu sei fazer, e que ta mal, primeiro porque eu nao consigo gravar a mensagem e o tópico, e 2 porque com  UPDATE so consigo gravar uma mensagem pois vai apagar aquelas que la estão, E o painel que vai listar as mensagens que estao na BD tambem nao sei como posso fazer se me puderem dar umas luzes agradeçia..obrigado pelas ajudas

Cumprimentos

EDIT|Pedrotuga: usar o geshi para afixar código

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Ora bem, tu tens users e mensagens, logo tens de ter pelo menos 2 tabelas separadas, e para as manuseares melhor é preferível usares ids numéricos para não teres de andar a comparar títulos ou usernames. Existe também o problema de teres 2 titulos iguais ou 2 usernames iguais, e nesse caso, como saberias qual o certo?

Outra coisa que tens de ter em conta é se o user que enviou a mensagem tem direito a ficar com uma cópia ou não, e tens de ter em conta se queres guardar todas as mensagens no sistema ou não.

Depois de decidires isto, diz alguma coisa :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, mas em relação aos users iguais não haverá esse tipo de problemas porque o registo detecta se o username já existe ou não e sugere escolher outro...mas tens razão fica muito melho criar uma tabela dedicada as mensagens.

Criei uma tabela mensagens, com 3 campos o ID, MENSAGEM, TITULO... qual o proximo passo a dar? altero algo?

Obrigado pela ajuda yoda

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sinceramentenão percebi nada da tua dúvida e olhando para o código não percebi o que queres fazer.

Para criares um sistema de mensagens de um utilizador para o outro crias na tabela das mensagens uma coluna com o ID do remetente e uma com o ID do destinatário.

Mas tenta colocar as dúvidas de forma mais clara.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que eu quero é um sistema de mensagens como temos por exemplo no fórum... e quero conselhos/dicas de quem percebe PHP da melhor forma de o fazer... para me orientar no código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas as tuas dúvidas estão mais relacionadas com bases de dados em geral. Começa por aí, senão nunca vais encontrar o norte.

Infelizmente não encontrei nenhuma documentação de jeito em português sobre bases de dados na web. Se tiveres algum colega em eng informatica ou que frequente um curso onde tenha uma cadeira sobre bases de dados, aconselhava-te a pedires-lhe apontamentos ou outro material de estudo.

Ou pode ser que alguma alma generosa aqui no fórum te arranje alguma coisa. Infelizmente não tenho comigo os PDFs que tinha de quando andei a estudar isso :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas para quem sabe nao é um muito complicado.. e a base de SELECT, UPDATE, DELETE para fazer um sistema destes penso eu nao ser dificl nao sei é como ir buscar por exemplo uma mensagem num campo com o seu titulo e mostrala em html ... se houver alguem k perceba bem que me possa ajudar fico muito agradeçido, outra coisa em relaçao as "mensagens enviadas" nao precisa ter essa funcao, de mostrar msg enviadas, e so memso enviar e receber mensagens de utilizadores e que cada um consiga ver as suas mensagens e apagalas e enviar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sei um pouco nao sou nenhum expert, mas safo me... em relaçao ao sistema de mensagens já o fiz sozinho com muito google lol, tem as mensagens enviadas envia mensagens, e caixa de mensagens depois quando tiver mais tempo deixo o código.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas pessoal eu ando com um problema ou melhor uma dúcida em relaçao ao script que eu criei , eu gostava de saber como apagar multiplas mensagens de uma só vez.. cada mensagem tem uma identificacao, que neste caso é a variavel $idmsg, essa identificacao e enviada por POST, e nesse script que recebe executa o DELETE da base de dados.. agora como faco isto para apagar varias ao mesmo tempo?

Apaga_mensagem.php

if($_GET['acao'] == "apagar") {
if($idmsg==""){echo '<head><meta http-equiv="refresh" content="0; URL=mensagens2.php?acao=inbox"></head>';}
$idmsg =$_POST["idmsg"];


$sql=mysql_query("DELETE FROM $tabela_m WHERE idmsg='$idmsg'") ;

echo '<head><meta http-equiv="refresh" content="0; URL=mensagens2.php?acao=inbox"></head>';

die();
}

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Se já souberes receber os vários ids das mensagens que queres apagar, basta colocá-los num array e percorrer o array com while ou foreach, e executar a query a cada vez :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
echo '<head><meta http-equiv="refresh" content="0; URL=mensagens2.php?acao=inbox"></head>';

Eu gosto mais de usar a função header() para redireccionar para outra página:

header('Location: mensagens2.php?acao=inbox');
exit('Redirected to <a href="mensagens2.php?acao=inbox">inbox</a>.');

EDIT: O URL dentro do header() deve ser um URL completo, com "http://" e domínio e tudo.

http://www.w3.org/QA/Tips/reback

~~~~~~~~~~~~~~~~~~~~

basta colocá-los num array e percorrer o array com while ou foreach, e executar a query a cada vez

Ao receberes os vários ids das mensagens que queres apagar, alteras o SQL para apagar as mensagens "WHERE idmsg IN ('$id1', '$id2', ..., '$idN')" e executas uma única chamada à base de dados.

Para construir a lista de ids dentro do IN, podes usar a função explode() do PHP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu tambem gosto do header, mas desde que utilizo o php5 dava me problemas acho que tem que tar acima de qualquer código senao estou em erro... mas o problema todo e enviar para  outra pagina os IDS , nao sei como fazer eu fiz deste jeito:

inbox.php



$db3 = mysql_connect ($host, $login_db, $senha_db);
$basedados3 = mysql_select_db($database);
$seleccao_mensagem=mysql_query("SELECT *FROM $tabela_m WHERE id = '$utilizador_id'");
while($row=mysql_fetch_array($seleccao_mensagem)):
$mensagens=$row['mensagem'];//
$traficante=$row['nome_do_traficante'];//
$idmsg=$row['idmsg'];//
$titulo=$row['titulo'];//
$data=$row['data'];//

$_SESSION["id_mensagem"] = $idmsg;



echo" 
<div class='m_data'>$data</div>
<div class='m_player'>$traficante</div>
<div class='m_assunto'>
<form action='mensagens2.php?acao=read' method='post'>
<input type='hidden' value='array_mensagens[$pos]' name='idmsg' />
<input type='submit' class='link_mensagem' value='$titulo' />
</form></div>
<div class='m_apagar'>
<form action='mensagens2.php?acao=apagar' method='post'>
<input type='checkbox' name='idmsg' value='$idmsg' />
<input type='submit' class='butao_apagar' value='' />$pos
</form></div>";

$pos++;
endwhile;
if($idmsg==""){ 
echo "
<br /><br />
Nao tem mensagens recebidas
<br /><br />
";
}

por cada submit que seja feito vai apenas 1 ID agora gostaria de saber como consigo enviar vários..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tás quase lá ... mas tens vários FORMs no teu script.

Cada form de apagar tem um único checkbox e um botão de submit.

Tens que fazer um form com MUITOS checkboxes e um (ou mais) botão de submit.

Em vez de fazeres o form dentro do ciclo while, fá-lo fora do ciclo. Dentro do ciclo pões só os elementos que precisas:

echo '<form ...>';
while ($row = mysql_fetch_array($seleccao_mensagem)) {
  ...
  echo "<input type='checkbox' name='idmsg[]' value='$idmsg' />";
  echo "<input type='submit' class='butao_apagar' value='' />";
  ...
}
echo '</form>';

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas se criar so um form nao da tem que ser assim, porque ha dois tipos de forms um pa apagar outro para ler... e por isso que fiz dentro do while nao ha problema pois nao? cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

por exemplo:

<form name="ler">

<form name ="apagar">

while{

se puder aqui os inputs e submits como e que cada valor vai saber que form enviar...

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Segundo me parece, o que tu tens é

while (/*database*/) {
  <form read>...</form>
  <form apaga>...</form>
}

Com esta estrutura nunca podes apagar mais de uma mensagem por cada submit.

Cada form só manda para o servidor o que está lá dentro. No teu código cada form "apaga" tem um único checkbox.

Sugestões: para leres uma mensagem podes fazer um link normal; não é preciso um form.

<form apaga>

while (/*database*/) {
  <a href="lermensagem?id=$pos">titulo</a>
  <input checkbox>
}
<input submit>

</form>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu nunca percebi ja agora aproveito o topico para saber como se faz, para receber as variaveis vindas dos links, eu acho que é com GET mas como se faz?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tá tudo explicado no manual:

http://www.php.net/manual/pt_BR/language.variables.external.php

Uma das coisas boas do PHP é o manual (aliás MUITO bom). Aproveita-o! :)

/* ... */
/* suponhamos que o link para chegar aqui foi "lermensagem?id=42" */
$idmsg = (int)$_GET['id']; /* apanha e converte variável */
$sql = "SELECT nome, data, etc FROM mensagem WHERE msgid=$idmsg";
/* ... */

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pmg pela dica =), tou a tentar implementar mas sem sucesso

pagina1.php

   
<a href='pagina2.php?acao=apagar=$idmsg'>apagar</a>

pagina2.php

 
if($_GET['acao'] == "apagar=$idmsg") {

echo "executa código com o valor da variavel $idmsg";
}

ele nao executa o código da pagina2.php : S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta isto na página 2

<?php
echo '<pre>'; print_r($_GET); echo '</pre>';
?>

Isto vai mostrar-te o que o PHP vê quando recebe o URL.

Espero que seja qualquer coisa como

Array
(
    [accao] => apaga=13
)

E o que tu queres havia de ser qualquer coisa como

Array
(
    [apaga] => 13
)

Não te esqueças de validar o número do apaga, senão qualquer gajo pode-se por a fazer experiências e apagar a base de dados toda

pagina2.php?apaga=1
pagina2.php?apaga=2
pagina2.php?apaga=3
pagina2.php?apaga=4
...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só um pequeno reparo... o que tens acima está esquisito e é potencialmente o teu causador de mau funcionamento:

Isto é esquisito:

<a href='pagina2.php?acao=apagar=$idmsg'>apagar</a>

Provavlemente quererás alguma coisa tipo isto:

<a href="pagina2.php?acao=apagar&id=<?php echo $idmsg;" ?>apagar</a>

Repra que mudei mais do que uma coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao sei se preciso fazer isso pk esse link , está dentro do <? ?>, ele é um echo... e por isso que nao percebo o pk de n dar..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora