Ir para conteúdo
Hisoka.

Criar array de dados e jogar na view

Recommended Posts

Bom dia!

Eu tenho o seguinte cenário: Eu faço um foreach e pego os dados do banco e jogo para variáveis. Antes de jogar na view, eu trato as variáveis. O problema é na hora de criar um array, ele transforma tudo em string.

 public function listar_cd(){
            
            $this->load->model('cd/cd_model');

            $row = $this->cd_model->exibe_cd();
            //No $row ele me da o array completo de pesquisa
            foreach ($row  as $linha):
                $datafinal[] = $linha['datafinal'];
                $horafinal[] = $linha['horafinal'];
                $nomecd[] = $linha['nomecd'];
                $gravadora[] = $linha['gravadora'];
                $class[] = $linha['class'];
                $porcentagem[] = $linha['porcentagem'];
                $idcd[] = $linha['idcd'];
                $sla[] = $linha['sla'];
            endforeach;
            //se eu der um echo em $sla por ex, ele só me retorna string, qnd deveria ser int. E na regra tem um calculo
            //array(7) { [0]=> string(1) "8" [1]=> string(2) "18" [2]=> string(2) "16" [3]=> string(2) "48" [4]=> string(2) "20" [5]=> string(1) "2" [6]=> string(1) "1" } 
            
            [Aqui eu aplico a regra]
            
            //Aqui eu crio o array 
            $array = array(
                'idcd'=>$idcd,
                'nomecd'=>$nomecd,
                'gravadora'=>$gravadora,
                'class'=>$class,
                'porcentagem'=>$porcentagem
            );
            
            echo var_dump($array);
        
            /*
            $variaveis['consulta'] = $array;
            echo var_dump($variaveis);

            $this->load->helper('valida_login/valida_helper');
        
            $variaveis['validacao'] = getValida();
            
            
            $this->load->helper('preenche_dados/preenche_dados_helper');
        
            $variaveis['preenche_dados'] = getPreencheDados();
        
            
            $this->load->view("menu_cd/listar_cd_view",$variaveis);*/
        }

No model eu retorno os dados assim return $retorno = $this->db->get("TABELA")->result_array();

Quando jogo esse array na view sem aplicar a regra, ele da uma mensagem de "Undefined index" Porem os valores que passo estão certos.

   <?php foreach ($consulta  as $linha): ?> 
      <tr>
         <td style="text-align: center;"><?php echo $linha['idcd'] ?></td>
         <td style="text-align: center;"><?php echo $linha['nomecd'] ?></td>
         <td style="text-align: center;"><?php echo $linha['gravadora'] ?></td>
         <td style="text-align: center;"><a href="javascript:;"  onclick="janelaNovoCd(<?= $linha['idcd']?>)"><button type="button" class="glyphicon glyphicon-cog"></button></a><a href="javascript:;"  onclick="confirma(<?= $linha['idcd'] ?>)"><button type="button" class="glyphicon glyphicon-trash"></button></a></td>
     </tr>
   <?php endforeach;?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a variável row já é uma array, não faz sentido pegar strings depois do laço e transformar em array novamente para levar a Views .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu foreach esta errado também, você esta percorrendo um array de uma dimensão, então não pode colocar os indices associativos como você fez, enquanto percorre o array, cada volta será um valor diferente que será printado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a variável row já é uma array, não faz sentido pegar strings depois do laço e transformar em array novamente para levar a Views .

Ai q tá, a variável row, na vdd é um inteiro la no banco. E eu n sei pq ta trazendo uma string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu foreach esta errado também, você esta percorrendo um array de uma dimensão, então não pode colocar os indices associativos como você fez, enquanto percorre o array, cada volta será um valor diferente que será printado

Como assim? tipo isso foreach ($row->result_array() as $linha) ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

seu array é assim

 $consulta = array(
	'idcd'=>$idcd,
	'nomecd'=>$nomecd,
	'gravadora'=>$gravadora,
	'class'=>$class,
	'porcentagem'=>$porcentagem
);

então ao percorrer, você não pode usar

echo $linha['idcd'];

e sim somente

echo $linha;

com isso cada volta vai printar o valor de cada indice

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai q tá, a variável row, na vdd é um inteiro la no banco. E eu n sei pq ta trazendo uma string.

