Skip to content

Commit

Permalink
Commit da versão 1.3.3
Browse files Browse the repository at this point in the history
  • Loading branch information
ribafs committed Apr 21, 2020
0 parents commit 3d13afe
Show file tree
Hide file tree
Showing 32 changed files with 5,343 additions and 0 deletions.
80 changes: 80 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# CRUD Automático

## In English
![](images/en.png) https://github.com/ribafs/auto-crud/README-en.md

Temos apenas duas classes, Connection() e Crud() com bons métodos e os arquivos básicos do CRUD em core. Você não precisará digitar nenhum nome de campo e nenhuma linha de código. Ele gerará automaticamente o código de um CRUD para cada tabela do banco de dados, não importando quantas sejam.

## URL deste projeto

https://github.com/ribafs/auto-app

## Requisitos:

- PHP (estou usando a 7.2, mas deve funcionar também nas 5.x)
- Servidor web suportado pelo PHP, inclusive o nativo
- MySQL ou PostgreSQL (com pequenas adaptações também roda nos demais suportados pelo PDO)
- Permissão de escrita para o servidor web na pasta do aplicativo (em sistemas Linux ou similares)
- Para que tudo funcione a contento precisa que cada tabela tenha a chave primária chamada "id". Existe como capturar o nome da chave primária de cada tabela mas me daria mais trabalho.

## Recursos:

- PHP com PDO
- Paginação de resultados com bootpag
- Busca integrada
- BootStrap 4

## Instalação:

- Faça o download e descompacte no diretório web. Exemplo: /var/www/html/auto-app ou c:\xampp\htdocs\auto-app
- Crie o banco de dados ou use um existente
- E chame pelo navegador com - http://localhost/auto-app
- Abrirá o formulário para entrada dos dados do banco, como abaixo:

![](images/form.png)

- Entre com os dados do banco e com o nome da tabela e clique em Send
Já estará em frente ao menu com links para todas as tabelas do banco, como a tela abaixo

![](images/menu.png)

Clique em um link para ver o CRUD completo para a tabela selecionada:

![](images/crud.png)

## Origem

Este software partiu do aplicativo "crud_phpoo" do retpositório:
https://github.com/ribafs/aplicativos-php

## Para mudar de tabela:

- Pode editar manualmente o classes/connection.php
- Ou simplesmente remover o classes/connection.php e chamar novamente - http://localhost/auto-app

## Aprendizado:

A construção deste software me adicionou um grande aprendizado de PHP, especialmente sobre os metadados do MySQL e PostgreSQL e sobre a manipulação de strings. Caso seja um programador iniciante ou médio de PHP recomendo que estude o código para aprender os conhecimentos envolvidos.

## CRUD Automático

Tenho também o auto-crud, que faz esta mesma mágica mas somente para uma única tabela de um banco.
https://github.com/ribafs/auto-crud

## Créditos

A paginação básica que utilizei para criar este aplicativo foi encontrada no site abaixo:

https://www.kodingmadesimple.com/2017/01/simple-ajax-pagination-in-jquery-php-pdo-mysql.html

## Licença

MIT

## Sugestões

Serão muito bem vindos:
- Issues (erros, sugestões)
- Forks
- Pull Requests

6 changes: 6 additions & 0 deletions assets/css/bootstrap.min.css

Large diffs are not rendered by default.

18 changes: 18 additions & 0 deletions assets/css/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
.top{
padding-top: 5px;
}

.footer{
background-color:#e6e6e6;
width:85%;
font-size:11px;
text-align:center;
}

.header{
text-align:center;
background-color:#8ad3f7;
padding-top: 10px;
padding-bottom: 10px;
}

