Skip to content

Commit

Permalink
Commit 1.7
Browse files Browse the repository at this point in the history
  • Loading branch information
ribafs committed Dec 25, 2017
1 parent 6fee929 commit 8cb6059
Show file tree
Hide file tree
Showing 28 changed files with 1,152 additions and 0 deletions.
102 changes: 102 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Criador Automático de CRUDs

#### Apenas indique o banco de dados e a tabela no conexao.php e ele cria seu CRUD com PDO, Bootstrap e Paginação, com suporte a MySQL e PostgreSQL garantidos e ainda outros via PDO.

### Mais facilidades para esta versão
Agora você pode apenas inserir o script.sql na pasta script e indicar no conexão que o auto-crud-pt irá criar o banco para ele e importar seu script

### Em dois Idiomas
Português - https://github.com/ribafs/auto-crud-pt

Inglês - https://github.com/ribafs/auto-crud-en

### Requisitos:
- Apache2
- PHP 5.5.9+
- MySQL 5.5+ ou PostgreSQL 8+

## Download
https://github.com/ribafs/auto-crud

## Instalação
Descompacte o pacote baixado e copie o diretório auto-crud para seu diretório web (renomeie a vontade).
Supondo que tenha mudado o nome para clientes.

## Instalando via composer
- Criar um diretório via terminal
- Acessar o diretório criado e executar:

composer require ribafs/auto-crud-pt

## Configuração

Edite o arquivo db_connnect.php e ajuste para as informações do seu banco de dados
Lembre também de indicar a tabela a ser usada.
Pode testar com os scripts existentes para mysql e para postgresql: clientes_my.sql e clientes_pg.sql na pasta scripts

Chame em seu navegador com
http://localhost/clientes

Ao abrir no navegador verá o grid com o CRUD como abaixo:

<img src="imagens/grid.png">

No grid acima verá a listagem dos registros existentes com paginação, edição, exclusão e adição de um novo registro.

Para inserir um novo registro clique no botão à esquerda Novo Registro

<img src="imagens/insert.png">

Para atualizar um dos registros clique no ícone Editar à esquerda e verá a tela:

<img src="imagens/update.png">

Para remover um registro apenas clique no link Excluir à direita do Editar e confirme na tela:

<img src="imagens/delete.png">

## Funcionamento

Após configurar o banco e a tabela e chamar pelo navegador ele trata cada um dos campos da tabela de forma particular usando para isso informações de metadados do SGBD.

## Customizações

O código com a paginação está no arquivo libs/ps_pagination.php.

## Releases

- 1.0 - Versão inicial
- 1.1 - Nesta versão os arquivos foram todos renomeados para nomes em português

- Melhorados e traduzidos os comentários
- Simplificação do código removendo código desnecessário
- Criadas duas funções para substituir trechos de código que se repetiam. Inseri seu include na conexao.php para facilitar
- Pequena alteração no css do cabeçalho e do rodapé

- 1.2 - Correçes devido aos ajustes da 1.1

- 1.3 - Separados os arquivos principais inserir, atualizar e excluir em dois. Agora o inserir é inserir e inserirdb.

- 1.4 - Agora ele cria o banco para você e importa seu script, basta indicar onde ele está no conexao.php

- 1.5 - Otimização das funções. Passando mais informações para elas e reduzindo a quantidade de parâmetros. Assim o código fica mais simples e mais fácil de entender.
Estes são os objetivos principais: facilitar a vida do programador/usuário e simplificar/otimizar o código.

- 1.6 - Ainda continuando a otimização do código. Melhorando as funções e com isso tambéma a quantidade de linhas foi reduzida.

- 1.7 - Mais ajustes para o código. Otimizando para separar melhor e deixar fácil para converter para OO.

## AVISO
O principal objetivo deste pequeno software é o de facilitar a vida de quem não programa e nem está pensando em aprender e também o de facilitar para quem programa mas apenas quer criar algo rápido, como uma agenda ou um cadastro simples.

## Licença

MIT

Agradecimento ao site
https://www.codeofaninja.com/2011/06/paginating-your-data-with-ajax-and.html

