Skip to content

Instantly share code, notes, and snippets.

@silvadias22
Created May 11, 2016 02:09
Show Gist options
  • Select an option

  • Save silvadias22/1c4c5425ae74bac3a1c44b2a995110e3 to your computer and use it in GitHub Desktop.

Select an option

Save silvadias22/1c4c5425ae74bac3a1c44b2a995110e3 to your computer and use it in GitHub Desktop.
PHP - Jquery(simples) - PostgresSQL
<?php
function conexaoPDO(){
#Iniciando conexão com banco de dados
$pdo = new PDO ('pgsql:host=localhost; dbname=desenvolvedor' , 'postgres' , '');
$pdo->setattribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
}
function buscarAno(){
$pdo = conexaoPDO();
$stmt = $pdo->prepare('select * from public."ANO";');
$stmt->execute();
$pdo = null;
return $stmt;
}
function fatos2013(){
$pdo = conexaoPDO();
$fatos2013 = $pdo->prepare('select * from public."ANO" where id=1;');
$fatos2013->execute();
$pdo = null;
return $fatos2013;
}
function fatos2014(){
$pdo = conexaoPDO();
$fatos2014 = $pdo->prepare('select * from public."ANO" where id=2;');
$fatos2014->execute();
$pdo = null;
return $fatos2014;
}
function fatos2015(){
$pdo = conexaoPDO();
$fatos2015 = $pdo->prepare('select * from public."ANO" where id=3;');
$fatos2015->execute();
$pdo = null;
return $fatos2015;
}
function fatos2016(){
$pdo = conexaoPDO();
$fatos2016 = $pdo->prepare('select * from public."ANO" where id=4;');
$fatos2016->execute();
$pdo = null;
return $fatos2016;
}
?>
<!DOCTYPE html>
<?php
include "database.php";
$stmt = buscarAno();
$ano = $stmt->fetch();
$fatos2013 = fatos2013();
$fatos2013 = $fatos2013->fetch();
$fatos2014 = fatos2014();
$fatos2014 = $fatos2014->fetch();
$fatos2015 = fatos2015();
$fatos2015 = $fatos2015->fetch();
$fatos2016 = fatos2016();
$fatos2016 = $fatos2016->fetch();
?>
<html>
<head>
<meta charset="utf8">
<link rel="stylesheet" href="css/bootstrap.css">
</head>
<body>
<div class="container" style="margin: 10%">
<div class="panel panel-default">
<div class="panel-heading text-center">
<p>
Selecione o ano para realizar a busca:
</p>
<select name="ANO" id="ANO" class="selectpicker">
<option id="2013" name="2013" value="2013" <?php if (in_array('2013' , $ano)); ?>>Registros de 2013</option>
<option id="2014" name="2014" value="2014" <?php if (in_array('2014' , $ano)); ?>>Registros de 2014</option>
<option id="2015" name="2015" value="2015" <?php if (in_array('2015' , $ano)); ?>>Registros de 2015</option>
<option id="2016" name="2016" value="2016" <?php if (in_array('2016' , $ano)){ echo "selected" ; } ?>>Registros de 2016</option>
<!--
Outras opções
<option <?php /*if ($stmt['2014'] == '2014') ;?> value="2014">2014</option>
<option <?php if ($stmt['2015'] == '2015') ;?> value="2015">2015</option>
<option <?php if ($stmt['2016'] == '2016') echo 'selected';*/ ?> value="2016">2016</option>
-->
</select>
</div>
<!-- 2013 -->
<div class="panel-body">
<div id="Ano2013" style="display: none;">
<table class="table table-striped table table-bordered table table-hover">
<thead>
<tr class="text-center">
<td class="success">Fato registrado no ano de <?php echo $fatos2013['1'];?></td>
</tr>
</thead>
<tbody>
<tr class="default text-center">
<td><?php echo $fatos2013['2'];?></td>
</tr>
</tbody>
</table>
</div>
<!-- 2014 -->
<div id="Ano2014" style="display: none;">
<table class="table table-striped table table-bordered table table-hover">
<thead>
<tr class="text-center">
<td class="success">Fato registrado no ano de <?php echo $fatos2014['1'];?></td>
</tr>
</thead>
<tbody>
<tr class="default text-center">
<td><?php echo $fatos2014['2'];?></td>
</tr>
</tbody>
</table>
</div>
<!-- 2015 -->
<div id="Ano2015" style="display: none;">
<table class="table table-striped table table-bordered table table-hover">
<thead>
<tr class="text-center">
<td class="success">Fato registrado no ano de <?php echo $fatos2015['1'];?></td>
</tr>
</thead>
<tbody>
<tr class="default text-center">
<td><?php echo $fatos2015['2'];?></td>
</tr>
</tbody>
</table>
</div>
<!-- 2016 -->
<div id="Ano2016">
<table class="table table-striped table table-bordered table table-hover">
<thead>
<tr class="text-center">
<td class="success">Fato registrado no ano de <?php echo $fatos2016['1'];?></td>
</tr>
</thead>
<tbody>
<tr class="default text-center">
<td><?php echo $fatos2016['2'];?></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div><!-- Container -->
</body>
<script src="js/jquery-2.2.3.min.js"></script>
<script src="js/bootstrap.js"></script>
<script>
$(document).ready(function(){
$("#2013").click(function(){
$("#Ano2013").show();
$("#Ano2014 , #Ano2015 , #Ano2016").hide();
});
$("#2014").click(function(){
$("#Ano2014").show( );
$("#Ano2013 , #Ano2015 , #Ano2016 ").hide();
});
$("#2015").click(function(){
$("#Ano2015").show( );
$("#Ano2013 , #Ano2014 , #Ano2016 ").hide();
});
$("#2016").click(function(){
$("#Ano2016").show( );
$("#Ano2013 , #Ano2014 , #Ano2015 ").hide();
});
});
/*
Na raça fica mais ou menos assim:
$( "#2013" ).click(function() {
$( "#0" ).show( 5 , function() {
$( "#1" ).hide( 5 , function() {
$( "#2" ).hide( 5 , function() {
$( "#3" ).hide( 5 , function() {
});
});
});
});
});
$( "#2014" ).click(function() {
$( "#0" ).hide( 5, function() {
$( "#1" ).show( 5 , function() {
$( "#2" ).hide( 5 , function() {
$( "#3" ).hide( 5, function() {
});
});
});
});
});
$( "#2015" ).click(function() {
$( "#0" ).hide( 5 , function() {
$( "#1" ).hide( 5 , function() {
$( "#2" ).show( 5 , function() {
$( "#3" ).hide( 5 , function() {
});
});
});
});
});
$( "#2016" ).click(function() {
$( "#0" ).hide( 5 , function() {
$( "#1" ).hide( 5 , function() {
$( "#2" ).hide( 5 , function() {
$( "#3" ).show( 5 , function() {
});
});
});
});
});
*/
</script>
</html>
-- Table: public."ANO"
-- DROP TABLE public."ANO";
CREATE TABLE public."ANO"
(
id integer NOT NULL DEFAULT nextval('"ANO_id_seq"'::regclass),
"ANO" integer NOT NULL,
"FATOS" text,
CONSTRAINT "ANO_pkey" PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public."ANO"
OWNER TO postgres;
@rat

rat commented May 11, 2016

Copy link
Copy Markdown

Muito bom! Você também poderia usar classes do PHP, seu código ficaria muito menor e fácil de manutenir.

@kelvysmoura

Copy link
Copy Markdown

Ficou bom!
Mas toda função você ta chamando a conexão.
Poderia definir uma variável fora do escopo e atribuir a variável de conexão, assim não precisaria fazer uma nova conexão em cada uma das funções. $pdo = conexaoPDO()
Porem o mais aconselhável mesmo é trabalhar com classes.

@silvadias22

Copy link
Copy Markdown
Author

É verdade rapaziada =)