0ep8cl.jpg

O construtor foreach fornece uma maneira fácil de iterar sobre arrays. O foreach funciona somente em arrays e objetos, e emitirá um erro ao tentar usá-lo em uma variável com um tipo de dado diferente ou em uma variável não inicializada. Possui duas sintaxes:

Leia novamente

http://php.net/manual/pt_BR/control-structures.foreach.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu quis dizer foi o seguinte: Nem todo campo do banco é uma string, por ex: idcd, porcentagem e sla são inteiros. Tem um calculo que é $sla = $sla * 60. Porém, eu n to tendo retorno de um inteiro e sim de uma string. Até o id ta sendo listado como string. Isso que eu n estou entendendo. O array n deveria retornar inteiro onde no banco é inteiro e string onde no banco é string?

Compartilhar este post


Link para o post
Compartilhar em outros sites

seu array é assim

 $consulta = array(
	'idcd'=>$idcd,
	'nomecd'=>$nomecd,
	'gravadora'=>$gravadora,
	'class'=>$class,
	'porcentagem'=>$porcentagem
);

então ao percorrer, você não pode usar

echo $linha['idcd'];

e sim somente

echo $linha;

com isso cada volta vai printar o valor de cada indice

Então cara, da forma que eu estava fazendo, eu podia por ex, pegar uma variável QQ tipo $sla e realizar um calculo. Assim ele me da o array todo de 1 vz e ai n da p pegar o indice com valor da $sla.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a variável row já é uma array, não faz sentido pegar strings depois do laço e transformar em array novamente para levar a Views .

Exato, jovem sua variável $row já recebe um array..

simplesmente de um vardump($row) verifique os dados e passe pra view!...

Não tem sentido mesmo percorrer $row, pra montar um array na mesma estrutura !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce ta usando o codeigniter?

Estou sim! Percebi que ta vindo zuado do model. Uso essa função para dar o retorno $this->db->get("tabela")->result_array(); e qnd dou o var_dump no row, vem td como string, atté o q deveria ser inteiro. Antes eu usava só $this->db->get("tabela"), rodava de boa. Quando coloquei o ->result_array() que começou o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou sim! Percebi que ta vindo zuado do model. Uso essa função para dar o retorno $this->db->get("tabela")->result_array(); e qnd dou o var_dump no row, vem td como string, atté o q deveria ser inteiro. Antes eu usava só $this->db->get("tabela"), rodava de boa. Quando coloquei o ->result_array() que começou o problema.

Esse Framework sempre foi zuado.

Se você quer só para calculo algumas variáveis, force a tipagem uai na variável.

http://php.net/manual/pt_BR/language.types.type-juggling.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exato, jovem sua variável $row já recebe um array..

simplesmente de um vardump($row) verifique os dados e passe pra view!...

Não tem sentido mesmo percorrer $row, pra montar um array na mesma estrutura !

Isso eu sei, se eu jogar a $row direto na view funciona, o problema é que tenho que passar 2 valores para view que variam de acordo com o tempo. Que é a porcentagem e a class(que muda a cor da sla). Foi a unica forma que achei de fz uma la via php, comparando data e hora final(que vem do banco) com a atual, para fazer a porcentagem subir. Tlvz de p fz via function no banco, ms ai sao outros 500 rs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo cara, entendi !

então faz o seguinte.. não precisa desta lambança toda que você fez ao percorrer o array rsrs..

você só vai precisar de um array pra guardar o resultado !

$result = array();

dai você percorre $row !!

foreach($row as $key => $values) {

//Aplique o calculo aqui.... 
//exemplo 

$dataAtual = new DateTime("now"); 
$dataDoBanco = new DateTime($values['datafinal']);

$diff = $dataAtual->diff($dataDoBanco); // Aqui você vai ter a diferença etc...

// seus ifs pra colorir de acordo com seu calculo !!!

$result[$key]['class'] = $calculo; 

$result[$key] = $values;

}

var_dump($result);

Tenha no banco somente 1 coluna para guardar data e hora!

exemplo: datafinal do tipo Datetime, ficará mas simples tratar o retorno. tanto no banco, quanto na aplicação !

OBS:

Caso precise http://php.net/manual/pt_BR/datetime.diff.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caramba complicado de entender esse framework em.