2 changes: 2 additions & 0 deletions assets/dicas.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Relação de glyphicons:
https://www.w3schools.com/bootstrap/bootstrap_ref_comp_glyphs.asp
Binary file added assets/fonts/glyphicons-halflings-regular.eot
Binary file not shown.
288 changes: 288 additions & 0 deletions assets/fonts/glyphicons-halflings-regular.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/fonts/glyphicons-halflings-regular.ttf
Binary file not shown.
Binary file added assets/fonts/glyphicons-halflings-regular.woff
Binary file not shown.
Binary file added assets/fonts/glyphicons-halflings-regular.woff2
Binary file not shown.
Binary file added assets/images/ajax-loader.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/brasil.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/crud.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/en.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/form.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/menu.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions assets/js/bootstrap.min.js

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions assets/js/jquery-1.10.2.min.js

Large diffs are not rendered by default.

21 changes: 21 additions & 0 deletions assets/js/jquery.bootpag.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

116 changes: 116 additions & 0 deletions classes/connection.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@

public $pdo;

public function __construct(){

switch ($this->sgbd){
case 'mysql':
try {
$dsn = $this->sgbd.':host='.$this->host.';dbname='.$this->db.';port='.$this->port;
$this->pdo = new PDO($dsn, $this->user, $this->pass);
// Boa exibição de erros
$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$this->pdo->query('SET NAMES utf8');
return $this->pdo;

}catch(PDOException $e){
// Usar estas linhas no catch apenas em ambiente de testes/desenvolvimento. Em produção apenas o exit()
echo '<br><br><b>Código</b>: '.$e->getCode().'<hr><br>';
echo '<b>Mensagem</b>: '. $e->getMessage().'<br>';
echo '<b>Arquivo</b>: '.$e->getFile().'<br>';
echo '<b>Linha</b>: '.$e->getLine().'<br>';
exit();
}
break;

case 'pgsql':
try {
$dsn = $this->sgbd.':host='.$this->host.';dbname='.$this->db.';port='.$this->port;
$this->pdo = new PDO($dsn, $this->user, $this->pass);

// Boa exibição de erros
$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

return $this->pdo;

}catch(PDOException $e){
echo '<br><br><b>Código</b>: '.$e->getCode().'<hr><br>';
echo '<b>Mensagem</b>: '. $e->getMessage().'<br>';
echo '<b>Arquivo</b>: '.$e->getFile().'<br>';
echo '<b>Linha</b>: '.$e->getLine().'<br>';
exit();
}
break;

case 'sqlite':
try {
$this->pdo = new PDO('sqlite:/home/ribafs/estoque.db'); // Caminho do banco em sqlite

// Boa exibição de erros
$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

return $this->pdo;

}catch(PDOException $e){
echo '<br><br><b>Código</b>: '.$e->getCode().'<hr><br>';
echo '<b>Mensagem</b>: '. $e->getMessage().'<br>';
echo '<b>Arquivo</b>: '.$e->getFile().'<br>';
echo '<b>Linha</b>: '.$e->getLine().'<br>';
exit();
}
break;
case 'default':
break;
}
}

// Copiar uma pasta com todos os arquivos e subpastas recursivamente
// Crédito - https://stackoverflow.com/questions/2050859/copy-entire-contents-of-a-directory-to-another-using-php#2050909
public function copyDir($src,$dst) {
$dir = opendir($src);
mkdir($dst);
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ) {
recurse_copy($src . '/' . $file,$dst . '/' . $file);
}
else {
copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}
// Caso a pasta de destino não exista será criada
// copyDir('j381/installation', 'joomla3/installation');

// Nomes das tabelas do banco atual
public function tableNames(){
try {
if($this->sgbd=='mysql'){
$sql="SHOW TABLES";
}elseif($this->sgbd=='pgsql'){
$sql="SELECT relname FROM pg_class WHERE relname !~ '^(pg_|sql_)' AND relkind = 'r';";
}elseif($this->sgbd=='sqlite'){
$sql='SELECT name FROM sqlite_master WHERE type = "table"';
}
$tableList = array();
$res = $this->pdo->prepare($sql);
$res->execute();
while($cRow = $res->fetch())
{
$tableList[] = $cRow[0];
}
return $tableList;// array
}catch (PDOException $p){
print $p->getMessage();
exit;
}
}

}

Loading

0 comments on commit 3d13afe

Please sign in to comment.