Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Erick Tarzia

CRUD totalmente dinâmico

Recommended Posts

Olá.. Estou desenvolvendo um CRUD extremamente dinâmico, já é aplicável para muitas finalidades, falta ainda concluir a parte do UPDATE, pois ando meio sem tempo.

Seguem aí os códigos e assim e concluír eu atualizo.

 

Primeiro a conexão:

<?php



/**
 *
 * @author Erick Tarzia
 * 07/02/2013
 *        
 */


class conexao
{


    private $db_host = ''; // servidor
    private $db_user = ''; // usuario do banco
    private $db_pass = ''; // senha do usuario do banco
    private $db_name = ''; // nome do banco

    private $con = false;

 
    public function connect() // estabelece conexao
    {
        if(!$this->con)
        {
            $myconn = @mysql_connect($this->db_host,$this->db_user,$this->db_pass);
            if($myconn)
            {
                $seldb = @mysql_select_db($this->db_name,$myconn);
                if($seldb)
                {
                    $this->con = true;
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        else
        {
            return true;
        }
    }

 
    public function disconnect() // fecha conexao
    {
    if($this->con)
    {
        if(@mysql_close())
        {
                        $this->con = false;
            return true;
        }
        else
        {
            return false;
        }
    }
    }
    
}

?>

agora minha classe crud.class.php

<?php

/**
 *
 * @author Erick Tarzia
 * 07/02/2013
 *
 */

class Crud {
	function pegarPrimaria($tabela) {
		// $keys = Array ();
		$queryChave = sprintf ( "SHOW KEYS FROM `%s`", $tabela );
		$resultChave = mysql_query ( $queryChave ) or die ( "Erro: " . mysql_error () );
		
		while ( $rowChave = mysql_fetch_assoc ( $resultChave ) ) {
			if ($rowChave ['Key_name'] == 'PRIMARY') {
				$chavePrimaria = $rowChave ['Column_name'];
			}
		}
		
		return $chavePrimaria;
	}
	public function AntiInjection($param) {
		$param = strip_tags ( $param ); // retirar as tags html
		
		$param = mysql_escape_string ( $param ); // Retirar todas tags referentes
		                                         // do
		                                         // mysql ex: select, insert,
		                                         // update drop
		                                         // etc...
		
		return $param;
	}
	public function retornarCamposTabela($tabela) {
		$campos = array ();
		
		$result = mysql_query ( "SHOW COLUMNS FROM " . $tabela ); // descobrir os
		                                                          // campos da
		                                                          // tabela
		while ( $campo = mysql_fetch_assoc ( $result ) ) {
			$campos [] = $campo ['Field'];
		}
		unset ( $campos [0] ); // retirar o primeiro campo da lista
		                       
		// listar os dados do array
		/*
		 * foreach ( $campos as $valores ) { echo $valores . "<br>"; }
		 */
		// retorna um array com todos os campos da tabel menos o primeiro(id)
		return $campos;
	}
	public function inserir($table, $array) {
		$insert = "INSERT INTO " . $table;
		
		$columns = $this->retornarCamposTabela ( $table );
		$data = array ();
		
		foreach ( $array as $key => $value ) {
			
			if ($value != "") {
				$data [] = "'" . $value . "'";
			} else {
				$data [] = "NULL";
			}
		}
		
		$cols = implode ( ",", $columns );
		$values = implode ( ",", $data );
		
		$sql = $insert . " (" . $cols . ") " . " VALUES " . " (" . $values . ") ";
		$this->query ( $sql );
	}

	public function listar($nomeDaTabela) {
		$chavePrimaria0 = $this->pegarPrimaria ( $nomeDaTabela );
		$result = mysql_query ( "SHOW COLUMNS FROM " . $nomeDaTabela );
		
		if (! $result) {
			echo 'Erro: ' . mysql_error ();
			exit ();
		}
		
		$totalDeCampos = mysql_num_rows ( $result ); // total de campos da tabela
		
		$lista = mysql_query ( "select * from " . $nomeDaTabela );
		
		// listar os dados
		echo '<table align="center">';
		echo '	<tr>';
		$z = 0;
		while ( $row = mysql_fetch_assoc ( $result ) ) {
			echo '		<td>';
			$nome [$z] = $row ['Field'];
			$tipo [$z] = $row ['Type'];
			
			echo "<strong>" . $nome [$z] . "</strong>";
			$z ++;
			
			echo '		</td>';
		}
		
		echo '	</tr>';
		
		$w = 0;
		
		while ( $linha = mysql_fetch_assoc ( $lista ) ) {
			echo '<tr>';
			
			for($w = 0; $w < $totalDeCampos; $w ++) {
				
				echo '<td>';
				echo $linha [$nome [$w]];
				echo '</td>';
			}
			
			echo '</tr>';
		}
		echo '</table>';
	}
	public function apagar($tabela, $id) {
		$chavePrimaria = $this->pegarPrimaria ( $tabela );
		echo $chavePrimaria;
		$queryApagar = "DELETE FROM " . $tabela . " where " . $chavePrimaria . " = " . $id;
		$this->query ( $queryApagar );
	}
	public function query($sql) {
		$q = mysql_query ( $sql );
		if ($q) {
			echo "<script>alert('Concluído');</script>";
		} else {
			echo "<script>alert('Erro: " . mysql_errno () . "');</script>";
		}
	}
}

Agora vamos a utilização:

<php
require_once 'conexao.php';
require_once 'classes/crud.class.php';
$con = new Conexao();
$con->connect();


$crud = new Crud();
$crud->listar('nome_da_tabela'); // para exibir uma tabela com todos os dados.


?>

Agora vou mostrar como fazer um insert

<?php

// primeiro ver se ação é para adicionar
if(isset($_GET['acao'])){
	$acao = $_GET['acao'];
	
	if($acao == 'novo'){ // se ação for novo
		
		$valore = array();

//pega todos os $_POST e coloca num array
		foreach( $_POST as $valor => $vlr){
			$valores[] = $crud->AntiInjection($vlr);
		}
		
//mostra os valores enviados (apenas para confirmação)
		foreach ( $valores as $valores0 ) {
			echo $valores0 . "<br>";
		}
		$crud->inserir('nome_da_tabela_para_INSERT'',$valores); // chama a função que faz o insert na tabela
	}
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?acao=novo" >
<table align="center">
  <tr>
    <td>Nome</td>
    <td><label for="nome"></label>
    <input type="text" name="nome" id="nome" /></td>
  </tr>
  <tr>
    <td>Nome2</td>
    <td><input type="text" name="nome2" id="nome2" /></td>
  </tr>
  <tr>
    <td>Nome3</td>
    <td><input type="text" name="nome3" id="nome3" /></td>
  </tr>
  <tr>
    <td>Nome4</td>
    <td><input type="text" name="nome4" id="nome4" /></td>
  </tr>
  <tr>
    <td>Nome5</td>
    <td><input type="text" name="nome5" id="nome5" /></td>
  </tr>
  <tr>
    <td>Nome6</td>
    <td><input type="text" name="nome6" id="nome6" /></td>
  </tr>
  <tr>
    <td> </td>
    <td><input type="submit" value="Enviar" /></td>
  </tr>
</table>
</form>

para apagar, o princípio é o mesmo:

//recomendo criar separadamente o aquivo apagar.php, desta forma conseguirá usar em qualquer parte do sistema assim:
<a href='apagar.php?tabela=SUA_TABELA&id=ID_A _SER_APAGADO&acao=apagar'>APAGAR</a>

<?php


require_once 'conexao.php';
require_once 'classes/crud.class.php';
$con = new Conexao();
$con->connect();



$crud = new Crud();
// só pra garantir que nada seja apagado acidentalmente
if(isset($_GET['acao']){
if($acao == 'apagar'){
$tabela = $_GET['tabela'];
$id = $_GET['id']; 
$crud->apagar($tabela,$id);
}
}

Espero que gostem e que seja útil.

assim que terminar a função de UPDATE eu atualizo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ótimo, muito bom, parabéns.

 

Contudo, seu "totalmente dinâmico" esta furado, tendo em vista que as páginas de inserção/alteração devem ser escritas.

 

Veja o Grocery CRUD para CodeIgniter, esse sim é totalmente dinâmico.

 

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então, eu comecei a fazer os inputs para inserção e atualização, e também as opções na lista, mas achei que ficaria muito groceiro, pq precisariamos de qq forma escrever as partes com select box, check bos, radio.. etc.. então preferi deixar que cada desenvolvedor escreva seu próprio formulário..

 

Muito obrigado pelo comentário..



Ótimo, muito bom, parabéns.

 

Contudo, seu "totalmente dinâmico" esta furado, tendo em vista que as páginas de inserção/alteração devem ser escritas.

 

Veja o Grocery CRUD para CodeIgniter, esse sim é totalmente dinâmico.

 

Até mais.

 

Ótimo, muito bom, parabéns.

 

Contudo, seu "totalmente dinâmico" esta furado, tendo em vista que as páginas de inserção/alteração devem ser escritas.

 

Veja o Grocery CRUD para CodeIgniter, esse sim é totalmente dinâmico.

 

Até mais.

Gostei no Grocery CRUD a opção de exportar para excel.. legal hein, depois do update implantarei também essa opção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns pela iniciativa e disposição em ajudar @Erick.

 

Também desenvovi um para meus sistemas, mas esbarro no mesmo problema de personalização de formulários (desenvolvo temas personalziados para os sistemas) e, assim sendo, somente tenho as rotinas para:

 

- apagar um registro

- atualizar dados camuns as tabelas, ex: status do regitro (ativo/inativo)

- coletar um registro

 

E concordo: prefiro a liberdade para formatar os formulários d einserção e atualziação.

Abraço e boa sorte no aprimoramento de seu código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, para exportar te recomendo dar uma olhada nisso:

http://jquerybyexample.blogspot.com/2012/10/export-table-data-to-excel-using-jquery.html

http://geekswithblogs.net/WayneMagnum/archive/2012/07/16/export-html-table-to-excel-with-js.aspx

http://www.w3schools.in/jquery/export-to-excel/

http://www.oficinadanet.com.br/artigo/1872/exportando_tabelas_html_para_o_excel_com_jquery

 

São formas de exportar uma tabela (que seria sua listagem), para CSV ou Excell facilmente apenas com javascript (esses exemplos usam jQuery, porém é possível fazer apenas com javascript).

 

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns pela iniciativa e disposição em ajudar @Erick.

 

Também desenvovi um para meus sistemas, mas esbarro no mesmo problema de personalização de formulários (desenvolvo temas personalziados para os sistemas) e, assim sendo, somente tenho as rotinas para:

 

- apagar um registro

- atualizar dados camuns as tabelas, ex: status do regitro (ativo/inativo)

- coletar um registro

 

E concordo: prefiro a liberdade para formatar os formulários d einserção e atualziação.

Abraço e boa sorte no aprimoramento de seu código.

Valew pela força meu velho.. vou tentar concluir o update hj..

 

Então cara, para exportar te recomendo dar uma olhada nisso:

http://jquerybyexample.blogspot.com/2012/10/export-table-data-to-excel-using-jquery.html

http://geekswithblogs.net/WayneMagnum/archive/2012/07/16/export-html-table-to-excel-with-js.aspx

http://www.w3schools.in/jquery/export-to-excel/

http://www.oficinadanet.com.br/artigo/1872/exportando_tabelas_html_para_o_excel_com_jquery

 

São formas de exportar uma tabela (que seria sua listagem), para CSV ou Excell facilmente apenas com javascript (esses exemplos usam jQuery, porém é possível fazer apenas com javascript).

 

Até mais.

Valew tb.. já precisei criar relatórios em excel, mas na época eu usei aquele PHPEXCELL e dava um trabalhão deixar as planilhas apresentáveis.. vou analizar...

Muito Obrigado a todos, e a quem quiser contribuir, fique a vontade :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta é função de UPDATE

/*
	 * 
	 * Função para Update no DB, o campo id precisa estar no formulário
	 */
	public function atualizar($tabela, $array) {
		$campos = array ();
		
		$result = mysql_query ( "SHOW COLUMNS FROM " . $tabela ); // descobrir os
		                                                          // campos da tabela

//colocar os nome das colunas num array
		while ( $campo = mysql_fetch_assoc ( $result ) ) {
			$campos [] = $campo ['Field'];
		}
		//tratar os dois arrays para gerar o formato: campo1 = valor1, campo2 = valor2, ca....
		$arrayNovo = array ();
		for($e = 0; $e < count ( $campos ); $e ++) {
			
			$arrayNovo [] = $campos [$e] . "='" . $array [$e] ."'";
		}
		$values = implode ( ",", $arrayNovo );

		
		$sql = "UPDATE ". $tabela . " SET " . $values . " WHERE " .$campos[0] . "=" . $array[0];
		echo $sql;
		$this->query($sql);
	}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso não é dinâmico e é acoplado ao mysql, pior ainda que está usando funções depreciadas mysql_* e arroba .... ploft!

 

É impressionante a ignorancia de alguns, este script foi disponibilizado gratuitamente com o único intuito de ajudar quem quer que seja.

Você não precisa gostar e muito menos usar, notei que você não deixou nem sequer um tutorial.

Antes de criticar qualquer pessoa sobre qualquer assunto faça melhor, não duvido da sua capacidade de fazer melhor, duvido sim é do seu carater de fazer alguma coisa para alguém, você é do tipo de desenvolvedor que guarda todos os teus scripts e não ajuda ninguém.. Está aqui só para criticar... é uma pena existir pessoas como você... é por isso que tanta gente deixa de publicar muita coisa boa, por causa de babacas como você..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso não é dinâmico, como eu disse. Entendo sua vontade de ajudar, e apoio, não estou xingando, mas código tem de ser criticado para ser melhorado .. e não sou "closed-source".

 

Se não aceita críticas acho que deve rever os conceitos, uma crítica muita das vezes é melhor e mais produtivo do que um elogio. Com elogios nos acomodamos, com críticas evoluímos.



Quanto ao "tutorial":

 

Problemas:

 

- Acoplamento ao MySQL (existem outros DBs).

- Utilização do arroba (ele tem seus casos de uso com tratamento de arquivos, mas neste caso não).

- mysql_* Essas funções não podem ser mais usadas no PHP 5.5, elas são antigas, do PHP 3 e existe a solução melhor: PDO

 

Soluções

 

- Use PDO, vc vai eliminar 70% dos problemas, não vai precisar do arroba e vai abstrair a conexão.

- Use um QueryBuilder, para abstrair as queries ou crie o seu próprio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso sim é uma crítica.. o outro era reclamação..

Agora sim, obrigado..

 

Isso não é dinâmico, como eu disse. Entendo sua vontade de ajudar, e apoio, não estou xingando, mas código tem de ser criticado para ser melhorado .. e não sou "closed-source".

 

Se não aceita críticas acho que deve rever os conceitos, uma crítica muita das vezes é melhor e mais produtivo do que um elogio. Com elogios nos acomodamos, com críticas evoluímos.



Quanto ao "tutorial":

 

Problemas:

 

- Acoplamento ao MySQL (existem outros DBs).

- Utilização do arroba (ele tem seus casos de uso com tratamento de arquivos, mas neste caso não).

- mysql_* Essas funções não podem ser mais usadas no PHP 5.5, elas são antigas, do PHP 3 e existe a solução melhor: PDO

 

Soluções

 

- Use PDO, vc vai eliminar 70% dos problemas, não vai precisar do arroba e vai abstrair a conexão.

- Use um QueryBuilder, para abstrair as queries ou crie o seu próprio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.