Ir para conteúdo

Arquivado

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

arldin

Muda o staus

Recommended Posts

Boa noite amigos eu tenho um script de chat semelhante ao do face de uma video aula do Lucas Silva do site http://www.downsmaster.com.br

só que não esta fazendo o UPDATE 'mensagens' SET lido = '1' sei que o problema esta no functions.js

este e o codico

$(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];
				}
			}
		}
	});
	
	$('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);
})

e este e o script que pede o UPDATE

<?php
	session_start();
	include_once "../config.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_nome = BD::conn()->prepare("SELECT nome FROM `usuarios` WHERE id = ?");
			$pegar_nome->execute(array($_SESSION['id_user']));
			$ft = $pegar_nome->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->nome.' 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 `usuarios` 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 `usuarios` 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 == ''){
				if(isset($retorno['mensagens']))
					$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()){
						$nome = BD::conn()->prepare("SELECT nome FROM `usuarios` WHERE id = ?");
						$nome->execute(array($ft->id_de));
						$name = $nome->fetchObject();
						
						$mensagem .= '<li><span>'.$name->nome.' 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;
		
		
	}
	
?>

Ja quebrei a cabeça tentano resolver


Desculpe pelo erro do titulo que Mudar o Status

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está tentando atualizar um campo inteiro com um varchar:

SET lido = '1'

E utilizando apóstrofo em vez de crase para o nome da tabela:

UPDATE 'mensagens'

O correto seria:

$mudar_st = BD::conn()->prepare("UPDATE `mensagens` SET lido = 1 WHERE id_de = ? AND id_para = ?");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo o problema não esta nesta parte do script php e sim no functions.js vou te explicar o porque eu estava usando o mesmo tipo de script para este objetivo. No anterior ele fazia este UPDATE eu estava usando o jquery.js so que este não amostrava os usarios online. Neste atual tive que mudar algumas partes do functions.js, para pode amostrar os usuarios online e estou usando o jquery.min.js e depois das mudanças ele não faz o UPDATE


Mesmo fazendo a mudança que voce sugeriu continua não fazendo UPDATE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver no functions.js nesta parte

$('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];
				}
			}
		}
	});

eu fiz a seguinte alteração

$('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});
	});

Quando clica 2 vezes ele faz o UPDATE

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.