vhuber 0 Denunciar post Postado Março 4, 2013 Boa tarde, tenho 3 arquivos: ramal.php rpc.php class_ramais.inc.php o rpc eh o intermediario dos 2. no ramal.php tenho um botao que o onclick dele executa uma função JS que se comunica com o rpc.php, até ai tudo bem. Porém agora quero que o proprio rpc.php execute uma classe para que eu retorne no mesmo array o resultado da query rpc.php esta assim: case "cramais": switch ($_REQUEST["cmd"]) { case "executar": $arrayexec = array(); $ramal = $_POST['ramal']; exec("asterisk -rx 'sip show peer ".$ramal."'", $arrayexec); require_once "classes/class_ramais.inc.php"; $chamadas = ramais::chamadasRamal($ramal); $info = array( 'ramal' => $arrayexec[2], 'context' => $arrayexec[6], 'callgroup' => $arrayexec[12], 'pickupgroup' => $arrayexec[13], 'addrip' => $arrayexec[43], 'useragent' => $arrayexec[54], 'regcontact' => $arrayexec[55] ); exit(json_encode($info)); break; } break; As 2 linhas em negrito eh pq quero q ele execute a classe que contem uma query: arquivo class_ramais.inc.php class ramais { public static function chamadasRamal() { $ramal = $_POST['ramal']; $comando_sql = "SELECT * FROM canais_info ci WHERE ci.ramal = $ramal"; $mysql->execute($sql); Porem da o erro: Fatal error: Call to a member function execute() on a non-object in /var/www/html/manager-svn-vhuber/classes/class_ramais.inc.php on line 11 =/ Mudei para return $sql_comando; E aparentemente deu certo, vou testar melhor e aviso Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Março 4, 2013 poste o seu codigo de conexão. coloque codigo em bcode, vc clica no icone '<>' q aparece enquanto vc digita. pq parece q $mysql esta vazio ou recebeu outro valor q n é um objeto. $mysql->execute($sql); Compartilhar este post Link para o post Compartilhar em outros sites
vhuber 0 Denunciar post Postado Março 5, 2013 poste o seu codigo de conexão. coloque codigo em bcode, vc clica no icone '<>' q aparece enquanto vc digita. pq parece q $mysql esta vazio ou recebeu outro valor q n é um objeto. $mysql->execute($sql); Bom dia, cheguei a alterar a classe para: class ramais { public static function chamadasRamal() { global $mysql; $ramal = $_POST['ramal']; $comando_sql = "SELECT * FROM canais_info ci WHERE ci.ramal = $ramal"; $sql = mysql_query($comando_sql); return $sql; } } Agora quero pegar esse valor dentro do rpc.php para jogar dentro do array info ja existente: O trecho do rpc ta assim: require_once "classes/class_ramais.inc.php"; $chamadas = ramais::chamadasRamal(); $info = array( 'ramal' => $arrayexec[2], 'context' => $arrayexec[6], 'callgroup' => $arrayexec[12], 'pickupgroup' => $arrayexec[13], 'addrip' => $arrayexec[43], 'useragent' => $arrayexec[54], 'regcontact' => $arrayexec[55] ); exit(json_encode($info)); break; Esse $arrayexec eh resultado de outra coisa já. Porem como soh posso retornar um json, quero colocar o resultado da query dentro do array Fiz alguma alterações, porém da esse erro do json: Warning: json_encode(): type is unsupported, encoded as null in /var/www/html/manager-svn-vhuber/rpc.php on line 1215 {"ramal":null,"context":null,"callgroup":null,"pickupgroup":null,"addrip":null,"useragent":null,"regcontact":null,"ramais":null} A Classe agora esta assim: class ramais { public static function chamadasRamal($ramal) { $comando_sql = "SELECT * FROM canais_info ci WHERE ci.ramal=".$ramal; echo $comando_sql; $sql = mysql_query($comando_sql); return $sql; } } E o rpc ta assim: case "cramais": switch ($_REQUEST["cmd"]) { case "executar": $arrayexec = array(); $ramal = $_POST['ramal']; exec("asterisk -rx 'sip show peer ".$ramal."'", $arrayexec); include_once('classes/class_ramais.inc.php'); $ramais = new ramais(); $chamadas = $ramais->chamadasRamal($ramal); $info = array( 'ramal' => $arrayexec[2], 'context' => $arrayexec[6], 'callgroup' => $arrayexec[12], 'pickupgroup' => $arrayexec[13], 'addrip' => $arrayexec[43], 'useragent' => $arrayexec[54], 'regcontact' => $arrayexec[55], 'ramais' => $chamadas ); exit(json_encode($info)); break; Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Março 5, 2013 uma duvida parecida com a sua: http://stackoverflow.com/questions/6804974/json-ecode-error-from-mysql-result vc primeiro precisa decidir se o metodo vai ser static ou n. altere seu metodo para: public static function chamadasRamal($ramal) { $comando_sql = "SELECT * FROM canais_info ci WHERE ci.ramal=".$ramal; echo $comando_sql; $sql = mysql_query($comando_sql); $lista = array(); while($item = mysql_fetch_assoc($sql){ $lista[] = $item; } return $lista; } Compartilhar este post Link para o post Compartilhar em outros sites
vhuber 0 Denunciar post Postado Março 5, 2013 uma duvida parecida com a sua: http://stackoverflow.com/questions/6804974/json-ecode-error-from-mysql-result vc primeiro precisa decidir se o metodo vai ser static ou n. altere seu metodo para: public static function chamadasRamal($ramal) { $comando_sql = "SELECT * FROM canais_info ci WHERE ci.ramal=".$ramal; echo $comando_sql; $sql = mysql_query($comando_sql); $lista = array(); while($item = mysql_fetch_assoc($sql){ $lista[] = $item; } return $lista; } Shini, e como ficaria para listar na classe dentro do array $indo? Eu quero poder listar separadamente, algo tipo: $item['CANAL'] ou $item['RAMAL'] etc To meio perdido =/ Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Março 5, 2013 $indo? para ver se esta td correto com o retorno da consulta faça: echo "<pre>"; print_r($lista); return $lista; } para listar tudo na classe, fica assim: foreach($lista as $item){ echo $item['CANAL']; } Compartilhar este post Link para o post Compartilhar em outros sites
vhuber 0 Denunciar post Postado Março 5, 2013 $indo? para ver se esta td correto com o retorno da consulta faça: echo "<pre>"; print_r($lista); return $lista; } Listou sim amigo: Array ( [ramal] => 2818 [canal] => SIP/2818-000141eb [duracao] => 00:33:19 Mas como passo isso pro array que ta no rpc? Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Março 5, 2013 $lista é o retorno do metodo, que vai virar $chamadas no outro arquivo. include_once('classes/class_ramais.inc.php'); $chamadas = ramais::chamadasRamal($ramal); $info = array( 'ramal' => $arrayexec[2], 'context' => $arrayexec[6], 'callgroup' => $arrayexec[12], 'pickupgroup' => $arrayexec[13], 'addrip' => $arrayexec[43], 'useragent' => $arrayexec[54], 'regcontact' => $arrayexec[55], 'ramais' => $chamadas ); exit(json_encode($info)); break; Compartilhar este post Link para o post Compartilhar em outros sites
vhuber 0 Denunciar post Postado Março 5, 2013 Shini, uma duvida cara, seu jeito funcionou, porem qd vou listar as informaçoes de um ramal que não é numerico: (existem ramais numericos e outros nao) ex:ramal 1000 ramal 2000 ramal VIVO soh vou listar as informaçoes do vivo da esse erro: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /var/www/html/manager-svn-vhuber/classes/class_ramais.inc.php on line 13 linha 13 da classe eh essa aqui: while($item = mysql_fetch_assoc($sql)){ sabe pq? Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Março 5, 2013 então é um campo varchar?, coloque aspas simples em $ramal, $comando_sql = "SELECT * FROM canais_info ci WHERE ci.ramal= '". $ramal ."'"; Compartilhar este post Link para o post Compartilhar em outros sites
vhuber 0 Denunciar post Postado Março 5, 2013 então é um campo varchar?, coloque aspas simples em $ramal, $comando_sql = "SELECT * FROM canais_info ci WHERE ci.ramal= '". $ramal ."'"; Certinho, brigadão cara, salvou minha vida. Aproveitando seu conhecimento uma ultima pergunta. Estou listando o resultado em um modal listado no java script: Estou listando assim: (obs: esse arr_data eh exatamente o mesmo array $info do rpc) $('#log').html( "<h1>Informações do ramal</h1>"+ "<h3>Ramal: "+id+"</h3>"+ arr_data['context']+"<br>"+ arr_data['callgroup']+"<br>"+ arr_data['pickupgroup']+"<br>"+ arr_data['addrip']+"<br>"+ arr_data['useragent']+"<br>"+ arr_data['regcontact']+"<br>"+ "<h1>Informações da Chamada</h1>" arr_data['canal']+" "+arr_data['duracao']+"<br>"+ Porém como eu falei existem ramais que tem varias chamadas na tabela canais_info ex de um resultado ta tabela canais_info: ramal canal duracao bridged 2818 sip/SIP/2818-000141eb 00:00:13 none 2818 SIP/2818-000141ec 00:15:11 none E o array ta retornando assim: Array ( [0] => Array ( [ramal] => 2818 [canal] => SIP/2818-000141eb [duracao] => 00:33:19 [bridged] => None ) [1] => Array ( [ramal] => 2818 [canal] => SIP/2818-000141ec [duracao] => 00:00:12 [bridged] => None ) Como faço pra eles ler quantos indices de array ele retornou para mostrar TODOS os resultados daquele ramal: Pq eu to mostrando assim: $info = array( 'ramal' => $arrayexec[2], 'context' => $arrayexec[6], 'callgroup' => $arrayexec[12], 'pickupgroup' => $arrayexec[13], 'addrip' => $arrayexec[43], 'useragent' => $arrayexec[54], 'regcontact' => $arrayexec[55], 'canal' => $chamadas[0]['canal'], 'duracao' => $chamadas[0]['duracao'] ); Como vc pode ver, estou pegando soh a posição ZERO do array, e eu teria que andar todas as posiçoes, seja quantas ele tiver grato por tudo Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Março 5, 2013 passa o array inteiro como tava antes, oq vai mudar é no js na hora de ler o json. 'ramais' => $chamadas no js vc um contador (i) e um for para acessar as chamadas arra_data['chamdas']['ramal'] Compartilhar este post Link para o post Compartilhar em outros sites
vhuber 0 Denunciar post Postado Março 5, 2013 passa o array inteiro como tava antes, oq vai mudar é no js na hora de ler o json. 'ramais' => $chamadas no js vc um contador (i) e um for para acessar as chamadas arra_data['chamdas']['ramal'] Não entendi ao certo shini Tenho que alterar onde? meu js ta assim: function executar(id){ var arr_data $.ajax({ type: "POST", url: "rpc.php?module=cramais&cmd=executar", data: { ramal : id }, async: false, success: function(data){ console.log(id); console.log(data); arr_data = data; return true; }, dataType: 'json' }); $('#log').html( "<h1>Informações do ramal</h1>"+ "<h3>Ramal: "+id+"</h3>"+ arr_data['context']+"<br>"+ arr_data['callgroup']+"<br>"+ arr_data['pickupgroup']+"<br>"+ arr_data['addrip']+"<br>"+ arr_data['useragent']+"<br>"+ arr_data['regcontact']+"<br>"+ "<h1>Informações da Chamada</h1>"+ "<pre>Canal Duração Bridge</pre><br>"+ arr_data['canal']+" "+arr_data['duracao'] ).modal({ containerCss:{ width:450, height:300 }, onShow: function(dialog){ }, onClose: function(dialog) { $.modal.close(); } }); } E o json ta sendo retornado assim: exit(json_encode($info)); O que tenho q mudar? Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Março 5, 2013 lembra q antes vc tava passando ramais[0], abaixo vc passa tdas as ligações 'ramais' => $chamadas adicione o contador no javascript: deve ficar mais ou menos assim, var qtd = arr_data['ramais'].length; for(i=0; i<qtd; i++){ alert(arr_data[i]['canal']); } Compartilhar este post Link para o post Compartilhar em outros sites
vhuber 0 Denunciar post Postado Março 5, 2013 Show cara, brigadao<br />parabens pelo conhecimento Show cara, brigadao parabens pelo conhecimento Compartilhar este post Link para o post Compartilhar em outros sites