Por isso que só uso o bom e velho puro php estruturado em MVC.

Vou dar uma explicação pelo que entendi aqui ok.

A linguagem PHP é fracamente tipada logo o tipo da variável é definido pelo contesto.

Se eu tiver uma tabela como exemplo essa

--------------------------
id  | nome   | valor     |
--------------------------
1   | luz    | 50        |
--------------------------
2   | agua   | 40        |
--------------------------

Fazendo uma consulta nessa tabela e solicitando retorno como fetch_assoc seria visualizavel assim:

[ 
   0 => [ 
            id => 1, 
            nome => luz, 
            valor => 50 
        ] 
   1 => [ 
           id => 1, 
           nome => agua, 
           valor => 40 
        ] 
]

Agora suponha que nesse array eu queira adicinar um campo de porcentagem do valor onde o valor seria divido por 100. Então eu faria assim.

for($i = 0; $i < cont($rows); $i++):

    $valor = $rows['$i']['valor'];

    $porcentagem = $valor / 100;

    $rows[$i] += ['porcentagem' => $porcentagem]

endfor;

Isso iria gerar o array associativo:

[ 
  0 => [ 
          id    => 1,
          nome  => luz,
          valor => 50,
          porcentagem => 0.5
        ]
 1 => [ 
          id    => 1,
          nome  => agua,
          valor => 40,
          porcentagem => 0.4
        ]
]

Agora é só enviar esse array para view e deixar esse fazer o seu trabalho.

Simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo cara, entendi !

então faz o seguinte.. não precisa desta lambança toda que você fez ao percorrer o array rsrs..

você só vai precisar de um array pra guardar o resultado !

$result = array();

dai você percorre $row !!

foreach($row as $key => $values) {

//Aplique o calculo aqui.... 
//exemplo 

$dataAtual = new DateTime("now"); 
$dataDoBanco = new DateTime($values['datafinal']);

$diff = $dataAtual->diff($dataDoBanco); // Aqui você vai ter a diferença etc...

// seus ifs pra colorir de acordo com seu calculo !!!

$result[$key]['class'] = $calculo; 

$result[$key] = $values;

}

var_dump($result);

Tenha no banco somente 1 coluna para guardar data e hora!

exemplo: datafinal do tipo Datetime, ficará mas simples tratar o retorno. tanto no banco, quanto na aplicação !

OBS:

Caso precise http://php.net/manual/pt_BR/datetime.diff.php

Mano, eu me irritei aqui e apliquei de forma procedural kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Pior de td é que funcionou rsrs olha:

 <td style="text-align: center;"><?php 
                       
                        $dataFinal = $linha->datafinal;
                        $horaFinal = $linha->horafinal;
                        
                        $horaAtual = date('H');
                        $dataAtual = date('d/m/Y');
                        $sla = $linha->sla;

                        $sla = $sla * 60;//converte o periodo da SLA para minutos.

                        if($horaFinal >= $horaAtual && $dataFinal >= $dataAtual){
                                $porcentagem = ($minutoAtual * 100)/$sla;
                                $porcentagem = (int)$porcentagem;

                                if($porcentagem <= 25){

                                $class = 'success';

                                }else if($porcentagem >=26 && $porcentagem <=80){

                                $class = 'warning';

                                }else{

                                $class = 'danger';

                                }
                        }else{
                               $class = 'danger';
                                $porcentagem = 100;

                        }
                    ?>
                    <div class="progress">
                        <div class="progress-bar-<?php echo $class;?>" role="progressbar" aria-valuenow="70"
                        aria-valuemin="0" aria-valuemax="100" style="width:<?php echo $porcentagem;?>%">
                          <?php echo $porcentagem,'%';?>
                        </div>
                      </div>
                 </td>

Ms eu ainda n tinha visto a tua postagem, vou tentar reverter e voltar pro MVC. Sei que n e boa prática, ms no caso da regra n qrer rodar d forma alguma, vale dx na view ou é mlhr dx s regra? Valeu ai pela ajuda e pela paciência mano!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só por curiosidade

de um print_r nessa $row e poste aqui o resultado

$row = $this->cd_model->exibe_cd();

echo "<pre>";
print_r($row);
echo "</pre>";
die();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só por curiosidade

