Ir para conteúdo

POWERED BY:

Arquivado

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

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

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

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
×

Informação importante

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