Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
eu posto e quando eu posto a minha pagina atualiza revelando para mim o que foi que eu escrevi
mas quando outra pessoa me posta a minha pagina nao atualiza e acabo nao vendo os post em tempo real.
Qual sera a logica disso?
>
Faz a busca via Ajax procurando no banco de dados se for encontrado MSG nova ela é exibida, determine um intervalo de tempo para a pesquisa.
KKK muito bom man ja tinha pensado nisso mas achama que deveria ser desnecessario, mas vejo que nem tudo vem pensado nao e mesmo ?
O negocio e assim:
SE msg nova na tabela 1 no campo msg ;
mostrar na tela;
senao ficar pianinho rs.
TKS QRA sempre a disposiçao e nois se precisar fala ai um abraço
Gente a qui esta um sistema para chat.php eu descrevi o que eu acho sobre as linhas
mas, tem uma coisa que não intendi ainda, a forma de trabalhar com a sessions e por que tanta condição if de !isset?
por que se nao !isset ele cria a sessao ? outra coisa o que quer dizer isso:
if (!isset($_SESSION['chatHistory'][$chat['from']])) {
$_SESSION['chatHistory'][$chat['from']] = '';
Porque temos dois foreach e um while?
valeu amigos assim que o projeto estiver no ar vou postar o resultado esse chat e igual ao do facebook abraço a todos
<?php
define ('DBPATH','localhost');
define ('DBUSER','root');
define ('DBPASS','');
define ('DBNAME','user');
global $dbh;
$dbh = mysql_connect(DBPATH,DBUSER,DBPASS);
mysql_selectdb(DBNAME,$dbh);
//iniciar sessao
ob_start();
session_start();
$_SESSION['username'];//verificar se alguma coisa foi clicada
if ($_GET['action'] == "chatheartbeat") { chatHeartbeat(); }
if ($_GET['action'] == "sendchat") { sendChat(); }
if ($_GET['action'] == "closechat") { closeChat(); }
if ($_GET['action'] == "startchatsession") { startChatSession(); }
//se nao existir as session como: chatHistory, e openChatBoxes, ele vai criar elas
if (!isset($_SESSION['chatHistory']))
{
$_SESSION['chatHistory'] = array();
}
if (!isset($_SESSION['openChatBoxes'])) $_SESSION['openChatBoxes'] = array();
}
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
function chatHeartbeat()
{
$sql = "select * from chat where (chat.to = '".mysql_real_escape_string($_SESSION['username'])."' AND recd = 0) order by id ASC";
$query = mysql_query($sql);
$items = '';
$chatBoxes = array();
//----------------------------------------------------------------------------------------
//Mostrar um array da tabela chat
while ($chat = mysql_fetch_array($query))
{
//Se não existe
if (!isset($_SESSION['openChatBoxes'][$chat['from']]) && isset($_SESSION['chatHistory'][$chat['from']]))
{
$items = $_SESSION['chatHistory'][$chat['from']]; //criar essa linha
}
// sanitize é um filtro anti ejection
$chat['message'] = sanitize($chat['message']);
/*
Heredoc e Nowdoc são duas formas de representar strings em PHP,
mantendo a quebra de linha e espaço presente no conteúdo de um texto,
o que facilita a criação de strings complexas.
*/
$items .= <<<EOD
{
"s": "0",
"f": "{$chat['from']}",
"m": "{$chat['message']}"
},
EOD;
//se nao existe
if (!isset($_SESSION['chatHistory'][$chat['from']])) {
$_SESSION['chatHistory'][$chat['from']] = '';//criar essa linha
}
$_SESSION['chatHistory'][$chat['from']] .= <<<EODEOD;
unset($_SESSION['tsChatBoxes'][$chat['from']]);
$_SESSION['openChatBoxes'][$chat['from']] = $chat['sent'];
}
//----------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
/*
send leva a data é hora a sessao a sima esta criada com a data dentro dela mas ainda acho estranho ter a chat from nao intendo esse mode
sera programação linear?
acho que nao por que nao tem ; e continua a programação.
mas da para perceber que essa parte do codigo e a responsavel por emitir na tela uma mensagem de texto caso o tempo ultrapasse
180 segundos sem mandar nada estranho isso.
*/
if (!empty($_SESSION['openChatBoxes']))
{
foreach ($_SESSION['openChatBoxes'] as $chatbox => $time)
{
// se nao existir mostrar o tempo e a data
if (!isset($_SESSION['tsChatBoxes'][$chatbox]))
{
$now = time()-strtotime($time);
$time = date('g:iA M dS', strtotime($time));
$message = "Sent at $time";
// se a variavel now for maior que 180 mostrar a mensagem do WHILE que esta a cima
if ($now > 180)
{
$items .= <<<EOD
{
"s": "2",
"f": "$chatbox",
"m": "{$message}"
},
EOD;
//se nao existe
if (!isset($_SESSION['chatHistory'][$chatbox]))
{
$_SESSION['chatHistory'][$chatbox] = '';
}
$_SESSION['chatHistory'][$chatbox] .= <<<EODEOD;
$_SESSION['tsChatBoxes'][$chatbox] = 1;
}
} } }//----------------------------------------------------------------------------------------
$sql = "update chat set recd = 1 where chat.to = '".mysql_real_escape_string($_SESSION['username'])."' and recd = 0";
$query = mysql_query($sql);
if ($items != '')
{
$items = substr($items, 0, -1);
}
header('Content-type: application/json');
?>
{
"items":
[
<?php echo $items; ?>
]
}
<?php
exit(0);
}
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
function chatBoxSession($chatbox)
{
$items = '';
if (isset($_SESSION['chatHistory'][$chatbox]))
{
$items = $_SESSION['chatHistory'][$chatbox];
}
return $items;
}
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
function startChatSession()
{
$items = '';
if (!empty($_SESSION['openChatBoxes']))
{
foreach ($_SESSION['openChatBoxes'] as $chatbox => $void)
{
$items .= chatBoxSession($chatbox);
}
}
if ($items != '')
{
$items = substr($items, 0, -1);
}
header('Content-type: application/json');
?>
{
"username": "<?php echo $_SESSION['username'];?>",
"items": [
<?php echo $items;?>
]
}
<?php
exit(0);
}
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
function sendChat()
{
$from = $_SESSION['username'];
$to = $_POST['to'];
$message = $_POST['message'];
$_SESSION['openChatBoxes'][$_POST['to']] = date('Y-m-d H:i:s', time());
//Filtrar msg sanitize
$messagesan = sanitize($message);
if (!isset($_SESSION['chatHistory'][$_POST['to']]))
{
$_SESSION['chatHistory'][$_POST['to']] = '';
}
$_SESSION['chatHistory'][$_POST['to']] .= <<<EOD
{
"s": "1",
"f": "{$to}",
"m": "{$messagesan}"
},
EOD;
unset($_SESSION['tsChatBoxes'][$_POST['to']]);
$sql = "insert into chat (chat.from,chat.to,message,sent) values ('".mysql_real_escape_string($from)."', '".mysql_real_escape_string($to)."','".mysql_real_escape_string($message)."',NOW())";
$query = mysql_query($sql);
echo "1";
exit(0);
}//----------------------------------------------------------------------------------------
function closeChat()
{
unset($_SESSION['openChatBoxes'][$_POST['chatbox']]);
echo "1";
exit(0);
}
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
function sanitize($text)
{
$text = htmlspecialchars($text, ENT_QUOTES);
$text = str_replace("\n\r","\n",$text);
$text = str_replace("\r\n","\n",$text);
$text = str_replace("\n","<br>",$text);
return $text;
}se quizer ver como esta o projeto acesse loveme.eu.pn, não se esqueça ainda esta em contrução obrigado
Faz a busca via Ajax procurando no banco de dados se for encontrado MSG nova ela é exibida, determine um intervalo de tempo para a pesquisa.