Ir para conteúdo

POWERED BY:

Arquivado

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

vhuber

Retorno da query em array

Recommended Posts

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

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

 

 

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

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

 

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

$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

 

$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

$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

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

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

 

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.