Sem ele a paginação não seria tão elegante e eficiente.
53 changes: 53 additions & 0 deletions atualizar.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php
require_once('./cabecalho.php');
require_once('./conexao.php');

// Receebr o id via GET do busca_resultados.php ou via POST deste arquivo
if(isset($_GET['id'])){
$id=$_GET['id'];
}else{
$id=$_POST['id'];
}

// Mostrar nome da Tabela
print '<h3 align="center">'.ucfirst($table).'</h3>';
?>

<!-- Mostrar form de atualização -->
<div class="container" align="center">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-6">
<form method="post" action="atualizar.php">
<table class="table table-bordered table-responsive table-hover">

<?php
$sth = $pdo->prepare("SELECT * from $table WHERE id = :id");
$sth->bindValue(':id', $id, PDO::PARAM_STR); // No select e no delete basta um único bindValue
$sth->execute();

$reg = $sth->fetch(PDO::FETCH_OBJ);

$num_campos = num_campos();

for($x=0;$x<$num_campos;$x++){
$campo = nome_campo($x);
?>
<tr><td><b><?=ucfirst($campo)?></td><td><input type="text" name="<?=$campo?>" value="<?=$reg->$campo?>"></td></tr>
<?php
}
?>
<input name="id" type="hidden" value="<?=$id?>">
<tr><td></td><td><input name="enviar" class="btn btn-primary" type="submit" value="Editar">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input name="enviar" class="btn btn-warning" type="button" onclick="location='index.php'" value="Voltar"></td></tr>
</table>
</form>
</div>
<div>
</div>

<?php
require_once('./rodape.php');
require_once('./atualizarbd.php');
?>

35 changes: 35 additions & 0 deletions atualizarbd.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

if(isset($_POST['enviar'])){
$set='';
$num_campos = num_campos();

for($x=0;$x<$num_campos;$x++){
$campo = nome_campo($x);
// A linha abaixo gerará a linha: $nome = 'Nome do cliente';
$$campo = $_POST[$campo];

// Esta if gerará a variável $set contendo "$nome = :$nome, $email = :$email, ...";
if($x<$num_campos-1){
if($x==0) continue;
$set .= "$campo = :$campo,";
}else{
if($x==0) continue;
$set .= "$campo = :$campo";
}
}

$sql = "UPDATE $table SET $set WHERE id = :id";
$sth = $pdo->prepare($sql);

for($x=0;$x<$num_campos;$x++){
$campo = nome_campo($x);
$sth->bindParam(":$campo", $_POST["$campo"], PDO::PARAM_INT);
}

if($sth->execute()){
print "<script>location='index.php';</script>";
}else{
print "Erro ao editar o registro!<br><br>";
}
}
64 changes: 64 additions & 0 deletions busca.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php
require_once('./cabecalho.php');
include './conexao.php';

// Busca
if(isset($_GET['palavra'])){
$palavra=$_GET['palavra'];
$campo = nome_campo(1);

$sql = "select * from $table WHERE $campo LIKE :palavra order by id";
$sth = $pdo->prepare($sql);
$sth->bindValue(":palavra", $palavra."%");
$sth->execute();
$rows =$sth->fetchAll(PDO::FETCH_ASSOC);
}

print '<div class="container" align="center">';
print '<h4>Registro(s) encontrado(s)</h4>';

if(count($rows) > 0){
print '<div class="container" align="center">';
echo '<table class="table table-hover">';
echo "<tr>";

$num_campos = num_campos();

for($x=0;$x<$num_campos;$x++){
$campo = nome_campo($x);
?>
<th><?=ucfirst($campo)?></th>
<?php
}

print '<th colspan="2">Ação</th>';
echo "</tr>";

// Loop através dos registros recebidos
foreach ($rows as $row){
echo "<tr>";
for($x=0;$x<$num_campos;$x++){
$campo = nome_campo($x);
?>
<td><?=$row[$campo]?></td>
<?php
}
?>
<td><a href="atualizar.php?id=<?=$row['id']?>"><i class="glyphicon glyphicon-edit" title="Editar"></a></td>
<td><a href="excluir.php?id=<?=$row['id']?>"><i class="glyphicon glyphicon-remove-circle" title="Excluir"></a></td></tr>

<?php
echo "</tr>";
}
echo "</table>";

}else{
print '<h3>Nenhum Registro encontrado!</h3>';
}

