Jump to content
ezzcardoso

foreach aninhado e array select

Recommended Posts

Pessoal, estou fazendo um script php para selecionar registros no banco de dados... que funciona normalmente.. porém, não estou sabendo como trarar o dados gerados pelo script. Vejamos um exemplo.

<?php
abstract class Eac
{
	private $localhost = "localhost";
	private $root = "root";
	private $password = "";
	private $database = "database";
	private $port = "3306";
	protected function open()
	{
		$conn = new mysqli($this->localhost, $this->root, $this->password, $this->database, $this->port);
		$conn->select_db($this->database);
		$conn->set_charset("utf8");
		if ($conn->connect_error)
		{
			return $conn->connect_error;
		}
		else
		{
			return $conn;
		}
	}
}
class SQL extends Eac
{
	public function insert($table, $array)
	{
		if (is_array($array))
		{
			$conn   = $this->open();
			$fields = array();
			$values = array();
			foreach ($array as $key => $value)
			{
				$fields[] = $key;
				$values[] = "'" . $value = $conn->real_escape_string($value) . "'";
			}
			$fields = implode(",", $fields);
			$values = implode(",", $values);
			$sql    = "INSERT INTO {$table} ({$fields}) VALUES ({$values})";
			if ($conn->query($sql))
			{
				return array(
					"Error" => false,
					"insert_id" => $conn->insert_id,
					"affected_rows" => $conn->affected_rows,
					"info" => $conn->info
				);
			}
			else
			{
				return array(
					"error" => $conn->error
				);
			}
			$conn->close();
		}
		else
		{
			echo ("Não é array");
		}
	}
	public function delete($table, $where)
	{
		$conn = $this->open();
		$sql  = "DELETE FROM {$table} {$where}";
		if ($conn->query($sql))
		{
			return array(
				"affected_rows" => $conn->affected_rows,
				"info" => $conn->info
			);
		}
		else
		{
			return array(
				"error" => $conn->error
			);
		}
		$conn->close();
	}
	public function update($table, $array, $where)
	{
		if (is_array($array))
		{
			$conn = $this->open();
			$sql  = "UPDATE {$table} SET ";
			$sets = array();
			foreach ($array as $column => $value)
			{
				$sets[] = $column . " = '" . $value = $conn->real_escape_string($value) . "'";
			}
			$sql .= implode(',', $sets);
			$sql .= $where;
			if ($conn->query($sql))
			{
				return array(
					"Error" => false,
					"insert_id" => $conn->insert_id,
					"affected_rows" => $conn->affected_rows,
					"info" => $conn->info
				);
			}
			else
			{
				return array(
					"error" => $conn->error
				);
			}
			$conn->close();
		}
	}
	public function select($table, $array, $rules)
	{
		$conn = $this->open();
		switch ($array)
		{
			case '*':
			    $conditions = array();
			    foreach ($rules as $column => $value)
				{
					$conditions[] =" {$column} {$value} ";
				}
				$condition = implode("",$conditions); 
				echo $sql = "SELECT * FROM {$table} {$condition}";
				break;
			case is_array($array):
				$fields = array();
				foreach ($array as $column => $value)
				{
					$fields[] = $value;
				}
				$conditions = array();
				foreach ($rules as $column => $value)
				{
					$conditions[] =" {$column} {$value} ";
				}
				$field = implode(",", $fields);
				$condition = implode("",$conditions);
				echo $sql   = "SELECT {$field} FROM {$table} {$condition}";
				break;
		}
		$select = $conn->query($sql);
		$result = array();
		if ($select->num_rows > 0)
		{
			$stack = array();
			while ($row = $select->fetch_array())
			{
				$stack[] = $row;
				
			}
			return ($stack);
		}
		else
		{
			echo "0 results";
		}
		$conn->close();
	}
}
?>

Aí em cima é meu script normal pra fazer o select e está 100% funcionando.

 

 

Agora o problema é quando eu faço o comando 

 

 

$database =  new SQL();

$cliente = $database->select("cliente","*",$rules = array());

var_dump($cliente);

