Trabalhando e listando diferentes tabelas em php com mysql

08/05/2014

0

PHP

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.

$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.
João Oliveira

João Oliveira

Responder

Posts

09/05/2014

David Sylvestre

Para dar uma possivel resposta, preciso tirar duas duvidas.

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

09/05/2014

João Oliveira

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:

<?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:
 <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:
<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>
Responder

09/05/2014

David Sylvestre

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

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

09/05/2014

João Oliveira

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.
Responder

09/05/2014

David Sylvestre

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.
Responder

17/05/2014

João Oliveira

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

22/05/2014

David Sylvestre

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.
Responder

22/05/2014

João Oliveira

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.
Responder

29/05/2014

David Sylvestre

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar