Ir para conteúdo

Arquivado

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

DunkMask

Armazenando dados em Array

Recommended Posts

Olá, boa tarde.
Estou tentando deixar uma classe php livre de html (nunca fiz isso antes), pois sem que criava uma classe, nela eu coloca muitos códigos HTML, como por exemplo:

Se eu fosse criar um menu dinâmico, colocava toda a estrutura html dentro do while na consulta para gerar. Quero tentar algo novo, pelo menos para mim, então pensei em armazenar dados do DB em um array para depois realizar um foreach no HTML para criar os menus.

 

Bom, para deixar mais claro, eu tenho uma tabela denominada Tipo, que se refere ao tipo de pagina criada. Este tipo seria uma categoria de menu, e as paginas criadas em cada categoria seriam os menus.

Como mencionei acima, meu objetivo e deixar a classe de consulta no banco livre de HTML, então pensei em criar o array.

 

Alguém poderia me ajudar com dicas ou uma solução para este problema? Estou usando PDO para consulta, mas abaixo segue a função que estou usando.

<?
  public function Tipo(){
     $conexao = new Conexao;
     $pdo  = $conexao->abrirConexao();
     $stmt = $pdo->prepare("SELECT * FROM tipo ORDER BY idTipo");
     $stmt->execute();
     
     if($stmt->rowCount() >0){
         while($x = $stmt->fetch(PDO::FETCH_OBJ)){
            //aqui entraria o array
         }
     } else {
         echo "Nenhum dado encontrado";
     }
  }
?>

Depois da consulta eu usaria a função Tipo() para obter o resultado ou alguma outra forma pelo método get.

Mas estou aberto a sugestões.

 

Aguardo respostas e desde já agradeço pela atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie um array e a cada registro do banco acrescente no array

if($stmt->rowCount() >0){
   $dados = array();
   while($x = $stmt->fetch(PDO::FETCH_OBJ)){
       array_push($dados, $x); //insere o valor de $x no array $dados
   }
} else {
   echo "Nenhum dado encontrado";
}

Seria isso o que você está tentando fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso...
Pq no HTML eu quero puxar somente os nomes no caso da tabela categoria para compor a categoria de menu.


dai a ideia e repetir a seguinte estrutura:

<span class"categoria">Categoria 1</span>
<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>

<span class"categoria">Categoria 2</span>
<ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
</ul>

Este no caso e o resultado que espero realizando um foreach depois que criar este array

 

 

--- Edit ---

Outra duvida: No caso da sua Sugestão Antonio, caso eu precise armazenar dois valores como por exemplo.. nome e id, ficaria assim?

if($stmt->rowCount() >0){
   $dados = array();
   while($x = $stmt->fetch(PDO::FETCH_OBJ)){
       array_push($dados, $x->id, $x->nome); //insere o valor de $x no array $dados
   }
} else {
   echo "Nenhum dado encontrado";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Outra duvida: No caso da sua Sugestão Antonio, caso eu precise armazenar dois valores como por exemplo.. nome e id...

 

Olá

pode ser assim, um array para nome e id, esse array vai para dentro do array maior $dados[].

if($stmt->rowCount() >0){
   $dados = array();
   while($x = $stmt->fetch(PDO::FETCH_OBJ)){
       $dadosInterno  = array();
       $dadosInterno['id'] =  $x->id;
       $dadosInterno['nome'] =  $x->nome;
       $dados[] = $dadosInterno; 
   }
} else {
   echo "Nenhum dado encontrado";
}

E para acessá-lo use:

$dados[0]['id'];
$dados[0]['nome'];

depois vc usa o foreach()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vou postar o código todo que vai ser mais fácil. O primeiro problema eu acabei resolvendo mas acabou surgindo outro agora.


O código abaixo seria a minha função dentro da classe que e responsável por encontrar as categorias de menus

<?php
   public function Tipo(){
      $conexao = new Conexao;
      $pdo = $conexao->abrirConexao();
      $stmt = $pdo->prepare("SELECT * FROM tipo ORDER BY idTipo");
      $stmt->execute();

      if($stmt->rowCount()>0){
         while($x = $stmt->fetch(PDO::FETCH_OBJ)){
            $dado[] = array('idTipo' => $x->idTipo, 'nome' => $x->nome);
         }
         $this->categoria = $dado
      } else {
         echo "Nenhuma categoria encontrada";
      }
   }


   public function Page(){
      $conexao = new Conexao;
      $pdo = $conexao->abrirConexao();
      $stmt = $pdo->prepare("SELECT * FROM pagina WHERE idTipo=:idTipo AND idSite=:idSite AND idStatus=1  ORDER BY titulo");
      $stmt->bindValue(":idTipo", $this->idTipo);
      $stmt->bindValue(":idSite", $this->idSite);
      $stmt->execute();

      if($stmt->rowCount()>0){ 
         while($x = $stmt->fetch(PDO::FETCH_OBJ)){
            $dado[] = array('idPagina' => $x->idPagina, 'titulo' => $x->titulo);
         }
         $this->pagina = $dado;
      } else {
         echo "Nenhuma categoria encontrada";
      }
   }

?>

No HTML eu estou recuperando os dados da seguinte forma:

<?php
   require "inc/classes/Main.class.php";
   $main = new Main();
   $main->Tipo();

   foreach($main->getCategoria()  as $cat => $valor){
      echo "<span class=\"mainTitle\">".$valor[nome]."</span>;
   }
?>

até aqui tudo bem, esta funcionando perfeitamente, mas uma vez que esta consulta seja realizada, a ideia é que quando ele buscar a primeira categoria ele pesquise todas as paginas referentes a ela.

 

Então o código acima ficou assim:

<?php
   require "inc/classes/Main.class.php";
   $main = new Main();
   $main->Tipo();
   echo "<ul>";
   foreach($main->getCategoria()  as $cat => $valor){
      echo "<span class=\"mainTitle\">".$valor[nome]."</span>";
      
      $main->setIdTipo($valor['idTipo']);
      $main->Page();

      foreach($main->getPagina() as $pag => $valor2){
         echo "- ".$valor2['titulo']."";
      }
   }
   echo "</ul>";
?>

depois que implemento o segundo foreach ele repete todas as duas paginas cadastradas em todas as categorias, ou seja, o resultado que ele me apresenta e o seguinte:

- Categoria 1
---- Pagina 1
---- Pagina 2

 

- Categoria 2
---- Pagina 1
---- Pagina 2

 

- Categoria 3
---- Pagina 1
---- Pagina 2

 

e o resultado que eu espero é:

 

- Categoria 1
---- Pagina 1
---- Pagina 2

 

- Categoria 2
---- Pagina 3
---- Pagina 4

 

- Categoria 3
---- Pagina 5
---- Pagina 6

 

 

obs.: No caso eu so tenho 2 paginas cadastradas na categoria 1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que vc está complicando o seu código atoa:

 

O pdo já tem a opção de retornar o resultado em 1 array:

// Veja a diferença
public function Tipo(){
  $conexao = new Conexao;
  $pdo  = $conexao->abrirConexao();
  $stmt = $pdo->prepare("SELECT * FROM tipo ORDER BY idTipo");
  if(!$stmt->execute()) return false;
  return $stmt->fetch(PDO::FETCH_ASSOC);
}

//Obtendo o array
$array_tipos = array();
$array_tipos = $classe->Tipo();

foreach($array_tipos as $tipo){
  echo $tipo;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Thomas, Muito Obrigado... Isso diminuiu muito o código e me ajudou pacas em...
Estou começando agora a usar o PDO, nao conheço muito sobre ele ainda, e como eu li uma matéria ai falando que o mysql_conect e outras coisas vão ser retiradas da próxima versão do php eu tenho que me atualizar.

Se tiver algum lugar onde contenha mais informação sobre PDO me ajudaria muito.

Agradeço de coração pela ajuda.

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.