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