de um print_r nessa $row e poste aqui o resultado

$row = $this->cd_model->exibe_cd();

echo "<pre>";
print_r($row);
echo "</pre>";
die();

Array

(

[0] => Array

(

[idcd] => 3

[nomecd] => Teste

[gravadora] => MK

[datafinal] => 19/09/2016

[horafinal] => 15

[class] =>

[porcentagem] => 0

[sla] => 8

)

[1] => Array

(

[idcd] => 4

[nomecd] => Teste

[gravadora] => MK

[datafinal] => 22/09/2016

[horafinal] => 10

[class] =>

[porcentagem] => 0

[sla] => 18

)

[2] => Array

(

[idcd] => 5

[nomecd] => Teste

[gravadora] => abc

[datafinal] => 20/09/2016

[horafinal] => 7

[class] =>

[porcentagem] => 0

[sla] => 16

)

[3] => Array

(

[idcd] => 7

[nomecd] => Teste

[gravadora] => Teste

[datafinal] => 28/09/2016

[horafinal] => 18

[class] =>

[porcentagem] => 0

[sla] => 48

)

[4] => Array

(

[idcd] => 8

[nomecd] => Teste

[gravadora] => Abc

[datafinal] => 25/09/2016

[horafinal] => 14

[class] =>

[porcentagem] => 0

[sla] => 20

)

[5] => Array

(

[idcd] => 9

[nomecd] => Ali

[gravadora] => ali

[datafinal] => 19/09/2016

[horafinal] => 20

[class] =>

[porcentagem] => 0

[sla] => 2

)

[6] => Array

(

[idcd] => 55

[nomecd] => ssssssss

[gravadora] => sssssssssssssss

[datafinal] => 19/09/2016

[horafinal] => 22

[class] => success

[porcentagem] => 0

[sla] => 1

)

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por RSN
      Boa Noite, 
      Gostaria de saber se existe a possibilidade de gravar além do id do option value outra variavel, para enviar via post.
      <div class="form-group"> <label class="col-md-4 control-label" for="txtgrupo">Tipo de Pagamento : </label> <div class="col-md-4"> <select id="" class="selectpicker" data-live-search="true" name="tipo_pagamento" > <?php $query = mysql_query("SELECT * FROM tipo_pagamento ORDER BY id ASC"); while($result = mysql_fetch_array($query)) { echo '<option value="'.$result["id"].'">'.$result["nome_tipo"].'</option>'; } ?> </select> </div> </div>  
    • Por JeanTDZ
      Eu tenho um form com algumas informações etc. O form envia pro banco de dados e tudo mais, funcional.
       
      Alguém teria algum exemplo que após o submit, o form é transformado em pdf/doc e direcionado para uma pasta/ftp já criada.?
    • Por jparenque
      Pessoal, estou precisando de um código em php que faça o seguinte:

      1- acesse uma url capture e grave o código fonte
      2- acesse novamente a mesma url, capture o código fonte e compare com o código da primeira captura
      3- se o código for igual ao da primeira captura ele acessa novamente e compara novamente
      4- se o código for diferente do da primeira captura ele tem que abrir o navegador Chrome e ir para essa url através do navegador.
      5- o fim do código deverá ser apenas quando ele acessar a url encontrar um conteúdo diferente do da primeira captura.

      Vou rodar o php na máquina local. O objetivo é monitorar uma página url específica com relação à uma alteração que ocorrerá. E quando ocorrer precisarei atuar nessa página imediatamente.

      Obrigado a todos!
    • Por reisleandro
      Alguém ai conhece um servidor php portável que possa rodar direto de um pendrive e que não apresente a mensagem de bloqueio do firewall (Imagem abaxio). O servidor embutido do php faz exatamente isso mas apenas como sigle thread. Queria uma solução um pouco mais robusta que pudesse rodar em qualquer maquina sem apresentar essa mensagem. Plataforma alvo Windows.
       

    • Por JOSELUISALD
      Bom dia. Em minha aplicação o cliente quer uma cópia de seu sistema localmente e remoto (hospedado). Tem como eu fazer a sincronização dos bancos de dados, para que tudo que seja feito localmente seja inserido automaticamente no banco remoto? Desde já obrigado.
×

Informação importante

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