Array
(
)

Trabalhando e listando diferentes tabelas em php com mysql

PHP
João Paulo
   - 08 mai 2014

Olá, estou começando meus estudo de php e me deparei com um problema em um projeto. Estou montando um site para um trabalho de faculdade onde eu uso tabelas para listar os dados de homicídios de todos os estados brasileiros, cada estado possui sua própria pagina. Ai começa o meu problema, por que cada estado possui sua própria tabela, e eu uso uma pagina php separada denominada controller, onde eu faço a conexão e extração dos dados do banco de dados do mysql. O que gostaria de saber e como posso otimizar meu código, pois da maneira que estou fazendo eu praticamente crio todo o código de controller para cada estado. Vou postar meu codigo do controller para ver se tem como otimizar. E desculpa se me expressei mal, como estou começando eu mesmo fico confuso.
#Código

$conexao = mysqli_connect("localhost", "root", "root", "estados");

function estado_listar($conexao){
	$sql = "SELECT ano, cidade, populacao FROM mg";
	$resultado = mysqli_query($conexao, $sql);
	
	return $resultado;
}

$dados = listarDados($conexao);

	function listarDados($conexao){
		$resultado = estado_listar($conexao);
		
		$data = array();
		
		while($row = mysqli_fetch_array($resultado)){
			$data[] = array("cidade" => $row['cidade'], "populacao" => $row['populacao'], "ano" => $row['ano']);
		}
		return $data;
	}

O que estou fazendo e que toda vez que vou fazer uma nova pagina para outro estado tenho que recriar o código, gostaria de saber se tem alguma maneira de criar um modo que não precisa fazer isso, de forma que ele carregue a tabela do estado que vou usar na pagina.

David Sylvestre
   - 09 mai 2014

Para dar uma possivel resposta, preciso tirar duas duvidas.

A estrutura das tabelas é a mesma?
O nome das tabelas é o nome dos estados?

João Paulo
   - 09 mai 2014

Vou postar o codigo do controller onde faço a ligação com o banco de dados e o do html onde exibo a tabela. a minha duvida e sobre como otimizar o controller, para eu não ter que repetir o codigo para cada estado, que foi a unica maneira que consegui.

Controller:

#Código

<?php

	$conexao = mysqli_connect("localhost", "root", "root", "estados");
	$conexao_ac = mysqli_connect("localhost", "root", "root", "estados");
	
		if( mysqli_connect_error($conexao) ){
		echo "A conexão falhou, erro reportado: ".mysqli_connect_error();
		exit();
		}
		
		function estado_listar($conexao){
	$sql = "SELECT ano, cidade, populacao FROM mg ORDER BY ANO DESC";
	$resultado = mysqli_query($conexao, $sql);
	
	return $resultado;
}
		function ac_listar($conexao_ac){
	$sql_ac = "SELECT ano, cidade, populacao FROM ac ORDER BY ANO DESC";
	$resultado_ac = mysqli_query($conexao_ac, $sql_ac);
	
	return $resultado_ac;
}
	
		$dados_ac = listarDados_ac($conexao_ac);
		$dados = listarDados($conexao);
	

	
	@mysqli_close($conexao);
	
	function listarDados($conexao){
		$resultado = estado_listar($conexao);
		
		$data = array();
		
		while($row = mysqli_fetch_array($resultado)){
			$data[] = array("cidade" => $row['cidade'], "populacao" => $row['populacao'], "ano" => $row['ano']);
		}
		return $data;
	}
	
	function listarDados_ac($conexao_ac){
		$resultado_ac = ac_listar($conexao_ac);
		
		$data_ac = array();
		
		while($row = mysqli_fetch_array($resultado_ac)){
			$data_ac[] = array("cidade" => $row['cidade'], "populacao" => $row['populacao'], "ano" => $row['ano']);
		}
		return $data_ac;
	}


Tabela estado de minas gerais:
#Código
 <table class="table striped">
                        <thead>
                            <th class="text-left">Cidade</th>
                            <th class="text-left">População</th>
                            <th class="text-left">Homicidios em 2011</th>
      </tr>
                        </thead>
                        <tbody>
    <?php 
	require_once("controller.php");
	
	foreach($dados as $linha) { ?>

                        <tr><td><?=$linha['cidade']?></td><td class="right"><?=$linha['populacao']?></td><td class="right"><?=$linha['ano']?></td></tr>
    
    <?php } ?>
</tbody>

                    </table>


Tabela do estado do acre:
#Código
<table class="table striped">
                        <thead>
                            <th class="text-left">Cidade</th>
                            <th class="text-left">População</th>
                            <th class="text-left">Homicidios em 2011</th>
      </tr>
                        </thead>
                        <tbody>
    <?php 
	require_once("controller.php");
	
	foreach($dados_ac as $linha) { ?>

                        <tr><td><?=$linha['cidade']?></td><td class="right"><?=$linha['populacao']?></td><td class="right"><?=$linha['ano']?></td></tr>
    
    <?php } ?>
</tbody>

                    </table>

David Sylvestre
   - 09 mai 2014

Eu fiz aquelas perguntas porque se forem positivas, você poderia passar a função da seguinte forma

#Código

function estado_listar($conexao, $estado){
    $sql = "SELECT ano, cidade, populacao FROM {$estado}";
    $resultado = mysqli_query($conexao, $sql);
     
    return $resultado;
}

João Paulo
   - 09 mai 2014

Desculpa a ignorância, mais e que estou no começo, não consegui entender como isso vai funcionar para cada estado e como vou listar isso la na tabela do html.

David Sylvestre
   - 09 mai 2014

Então, é que ali no caso eu estou passando o estado como parâmetro, dai uso essa variável como nome da tabela. Mas nesse caso estou supondo que o nome do estado é o nome da tabela, desse modo vc consegue passar dinamicamente o nome da tabela.
Caso o estado nao for o nome da tabela, poderia ser montado um array com a chave sendo o estado e o valor o nome da tabela e através do estado setar o nome da tabela dinamicamente.

João Paulo
   - 17 mai 2014

Mais aonde vou definir o nome da tabela? no caso devo preencher a variavel $estado com ela? por exemplo $estado = al;?

David Sylvestre
   - 22 mai 2014


Citação:
Mais aonde vou definir o nome da tabela? no caso devo preencher a variavel $estado com ela? por exemplo $estado = al;?

Exatamente isso, ai vai depender de como estão os nomes das tabelas, no caso presumo que elas tenhar o mesmo nome do estado.

João Paulo
   - 22 mai 2014

Não conseguir entender onde eu defino o nome do estado, por que seu eu colocar na tabela html ele não envia para a função do construtor, se consegui-se fazer isso poderia ter apenas um codigo no controller e não um para cada estado, poderia explicar onde poderia definir esse nome do estado para não ter que criar um controller para cada estado.

David Sylvestre
   - 29 mai 2014

Só uma duvida, como está sendo chamado as noticias atualmente?