arldin 1 Denunciar post Postado Março 23, 2015 Boa noite a todos e o seguinte eu tenho um script que cria um chat estilo facebook. Abre um div com os usuarios abre uma janela para mensagens amostra os usuarios que estão online, ate ai tudo certo. Se eu me logo e deixo uma mensagem para um usuario que não esta online, quando este usuario entrar no site abre a janela com a mensagem. ate ai tudo certo. quando o usuario fechar esta janela deveria fazer uma mudança de estado de não lido para lido Esta e a parte do script para mostrar os usuario e começar a conversa <div style="width:85%;float: left;height:75px;top:0px;"> <div id="contatos"> <span class="online" id="<?php echo $_SESSION['id_user'];?>"></span> <ul> <?php $selecionar_se_users = BD::conn()->prepare("SELECT * FROM `se_users` WHERE id != ?"); $selecionar_se_users->execute(array($_SESSION['id_user'])); if($selecionar_se_users->rowCount() == 0){ echo '<p>Desculpla, não há contatos ainda!</p>'; }else{ while($se_users = $selecionar_se_users->fetchObject()){ ?> <li><span class="type" id="<?php echo $se_users->id;?>"></span> <a href="javascript:void(0);" nome="<?php echo $se_users->user_fname;?>" id="<?php echo $se_users->id;?>" class="comecar"> <img width=30 height=30 src="<?php echo $se_users->profImage;?>" id="<?php echo $uploadedimage; ?>" /> <?php echo $se_users->user_fname;?></a></li> <?php }}?> </ul> </div> <div style="position:absolute; top:0; right:0;" id="retorno"><div> <div id="janelas"></div> E este e o script que deveria fazer a mudança de status <?php session_start(); include_once "../config1.php"; require_once('../classes/BD.class.php'); BD::conn(); $acao = $_POST['acao']; switch($acao){ case 'inserir': $para = $_POST['para']; $mensagem = strip_tags($_POST['mensagem']); $pegar_user_fname = BD::conn()->prepare("SELECT user_fname FROM `se_users` WHERE id = ?"); $pegar_user_fname->execute(array($_SESSION['id_user'])); $ft = $pegar_user_fname->fetchObject(); $inserir = BD::conn()->prepare("INSERT INTO `mensagens` (id_de, id_para, data, mensagem, lido) VALUES(?,?,NOW(),?,'0')"); if($inserir->execute(array($_SESSION['id_user'], $para, $mensagem))){ echo '<li><span>'.$ft->user_fname.' disse:</span><p>'.$mensagem.'</p></li>'; } break; case 'verificar': $ids = (isset($_POST['ids'])) ? $_POST['ids'] : ''; $users = (isset($_POST['users'])) ? $_POST['users'] : ''; $retorno = array(); if($users != ''){ foreach($users as $indice => $id_u){ $sel = BD::conn()->prepare("SELECT horario, limite FROM `se_users` WHERE id = ?"); $sel->execute(array($id_u)); $fet = $sel->fetchObject(); $atual = date('Y-m-d H:i:s'); $mais1 = date('Y-m-d H:i:s', strtotime('+1 min')); if($id_u == $_SESSION['id_user']){ $up = BD::conn()->prepare("UPDATE `se_users` SET limite = ? WHERE id = ?"); $up->execute(array($mais1, $id_u)); } if($atual >= $fet->limite) $retorno['useronoff'][$id_u] = 'off'; else $retorno['useronoff'][$id_u] = 'on'; } } if($ids == ''){ $retorno['mensagens'] == ''; }else{ foreach($ids as $indice => $id){ $selecionar = BD::conn()->prepare("SELECT * FROM `mensagens` WHERE id_de = ? AND id_para = ? OR id_de = ? AND id_para = ?"); $selecionar->execute(array($_SESSION['id_user'], $id, $id, $_SESSION['id_user'])); $mensagem = ''; while($ft = $selecionar->fetchObject()){ $user_fname = BD::conn()->prepare("SELECT user_fname FROM `se_users` WHERE id = ?"); $user_fname->execute(array($ft->id_de)); $user_fname = $user_fname->fetchObject(); $mensagem .= '<li><span>'.$user_fname->user_fname.' disse:</span><p>'.$ft->mensagem.'</p></li>'; } $retorno['mensagens'][$id] = $mensagem; } } $verificar = BD::conn()->prepare("SELECT id_de FROM `mensagens` WHERE id_para = ? AND lido = ? GROUP BY id_de"); $verificar->execute(array($_SESSION['id_user'], 0)); if($verificar->rowCount() == 0){ if(isset($retorno['nao_lidos'])) $retorno['nao_lidos'] == ''; }else{ while($user = $verificar->fetchObject()){ $retorno['nao_lidos'][] = $user->id_de; } } $retorno = json_encode($retorno); echo $retorno; break; case 'mudar_status': $user = $_POST['user']; $mudar_st = BD::conn()->prepare("UPDATE `mensagens` SET lido =`1` WHERE id_de = ? AND id_para = ?"); $mudar_st->execute(array($user, $_SESSION['id_user'])); break; } ?> E também tem um js que e este $(document).ready(function(){ var janelas = new Array(); var users = new Array(); function add_janelas(id, nome){ var html_add = '<div class="janela" id="jan_'+id+'"><div class="topo" id="'+id+'"><span>'+nome+'</span><a href="javascript:void(0);" id="fechar">X</a></div><div id="corpo"><div class="mensagens"><ul class="listar"></ul></div><input type="text" class="mensagem" id="'+id+'" maxlength="255" /></div></div>'; $('#janelas').append(html_add); } function abrir_janelas(x){ $('#contatos ul li a').each(function(){ var link = $(this); var id = link.attr('id'); if(id == x){ link.click(); } }); } var antes = -1; var depois = 0; function verificar(){ beforeSend: antes = depois; $('#contatos ul li a').each(function(){ var id_u = $(this).attr('id'); users.push(id_u); }); var u_online = $('span.online').attr('id'); users.push(u_online); $.post('sys/chat.php', {acao: 'verificar', ids: janelas, users: users}, function(x){ if(x.nao_lidos != ''){ var arr = x.nao_lidos; for(i in arr){ abrir_janelas(arr[i]); } } if(janelas.length > 0){ var mens = x.mensagens; if(mens != ''){ for(i in mens){ $('#jan_'+i+' ul.listar').html(mens[i]); } } } var users_onlines = x.useronoff; for(i in users_onlines){ $('#contatos ul li span#'+i+'').removeClass('on off').addClass(users_onlines[i]); } depois += 1; }, 'jSON'); } verificar(); $('.janela').on('click', function(){ var id = $(this).children('.topo').attr('id'); $.post('sys/chat.php',{acao: 'mudar_status', user: id}); }); $('body').on('click', '.comecar', function(){ var id = $(this).attr('id'); var nome = $(this).attr('nome'); janelas.push(id); for(var i = 0; i < janelas.length; i++){ if(janelas[i] == undefined){ janelas.splice(i, 1); i--; } } add_janelas(id, nome); $(this).removeClass('comecar'); return false; }); $('body').on('click', 'a#fechar', function(){ var id = $(this).parent().attr('id'); var parent = $(this).parent().parent().hide(); $('#contatos a#'+id+'').addClass('comecar'); var n = janelas.length; for(i = 0; i < n; i++){ if(janelas[i] != undefined){ if(janelas[i] == id){ delete janelas[i]; } } }verificar(); $.post('sys/chat.php',{acao: 'mudar_status', user: id}); }); $('body').delegate('.topo', 'click', function(){ var pai = $(this).parent(); var isto = $(this); if(pai.children('#corpo').is(':hidden')){ isto.removeClass('fixar'); pai.children('#corpo').toggle(100); }else{ isto.addClass('fixar'); pai.children('#corpo').toggle(100); } }); setInterval(function(){ if(antes != depois){ verificar(); } }, 2000); }) como posso resolver isto Compartilhar este post Link para o post Compartilhar em outros sites
arldin 1 Denunciar post Postado Março 29, 2015 Consegui resolver o erro estava nesta parte case 'mudar_status': $user = $_POST['user']; $mudar_st = BD::conn()->prepare("UPDATE `mensagens` SET lido =`1` WHERE id_de = ? AND id_para = ?"); $mudar_st->execute(array($user, $_SESSION['id_user'])); fiz a mudança para case 'mudar_status': $user = $_POST['user']; $mudar_st = BD::conn()->prepare("UPDATE `mensagens` SET `lido`='1' WHERE `id_de` = ? AND `id_para`= ?"); $mudar_st->execute(array($user, $_SESSION['id_user'])); Agora muda o stats Compartilhar este post Link para o post Compartilhar em outros sites