Mostra o seguinte 

array (size=2)
  0 => 
    array (size=18)
      0 => string '21' (length=2)
      'id' => string '21' (length=2)
      1 => string 'Lula Luiz Inacio Da Silva' (length=25)
      'nome' => string 'Lula Luiz Inacio Da Silva' (length=25)
      2 => string 'CPF' (length=3)
      'tipo' => string 'CPF' (length=3)
      3 => string '12345678912' (length=11)
      'CPF_CNPJ' => string '12345678912' (length=11)
      4 => string '66552852154' (length=11)
      'telefone_celular' => string '66552852154' (length=11)
      5 => string '31454564' (length=8)
      'telefone_comercial' => string '31454564' (length=8)
      6 => string 'lula@povo.com.br' (length=16)
      'email' => string 'lula@povo.com.br' (length=16)
      7 => string '5936d1d7296d0' (length=13)
      'cliente_id' => string '5936d1d7296d0' (length=13)
      8 => string 'lula é um  ex presidente...' (length=28)
      'obs' => string 'lula é um  ex presidente...' (length=28)
  1 => 
    array (size=18)
      0 => string '20' (length=2)
      'id' => string '20' (length=2)
      1 => string 'Dilma Luiz Inacio Da Silva' (length=26)
      'nome' => string 'Dilma Luiz Inacio Da Silva' (length=26)
      2 => string 'CPF' (length=3)
      'tipo' => string 'CPF' (length=3)
      3 => string '12345678912' (length=11)
      'CPF_CNPJ' => string '12345678912' (length=11)
      4 => string '66552852154' (length=11)
      'telefone_celular' => string '66552852154' (length=11)
      5 => string '31454564' (length=8)
      'telefone_comercial' => string '31454564' (length=8)
      6 => string 'lula@povo.com.br' (length=16)
      'email' => string 'lula@povo.com.br' (length=16)
      7 => string '5936d1b61f716' (length=13)
      'cliente_id' => string '5936d1b61f716' (length=13)
      8 => string 'lula é um  ex presidente...' (length=28)
      'obs' => string 'lula é um  ex presidente...' (length=28)

 

agora... como que eu ponho isso em tabela ?????

 

 

eu fiz o seguinte.

 

 

 foreach($cliente as $key => $value){
 	foreach($value as $keys => $values){
 		
 		 echo $values->nome; $values->CPF;
	 	
	 }
	 
 	
 }

 

 

só que não funciona....

 

 

resultado 

 

Notice: Trying to get property of non-object 

 

 

...

 

 

 