?>

<input name="enviar" class="btn btn-warning" type="button" onclick="location='index.php'" value="Voltar">
</div>

<?php require_once('./cabecalho.php'); ?>
103 changes: 103 additions & 0 deletions busca_resultados.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<?php require_once('./cabecalho.php'); ?>

<div class="container">
<div class="row">
<!-- Botão para adicionar novo registro-->
<div class="col-md-3">
<a href="inserir.php" class="btn btn-default">Novo Registro</a>
</div>

<!-- Form de busca-->
<div class="col-md-9">
<form action="busca.php" method="get" >
<div class="pull-right"style="padding-left: 0;" >
<span class="pull-right">
<label class="control-label" for="palavra" style="padding-right: 0;">
<input type="text" value="" placeholder="Nome ou parte" class="form-control" name="palavra">
</label>
</span>
<button class="btn btn-info">Busca</button>
</div>
</form>
</div>
</div>
</div>
<br>

<?php
require_once './conexao.php';
require_once './paginacao.php';

$sql = "select * from $table order by id";

/*
Parâmetros da Paginacao:
> $pdo é a variável da nossa conexao.php
> $sql é a string SQL da consulta acima
> 15 é o número de registros recebidos por página
> 23 é o número de páginas mostradas por vez
> null - Usamos null porque não temos nenhum outro parâmetro para passar
(i.e. param1=valu1&param2=value2)
You can use this if you are going to use this class for search results.
O último parâmetro é útil para quando estamos fazendo busca via paginação (keyword), mas no caso não estou usando.
*/

// Sintaxe da Paginacao($pdoection, $sql, $rows_per_page = 15, $links_per_page = 23, $append = "")
$pager = new Paginacao($pdo, $sql, 15, 23, null);

// Classe de paginação renderiza os registros retornados
$rs = $pager->paginate();

// Conta quantos registros retronaram
$num = $rs->rowCount();
if($num >= 0 ){

// Cria o cabeçalho da tabela
print '<div class="container" align="center">';
echo '<table class="table table-hover">';
echo "<tr>";
$num_campos = num_campos();

for($x=0;$x<$num_campos;$x++){
$campo = nome_campo($x);
?>
<th><?=ucfirst($campo)?></th>
<?php
}
// Mostrar os rótulos dos campos
print '<th colspan="2">Ação</th>';
echo "</tr>";

// Loop através dos registros recebidos
while ($row = $rs->fetch(PDO::FETCH_ASSOC)){
echo "<tr>";
for($x=0;$x<$num_campos;$x++){
$campo = nome_campo($x);
?>
<!-- Mostrar os valores dos campos-->
<td><?=$row[$campo]?></td>
<?php
}
?>
<td><a href="atualizar.php?id=<?=$row['id']?>"><i class="glyphicon glyphicon-edit" title="Editar"></a></td>
<td><a href="excluir.php?id=<?=$row['id']?>"><i class="glyphicon glyphicon-remove-circle" title="Excluir"></a></td></tr>
<?php
echo "</tr>";
}
echo "</table>";
}else{
// Caso não encontre registros
echo "Nenhum registro encontrado!";
}

// 'page-nav' CSS class é usada para controlar a aparência dos números de páginas da navegação
echo "<div class='page-nav' align='center'>";
// Mostra nossa navegação de números
echo $pager->renderFullNav();
echo "</div>
</div>";

require_once('./rodape.php');
?>
18 changes: 18 additions & 0 deletions cabecalho.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" sizes="16x16 24x24 32x32 64x64"/>
<link href="./css/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="./css/style.css" rel="stylesheet" media="screen">
</head>
<body>
<div class="container cabecalho">
<div align="center">
<h1>Criador Automático de CRUDs</h1>
</div>
</div>
<br>
Loading

0 comments on commit 8cb6059

Please sign in to comment.