sexta-feira, 28 de junho de 2013

Script padrão para bancos de dados Mysql em linguagem PHP - X

A ação addsave

Depois de preenchido o formulário de inclusão na ação add, os conteúdos dos campos se transformam em entidades textuais adequadas para um tratamento que possibilite a sua gravação, ou seja, de uma disposição gráfica vamos transformar os conteúdos em disposição de registro de banco de dados.

Nesta ação, não precisamos fazer a checagem de permissão, pois esta já foi feita na ação add. Se alguém tentar construir a ação addsave passo a passo, em outra script, deturpando o seu sentido, vai ter muito trabalho, e praticamente terá que fazer outra script, passar por cima da segurança do banco, etc. Se você quiser implementar segurança adicional, já tem o exemplo da operação add, e fica a seu critério fazê-lo.

O código

 case "addsave":
   $operation = $operAddSave;
   $description = $descAddSave;
   require("libCabecalhoPadrao.php");
   $deli = "";
   $valor = NULL;
   $x = 0;
   $campos = "";
   $valores = "";
   // Loop no esquema da estrutura de dados
   for($x=1;$x<$NoCampos;$x++){
$valor = $_POST[$arr[$x][0]];
// Ajuste do tipo, valor, delimitador e tag do campo
$pl = new paramLine($arr,$x,$valor);
$sTipo = $pl->tipocampo;
$valor = $pl->valorfinal;
$deli  = $pl->delimitador;
if( $x == 1 ){
 $campos = $arr[$x][0];
 $valores = $deli . $valor . $deli;
 } else {
 if( $valor != "" && $valor != 0 ){
   $campos = $campos . "," . $arr[$x][0];
   $valores = $valores . "," . $deli . $valor . $deli;
   }
 }
}
   $strSQL = "INSERT INTO " . $tabela . "(";
   $strSQL = $strSQL . $campos . ") VALUES (" . $valores . ")";
   include 'Conexao_banco.php';
   mysqli_query($conn, $strSQL) or die("<br><span class=bdOK>Insert Operation 
Unsuccessfull.</span>");
   include 'Conexao_banco_close.php';
   echo $msgAdd;
   break;

Preparação Gráfica

case "addsave":
   $operation = $operAddSave;
   $description = $descAddSave;
   require("libCabecalhoPadrao.php");
   $deli = "";
   $valor = NULL;
   $x = 0;
   $campos = "";
   $valores = "";

A primeira linha direciona corretamente a ação da script conforme o parâmetro recebido e manipulado nesta estrutura switch. Em seguida são alimentados os parâmetros $operation e $description para chamada do código do require "libCabecalhoPadrao.php".

As demais variáveis preparam lugar para receber parâmetros essenciais para manipulação dos registros:


  • Delimitador: $deli
  • Valor: $valor
  • Contador: $x
  • Campos: $campos
  • Valores: $valores


Loop de leitura e interpretação do SCHEMA

   // Loop no esquema da estrutura de dados
   for($x=1;$x<$NoCampos;$x++){
$valor = $_POST[$arr[$x][0]];
// Ajuste do tipo, valor, delimitador e tag do campo
$pl = new paramLine($arr,$x,$valor);
$sTipo = $pl->tipocampo;
$valor = $pl->valorfinal;
$deli  = $pl->delimitador;
if( $x == 1 ){
 $campos = $arr[$x][0];
 $valores = $deli . $valor . $deli;
 } else {
 if( $valor != "" && $valor != 0 ){
   $campos = $campos . "," . $arr[$x][0];
   $valores = $valores . "," . $deli . $valor . $deli;
   }
 }
}

O indexador $x varia de 1 (o campo Id não precisa ser trabalhado no INSERT, pois assumirá um valor controlado pelas triggers internas de autonumeração do MySQL). Este indexador comanda a busca nas variáveis postadas ($_POST[$arr[$x][0]]) do valor que veio de cada campo do formulário. Em seguida é instanciado o objeto $pl através dos parâmetros $arr, $x e $valor. O parâmetro $arr é necessário para que se encontre as referências de tamanho, nome do campo, etc. O parâmetro $x informa em que índice está o loop. E o parâmetro $valor traz o conteúdo que foi preenchido no formulário (alimentado pela variável correta do POST).

A classe paramLine

Esta classe faz todas as checagens de características de cada campo com o fim de corrigir o delimitador (de acordo com o tipo do mesmo) e também corrigir o valor, pois este pode ser uma data, uma senha, um email,  etc.

Código da classe

Discutiremos esta classe no próximo post deste blog.

Retorno da classe

Quando a chamada à classe é feita, recebemos três parâmetros corrigidos:

$sTipo = $pl->tipocampo;
$valor = $pl->valorfinal;
$deli  = $pl->delimitador;

Estes novos parâmetros é que irão pautar as próximas manipulações.

Construção da sentença SQL

Existe uma diferença entre o primeiro parâmetro a ser colocado na sentença SQL, por causa da vírgula que sucede cada nome ou valor de cada um deles. Por isto é preciso fazer a estrutura condicional:

      // Primeiro campo
              if( $x == 1 ){
  $campos = $arr[$x][0];
  $valores = $deli . $valor . $deli;
  } else {
                  // Demais campos
                  // Verifica se o campo foi preenchido. Só se estiver é que vai compor o SQL,
                  // senão é desprezado
  if( $valor != "" && $valor != 0 ){
    $campos = $campos . "," . $arr[$x][0];
    $valores = $valores . "," . $deli . $valor . $deli;
    }
  }

Construção final da sentença SQL de INSERT

   $strSQL = "INSERT INTO " . $tabela . "(";
   $strSQL = $strSQL . $campos . ") VALUES (" . $valores . ")";

A variável $strSQL vai concatenar a sintaxe natural, os nomes dos campos e os conteúdos do INSERT com os delimitadores devidamente normalizados.

Execução da sentença SQL

   include 'Conexao_banco.php';
   mysqli_query($conn, $strSQL) or die("<br><span class=bdOK>Insert Operation
Unsuccessfull.</span>");
   include 'Conexao_banco_close.php';

Emissão da mensagem de Inclusão

   echo $msgAdd;

A mensagem contida em $msgAdd está no include ExemploDefinicao.inc.







Nenhum comentário:

Postar um comentário