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 Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
×

Informação importante

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