Minha questão é.... COMO  posso organizar aquela Array   em uma tabela de marcação HTML 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By rodrigofv1994
      <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "ajax";   $email = $_POST['email']; $senha = $_POST['senha'];   // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) {   die("Connection failed: " . $conn->connect_error); }   $sql = 'INSERT INTO usuarios VALUES (default,'$email','$senha')';   if ($conn->query($sql) === TRUE) {   echo "New record created successfully"; } else {   echo "Error: " . $sql . "<br>" . $conn->error; }   $conn->close(); ?>
    • By Camilavip
      Boa noite, alguém por acaso sabe um modo simples de se desativar um cadastro automaticamente após um período?
      Deixa eu explicar. Eu cadastro um cliente, em que na tabela do banco de dados tem o campo "ativo" onde 1 é ativado e 0 é desativado. Então eu queria cadastrar esse cliente e o ativar, mas que no período de 30 dias por exemplo ele se desativasse sozinho.  Alguém sa8e algo simples nesse sentido?
    • By Camilavip
      Boa noite a todos, estou tendo um probleminha em gravar a senha criptografada, na verdade editar, pois quando gravo vai certo, mas na edição não está dando certo.
      A baixo quando cadastro o cliente é assim, e está indo perfeito.
       
      $nome = $_POST['nome']; $email = $_POST['email']; $login = $_POST['login']; $senha = sha1($_POST['senha']); Mas na hora da edição como está um pouco diferente estou tentando colocar esse sha1 em todo lugar e não está dando
      nome='$_POST[nome]', email='$_POST[email]', login='$_POST[login]', senha='$_POST[senha]', Então no de cima no cadastro está ok, mas na edição não sei mais aonde coloco esse sha1 para dar certo ou é burrice minha mesmo,
    • By eiwes
      Fiz uma iteração foreach para gerar categorias e subcategorias, pois não queria fazer DOIS SELECTS, ficando assim:
       
      //----> Foreach para gerar a categoria, pois são vários items com as mesmas chaves, portanto agrupo foreach($exibeLista as $row){ $dlD[$row["nameD"]][] = [ "nameD"=>$row["nameD"], "idD"=>$row["idD"], "qtdR"=>$row["qtdR"], "qtdF"=>$row["qtdF"] ]; } //----> Foreach para gerar subcategorias foreach($exibeLista as $row){ $dLA[$row["nameP"]][] = [ "nameD"=>$row["nameD"], "idD"=>$row["idD"], "idAss"=>$row["idAss"], "idT"=>$row["idT"], "nameP"=>$row["nameP"], "qtdR"=>$row["qtdR"], "qtdF"=>$row["qtdF"] ]; } $fsHTML = []; $rateD = 0; $qtdAss = 0; if(is_array($dlD) || is_object($dlD)){ foreach ($dlD as $key => $ds) { if ($key <> '' && $key <> NULL) { $rateD += (($ds[0]["qtdR"]*100)/$ds[0]["qtdF"]); $qtdAss += count($dlD[$key]); //----> Array para inserir HTML da Categoria criada e criar accordion $fsHTML[] = ' <div class="col-md-12 col-sm-12 col-xs-12"> <div class="x_panel overflow_hidden padding-into-row-qsts bg-white-row filtro-on"> <span class="rateD">'.ceil($rateD/$qtdAss).'%</span> <span class="opcao-into-top">'.$ds[0]["idD"].' - '.$ds[0]["nameD"].' <a class="collapse-link open-filter-qsts border-radius8"><i class="fa fa-chevron-up"></i></a></span> <div class="x_content" style="display:none;padding-top:10px"> <div class="accordion" id="accordion" role="tablist" aria-multiselectable="true"> '; //----> Verificar se a subcategoria contém a categoria, se contém é incluída na array foreach ($dLA as $keys => $ass) { if($ass[0]["idD"] == $ds[0]["idD"] ){ if($ass[0]['idT'] <> 0){ $link = 't='.$ass[0]['idT']; }else{ $link = 'a='.$ass[0]['idAss'];} $fsHTML[] = ' <div class="panel"> <a class="panel-heading collapsed" href="/v/fs/st?mz=y&type=c&'.$link.'"> <span class="eficiencia-accordion">'.ceil(($ass[0]['qtdR']*100)/$ass[0]['qtdF']).'%</span> <h4 class="panel-title">'.$ass[0]['nameP'].'</h4> <span class="unicamente">'.$ass[0]['qtdR'].' respondido de '.$ass[0]['qtdF'].'</span> </a> </div> '; }//if ass }//foreach ass }//if ds //----> Aqui é aonde ocorre o ERRO! Era pra fazer o fechamento do Accordion e gerar uma nova DIV. //No índice [0] isso ocorre normalmente, porém no [1] ela agrupa todos os accordions. (abaixo farei a amostra) $fsHTML[] = '</div></div></div></div>'; }//foreach ds }//if verifica se é array e se é objeto return implode('', array_unique($fsHTML)); O correto seria assim:
       
      - Categoria
        - Subcategoria
        - Subcategoria
       
      - Categoria
       - Subcategoria
       - Subcategoria
       
       
      Como está acontecendo:
       
      - Categoria
        - Subcategoria
        - Subcategoria
       
      - Categoria
        - Subcategoria
        - Subcategoria
          - Categoria
            - Subcategoria
            - Subcategoria
              - Categoria
                - Subcategoria
                - Subcategoria
                  - Categoria
                    - Subcategoria
                    - Subcategoria
       
       
      Não consigo entender de jeito nenhum pq o primeiro fecha corretamente e a partir do segundo não.
      Alguém me ajuda?
       
       
    • By Wallcrawler
      Olá pessoal tudo bem? Estou tentando fazer a cópia de uma imagem que está disponível na web e salvar em uma pasta no meu projeto. Essa imagem está sob protocolo SSL mas navegador consegue acessá-la normalmente. Mas o meu script php é bloqueado, e não entendo o porquê.
       
      Segue o código que estou usando:
      <?php //error_reporting(E_ALL ^ E_DEPRECATED); //ini_set('display_errors', 1); //die('Script travado!'); $start = microtime(true); set_time_limit(0); function save_image($inPath,$outPath) { //Download images from remote server $in = fopen($inPath, 'rb'); $out = fopen($outPath, 'wb'); while ($chunk = fread($in,8192)) { fwrite($out, $chunk, 8192); } fclose($in); fclose($out); } include_once ($_SERVER['DOCUMENT_ROOT'] . '/grpi/include/classes/Rpi.class.php'); include_once ($_SERVER['DOCUMENT_ROOT'] . '/grpi/include/functions.class.php'); $func = new FuncoesAuxiliares(); $rpi = new Rpi(); if(!isset($_GET['num_processo'])) { $rows = $rpi->Consulta('select num_processo, classe, especificacao from processos order by num_processo ASC limit 1'); } else { $rows = $rpi->Consulta("select num_processo, classe, especificacao from processos where num_processo > '" . $_GET['num_processo'] . "' order by num_processo ASC limit 1"); } $registros = 0; $arrayInsert = array(); $qtd_caracteres_total = 14; foreach ($rows as $rs) { //$rs['num_processo'] $zeros = ''; $qtd_char_processo = strlen($rs['num_processo']); //Fill zeros for($i=0; $i < ($qtd_caracteres_total - $qtd_char_processo); $i++) { $zeros .= '0'; } echo('BR5' . $zeros . $rs['num_processo'] . '<br>'); $url = 'http://www.tmdn.org/tmview/trademark/image/BR5' . $zeros . $rs['num_processo']; //Aqui tento acessar a imagem e salvar na pasta correspondente save_image($url, __DIR__ .'/logo/' . $rs['num_processo'] . '.jpg'); //copy('https://www.tmdn.org/tmview/trademark/image/BR5' . $zeros . $rs['num_processo'], __DIR__ .'/logo/' . $rs['num_processo'] . '.jpg'); $processo = $rs['num_processo']; $registros++; } $registros = number_format($registros, 0, ',', '.'); // Display Script End time $time_end = microtime(true); //dividing with 60 will give the execution time in minutes other wise seconds $execution_time = ($time_end - $start)/60; //execution time of the script echo '<b>Total Execution Time:</b> '. $execution_time .' Mins <hr><br><br>Registros: ' . $registros . '<br><br>'; echo("<a href='down_logo.php?num_processo=" . $processo ."' target='_self'>Próxima página</a><br><br>"); ?> O erro retornado é o seguinte:
       
      Warning: fopen(): SSL: Connection reset by peer in /home/storage/8/23/2c/euregistrogrpi/public_html/grpiv2/rpi/down_logo.php on line 10

      Warning: fopen(http://www.tmdn.org/tmview/trademark/image/BR500000825642590): failed to open stream: HTTP request failed! in /home/storage/8/23/2c/euregistrogrpi/public_html/grpiv2/rpi/down_logo.php on line 10

      Warning: fread() expects parameter 1 to be resource, boolean given in /home/storage/8/23/2c/euregistrogrpi/public_html/grpiv2/rpi/down_logo.php on line 12

      Warning: fclose() expects parameter 1 to be resource, boolean given in /home/storage/8/23/2c/euregistrogrpi/public_html/grpiv2/rpi/down_logo.php on line 16
       
      Só que se você tentar acessar o endereço no browser, diretamente, a imagem aparece:
       
      https://www.tmdn.org/tmview/trademark/image/BR500000825642590 
       
      Onde posso estar errando? Obrigado pela atenção de todos.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.