Eu mesmo deixei de melhorar os scripts em alguns aspectos, por exemplo, usei muitas funções, quase que um exagero, não acham que seria bem mais interessante agregar os exageros? hehe.
A variavel para ser declarada fora do escopo é também uma exelente forma de melhorar o enredo.
Mas a questão das classes, por mais que concordo plenamente em usar, eu estaria fugindo do foco do trabalho, kkkk . Criar um projeto simples sem utilizar o exagero dos recursos, construir um projeto que abrange algumas operações extremamente importante de forma mais bruta. hehehe

@arielpts

Copy link
Copy Markdown

Acredito que classes seria demais :)

Fiz um refatoramento no seu código para deixar ele mais genérico, dá uma olhada: https://gist.github.com/arielpts/15bf6230f7d069b7624be49c6f0d7089/revisions

@silvadias22

Copy link
Copy Markdown
Author

arielpts, cara que top, vou ler e reproduzir a manutenção que você propôs. Sou um novato, estou impressionado em perceber as diferenças de escrita dos scripts ... hehehe . Grande colaboração :D

@vhenckel

Copy link
Copy Markdown

Você poderia criar uma única função de fatos e passar o ano como parâmetro já que todas as funções são exatamente iguais e só mudam o ID.
Deveria ser algo assim: function fatos($anoID).
E também tirar a conexão de dentro da função.
Abraço.

@m3ll0c

m3ll0c commented May 11, 2016

Copy link
Copy Markdown

Então cara, a dica é centralizar o acesso ao banco e padronizar o acesso a variavel de conexão, por exemplo, quando for fazer um SELECT a query será processada de uma maneira igual e o código ficará mais reutilizável. Use prepared statements, jogue um bindParam ali, aí tu já melhora a segurança e etc...
Logo mais vou passar meu tcc aqui nessa conta do Git, se quiser dar uma olhada, sugetões são sempre aceitas 😄

@leomaurodesenv

Copy link
Copy Markdown

Dicas de Codigo

Basicamente evitar de realizar operações repetidas, para tal, crie funções/métodos/rotinas que as reproduzam.

Dica PHP:

Crie uma função para realizar as operações do fatos201x();

function fatosPorAno($id){
  $pdo = conexaoPDO();
  $fatos = $pdo->prepare('select * from public."ANO" where id=?;');
  $fatos->execute(array($id));
  $pdo = null;
  return $fatos;
}

Dica JQuery:

Crie uma função para incluir as operações do .click();

Adicione uma .class e um attr para buscar o nome da id
Exemplo: class="anos" data-year="Ano2013"

<div id="Ano2013" style="display: none;" class="anos" data-year="#Ano2013">

Agora o JQuery que vai processar as divs.

$(document).ready(function(){
  $('.anos').each(function(){
    $(this).bind('click', function(){
      var year = $(this).data('year');
      $('.anos').hide();
      $(year).show();
    });
  });

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment