Ir para conteúdo
Fórum Script Brasil
  • 0

Gerador de forms CRUD em um único arquivo


sergiodesa

Pergunta

Olá a todos, 

Apesar do cadastro recente gostaria de contribuir com esta comunidade, pois sempre que tenho dúvidas, percorro estes fóruns e, graças a vocês, até agora consegui solucionar todas elas.

Pesquisei aqui se existia algo parecido e o único tópico que se refere a CRUD não tem o código fonte e o link esta quebrado.

Este fim de semana tive que gerar várias páginas para inserção, edição, exclusão e consulta de dados de várias tabelas, então resolvi criar um gerador CRUD para facilitar minha vida e gostaria de compartilhar com vocês, não tenho muita experiência com identação e boas práticas de programação, qualquer critica para melhorar minha maneira de desenvolver e/ou sugestões para o script são bem vindas.

 

gerador_crud.php

<?php
/**
 * Gerador CRUD (Create, Read, Update & Delete)
 * 
 * Gera as 4 funções básicas de operações de dados em um único arquivo.
 * Serve para aumentar a produtividade na geração de formulários.
 * 
 * Possui verificação de campos tipo Auto_increment para prevenir erros.
 * Tratamento para remover o prefixo das tabelas na exibição das labels
 * dos formulários Ex. produtos_codigo fica Codigo.
 * O CRUD gerado já utiliza a classe PDO 
 *
 * Modo de usar:
 * Preencha as variáveis no inicio do arquivo e execute-o.
 * Serão exibidos dois scripts em formato de texto, copie e crie
 * os arquivos de conexão com o DB e o CRUD respectivamente.
 * Após gerados os scripts a parte estrutural estará pronta para você
 * começar a estilizar sua página.
 *
 *
 * @author     SERGIO PEREIRA <sergiodesa@yahoo.com>
 */
 
//Dados para conexão com o seu servidor.
$server  = "localhost";
$banco   = "XYZ";
$user    = "root";
$senha   = "";
//Parametros para gerar o seu CRUD.
$tabela  = ""; //Nome da tabela para gerar o CRUD.
$prefixo = "_"; //Opcional, mas se os campos de sua tabela tiverem "_" remova-o.
$ident   = "clientes_id"; //Campo identificador para manipular dados do registro.
$caminho = "conexao.php"; //Url + nome do arquivo de conexao a ser criado para o CRUD.

$conn = mysqli_connect($server, $user, $senha, $banco);

//Usamos <pre> para que as variaveis não sejam interpretadas no output.
echo '<pre>';

echo htmlspecialchars($caminho . '
<?php 
$con = new PDO("mysql:host=localhost;dbname=erp", "root", "",array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES \'utf8\'"));
?>    


' . $tabela . '.php
<?php
include "' . $caminho . '";
if(isset($_GET["id"])){
    $id = (int) $_GET["id"];
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CRUD '.$tabela.'</title>
</head>
<?php 
if((!isset($_GET["novo"]))&&(!isset($_GET["altera"]))&&(!isset($_GET["apaga"]))){
?>
  <table border="1">
    <tr>');

$campos = consulta($conn);
foreach ($campos as $item) {
    echo htmlspecialchars('
      <td><b>' . ucfirst(after('_', $item["COLUMN_NAME"])) . '</b></td>');
}
echo htmlspecialchars('
    </tr> 
    <?php
    $rs = $con->prepare("SELECT * FROM ' . $tabela . '");
    if($rs->execute()){
      if($rs->rowCount() > 0){
        while($row = $rs->fetch(PDO::FETCH_ASSOC)){ 
          ?>
          <tr>');


$campos = consulta($conn);
foreach ($campos as $item) {
    
    echo htmlspecialchars('
            <td valign="top"><?php echo $row["' . $item["COLUMN_NAME"] . '"];?></td>');
    
}
echo htmlspecialchars('
            <td valign="top"><a href="' . $tabela . '.php?id=<?php echo $row["' . $ident . '"];?>&altera">Edita</a></td>
            <td><a href="' . $tabela . '.php?id=<?php echo $row["' . $ident . '"];?>&apaga">Apaga</a></td> 
          </tr>
          <?php              
        } 
        ?>
        <?php 
      }
    }
    ?>
  </table> 
  <a href="' . $tabela . '.php?novo">Novo</a> 
  <?php 
}

if(isset($_GET["novo"])){
    if (isset($_POST["submitted"])) {
        foreach($_POST AS $key => $value) { $_POST[$key] = mysql_real_escape_string($value); }
        $rs = $con->prepare("INSERT INTO ' . $tabela . ' (');
$campos = consulta($conn);
$i      = 0;
$len    = count($campos);
foreach ($campos as $item) {
    echo htmlspecialchars($item["COLUMN_NAME"]);
    if ($i == $len - 1) {
        echo htmlspecialchars('');
    } else {
        echo htmlspecialchars(', ');
    }
    $i++;
}

echo htmlspecialchars(') VALUES(');
$campos = consulta($conn);
$i      = 0;
$len    = count($campos);
foreach ($campos as $item) {
    echo htmlspecialchars(':' . $item["COLUMN_NAME"]);
    if ($i == $len - 1) {
        echo htmlspecialchars('');
    } else {
        echo htmlspecialchars(', ');
    }
    $i++;
}
echo htmlspecialchars(')");');
$campos = consulta($conn);
foreach ($campos as $item) {
    echo htmlspecialchars('  
        $rs->bindParam(":' . $item["COLUMN_NAME"] . '", $_POST["' . $item["COLUMN_NAME"] . '"], PDO::PARAM_STR);');
}
echo htmlspecialchars('      
        $rs->execute();
        echo \'<script>location.href="' . $tabela . '.php";</script>\';
    }
    ?>    
    <form action="" method="POST">');
$campos = consulta($conn);
foreach ($campos as $item) {
    echo htmlspecialchars('
        <p><b>' . ucfirst(after('_', $item["COLUMN_NAME"])) . ':</b><br /><input type="text" name="' . $item["COLUMN_NAME"] . '"/>');
}
echo htmlspecialchars('
        <p><input type="submit" value="Incluir" /><input type="hidden" value="1" name="submitted" /> 
    </form> 
    <?php          
}
?>
<?php 
if(isset($_GET["altera"])){
    if (isset($_POST["submitted"])) {
        foreach($_POST AS $key => $value) { $_POST[$key] = mysql_real_escape_string($value); }
        $rs = $con->prepare("UPDATE ' . $tabela . ' SET ');
$campos = consulta($conn);
$i      = 0;
$len    = count($campos);
foreach ($campos as $item) {
    echo htmlspecialchars($item["COLUMN_NAME"] . '=:' . $item["COLUMN_NAME"]);
    if ($i == $len - 1) {
        echo htmlspecialchars('');
    } else {
        echo htmlspecialchars(', ');
    }
    $i++;
}
echo htmlspecialchars(' WHERE ' . $ident . ' = $id");');
$campos = consulta($conn);
foreach ($campos as $item) {
    echo htmlspecialchars('
        $rs->bindParam(":' . $item["COLUMN_NAME"] . '", $_POST["' . $item["COLUMN_NAME"] . '"], PDO::PARAM_STR);');
}
echo htmlspecialchars('
        $rs->execute();
        echo \'<script>location.href="' . $tabela . '.php";</script>\';
    }
    ?>
    <form action="" method="POST"> 
    <?php 
    $rs = $con->prepare("SELECT * FROM ' . $tabela . ' WHERE ' . $ident . ' = $id");
    if($rs->execute()){
        if($rs->rowCount() > 0){
            while($row = $rs->fetch(PDO::FETCH_ASSOC)){    
            ?>');
$campos = consulta($conn);
foreach ($campos as $item) {
    echo htmlspecialchars('
                <p><b>' . ucfirst(after('_', $item["COLUMN_NAME"])) . ':</b><br /><input type="text" name="' . $item["COLUMN_NAME"] . '" value="<?= stripslashes($row["' . $item["COLUMN_NAME"] . '"]) ?>" />');
}
echo htmlspecialchars('
                <p><input type="submit" value="Alterar" /><input type="hidden" value="1" name="submitted" /> 
                <?php
            } 
        }
    }
    ?>
    </form> 
<?php 
}
if(isset($_GET["apaga"])){
    $id = (int) $_GET["id"];
    $rs = $con->prepare("DELETE FROM ' . $tabela . ' WHERE ' . $ident . ' = :id");
    $rs->bindParam(":id", $id, PDO::PARAM_INT);
    $rs->execute();
    echo \'<script>location.href="' . $tabela . '.php";</script>\';
}
?>
</body>
</html>
');
echo '</pre>';

function after($this, $inthat)
{
    if (!is_bool(strpos($inthat, $this))) {
        return substr($inthat, strpos($inthat, $this) + strlen($this));
    } else {
        return $inthat;
    }
}

function consulta($conn)
{
    global $banco;
    global $tabela;
    $cons = mysqli_query($conn, "SELECT COLUMN_NAME, EXTRA FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '$banco' AND TABLE_NAME = '$tabela';") or die(mysqli_error());
    $result = array();
    while ($row = mysqli_fetch_assoc($cons)) {
        if ($row["EXTRA"] != "auto_increment") {
            $campos[] = $row;
        }
    }
    return $campos;
}
?>
Editado por sergiodesa
trocar e-mail no código
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...