Todos os registros da tabela do banco de dados podem ser alterados. Difícil é trazê-los transformando cada campo para exibição em uma forma editável, invertendo para gravação em certos casos (data e senha). E, posteriormente, é necessária uma nova transformação para gravação.
Código:
case "edit":
// Verifica permissão para a operação
if( $permiteEdit ){
$operation = $operEdit;
$description = $descEdit;
require("libCabecalhoPadrao.php");
include 'Conexao_banco.php';
// Obtém um registro
$result = mysqli_query($conn, "select * from " . $tabela . " WHERE Id = " . $_GET['Id'] );
if( $row = mysqli_fetch_array($result) ){
?>
<h2 class=tit>EDITAR</h2>
<h5 class=help>Altere os conteúdos. Os campos de senha precisam da checagem caso sejam
alterados.</h5>
<?php
openQuadro();
echo "<form method=post action=?action=editsave&Id=" . $_GET['Id'] . "&estilo=" .
$_GET['estilo'] . ">";
echo "<table border=0 cellspacing=0>";
// Loop no esquema da estrutura de dados
for($x=0;$x<$NoCampos;$x++){
$tipo = strtolower($arr[$x][4]);
$sTipo = "";
$inp = "<input";
echo "<tr>";
echo "<td><label>" . $arr[$x][1] . "</label></td>";
echo "<td>";
$valor = $row[$arr[$x][0]];
// Ajuste do tipo, valor, delimitador e tag do campo
$pl = new paramLineOut($arr,$x,$valor);
$inp = $pl->taginput;
$valor = $pl->valorfinal;
$sTipo = $pl->tipocampo;
$deli = $pl->delimitador;
echo $inp;
echo " name=" . $arr[$x][0] . " id=" . $arr[$x][0];
if ( strtolower($inp) == "<select" ) {
echo ">";
echo "<option value=" . $row[$arr[$x][0]] . ">" . $row[$arr[$x][0]];
echo $arr[$x][6];
} elseif ( strtolower($inp) == "<textarea" ) {
echo " cols=" . $arr[$x][2] . " rows=" . number_format($arr[$x][3]/$arr[$x][2],0,'.','')
. ">";
} elseif ( strtolower($inp) == "<input" ){
echo " type=" . $sTipo . " size=" . $arr[$x][2] ." maxlength=" . $arr[$x][3] . " value="
. $valor . ">";
}
if ( $sTipo == "password" ){
echo "Alterada <input type=checkbox name=ck" . $arr[$x][0] . " id=ck" . $arr[$x][0] . ">";
}
if ( $inp == "<textarea" ) {
echo $row[$arr[$x][0]] . "</textarea>";
}
if ( $inp == "<select" ) {
echo "</select>";
}
echo "</td><td>";
echo "<span class=msg>" . $arr[$x][7] . "</span>";
echo "</td>";
echo "</tr>";
}
echo "<tr><td colspan=3 align=center><input class=post type=submit value=\"" . $btnEdit .
"\"></td>";
echo "</table>";
echo "</form>";
closeQuadro();
}
include 'Conexao_banco_close.php';
} else {
echo $msgPermissao;
}
break;
Verificação de autorização
// Verifica permissão para a operação
if( $permiteEdit ){
.
.
.
} else {
echo $msgPermissao;
}
O código desta ação fica condicionado a uma verificação no parâmetro $permiteAdd, declarado no include ExemploDefinicao.inc. Se lá estiver declarado um valor "S" para este parâmetro, o restante da ação será permitido, senão será mostrada a mensagem $msgPermissao, também declarada no include de que falamos aqui.
Cabeçalho da ação
$operation = $operEdit;
$description = $descEdit;
require("libCabecalhoPadrao.php");
Da mesma forma que na ação add, estas linhas de código desenham o cabeçalho da tela de operação de edição (edit).
As variáveis $operation e $description são parâmetros do HTML contido no include libCabecalhoPadrao.php, cujo código repetiremos aqui:
<div class=h2><div class="btn b1"><?= $titulo ?> - <?= $operation ?></div></div>
<div class=h3><div class="btn b2"><?= $description ?> [<?= $_SERVER['REMOTE_ADDR'] .'-' . $_SERVER['SERVER_ADDR'] ?>]
<a class="btn" style="margin-left:50px;" href="?estilo=<?= $_GET['estilo'] ?>"><span class="btn a">TELA INICIAL</span></a>
</div>
</div>
O cabeçalho é feito à base de DIVs, pois são os containers mais flexíveis do HTML.Leitura do registro a ser alterado
A URL (endereço http) formatado quando se clica na operação de edição contém, em um de seus parâmetros, o identificador (id) do registro.. Este precisa ser lido, porque, diferentemente da ação add, os campos do formulário deverão receber os conteúdos atuais do registro a ser editado. Para tal, é preciso providenciar a leitura do registro na tabela do banco de dados.
include 'Conexao_banco.php';
// Obtém um registro
$result = mysqli_query($conn, "select * from " . $tabela . " WHERE Id = " . $_GET['Id'] );
É feita a conexão ao banco de dados utilizando códigos contidos no include "Conexao_banco.php". Em seguida é disparada uma query Select sobre a tabela em questão, procurando o registro cujo Identificador (Id) é o parâmetro Id contido na URL de chamada.
Quadro do formulário de Edição
if( $row = mysqli_fetch_array($result) ){
?>
<h2 class=tit>EDITAR</h2>
<h5 class=help>Altere os conteúdos. Os campos de senha precisam da checagem caso sejam alterados.</h5>
<?php
openQuadro();
O recordset ($result) com o registro (esperamos que seja só um, pois cada registro tem um id diferente do outro) é testado. Se realmente a operação devolver algum registro, a script iniciará o desenho (renderização tecnicamente falando) de um cabeçalho secundário para o formulário de edição.
Este é feito com as tags Header normais. Em seguida é chamada a rotina openQuadro, já descrita anteriormente.
Código Formulário de edição
echo "<form method=post action=?action=editsave&Id=" . $_GET['Id'] . "&estilo=" . $_GET['estilo'] . ">";
echo "<table border=0 cellspacing=0>";
// Loop no esquema da estrutura de dados
for($x=0;$x<$NoCampos;$x++){
$tipo = strtolower($arr[$x][4]);
$sTipo = "";
$inp = "<input";
echo "<tr>";
echo "<td><label>" . $arr[$x][1] . "</label></td>";
echo "<td>";
$valor = $row[$arr[$x][0]];
// Ajuste do tipo, valor, delimitador e tag do campo
$pl = new paramLineOut($arr,$x,$valor);
$inp = $pl->taginput;
$valor = $pl->valorfinal;
$sTipo = $pl->tipocampo;
$deli = $pl->delimitador;
echo $inp;
echo " name=" . $arr[$x][0] . " id=" . $arr[$x][0];
if ( strtolower($inp) == "<select" ) {
echo ">";
echo "<option value=" . $row[$arr[$x][0]] . ">" . $row[$arr[$x][0]];
echo $arr[$x][6];
} elseif ( strtolower($inp) == "<textarea" ) {
echo " cols=" . $arr[$x][2] . " rows=" . number_format($arr[$x][3]/$arr[$x][2],0,'.','')
. ">";
} elseif ( strtolower($inp) == "<input" ){
echo " type=" . $sTipo . " size=" . $arr[$x][2] ." maxlength=" . $arr[$x][3] . " value=" . $valor . ">";
}
if ( $sTipo == "password" ){
echo "Alterada <input type=checkbox name=ck" . $arr[$x][0] . " id=ck" . $arr[$x][0] . ">";
}
if ( $inp == "<textarea" ) {
echo $row[$arr[$x][0]] . "</textarea>";
}
if ( $inp == "<select" ) {
echo "</select>";
}
echo "</td><td>";
echo "<span class=msg>" . $arr[$x][7] . "</span>";
echo "</td>";
echo "</tr>";
}
echo "<tr><td colspan=3 align=center><input class=post type=submit value=\"" . $btnEdit .
"\"></td>";
echo "</table>";
echo "</form>";
closeQuadro();
}
Início do formulário
echo "<form method=post action=?action=editsave&Id=" . $_GET['Id'] . "&estilo=" .
$_GET['estilo'] . ">";
echo "<table border=0 cellspacing=0>";
A ação deste formulário direciona a script para a ação editsave, que vai gravar as alterações feitas no registro. E repare que o parâmetro Id tem que ser repassado para esta ação também, pois a identidade do registro não pode ser perdida.
Loop dos campos
// Loop no esquema da estrutura de dados
for($x=0;$x<$NoCampos;$x++){
$tipo = strtolower($arr[$x][4]);
$sTipo = "";
$inp = "<input";
echo "<tr>";
echo "<td><label>" . $arr[$x][1] . "</label></td>";
echo "<td>";
A leitura dos campos (SCHEMA) da tabela é feita de forma parecida com a que foi feita para a ação add. Estabelecemos um loop de 0 até o número de campos ($NoCampos) disponíveis.
Até aqui, é construído o Label do campo para exibição.
Ajustes do campo
Por razões parecidas com as da ação de inclusão, o campo precisa ter seu valor ajustado, e o delimitador regularizado, bem como o tipo de campo registrado. Isto é feito através da classe paramLineOut.
$valor = $row[$arr[$x][0]];
// Ajuste do tipo, valor, delimitador e tag do campo
$pl = new paramLineOut($arr,$x,$valor);
$inp = $pl->taginput;
$valor = $pl->valorfinal;
$sTipo = $pl->tipocampo;
$deli = $pl->delimitador;
Construção do campo de entrada
echo $inp;
echo " name=" . $arr[$x][0] . " id=" . $arr[$x][0];
if ( strtolower($inp) == "<select" ) {
echo ">";
echo "<option value=" . $row[$arr[$x][0]] . ">" . $row[$arr[$x][0]];
echo $arr[$x][6];
} elseif ( strtolower($inp) == "<textarea" ) {
echo " cols=" . $arr[$x][2] . " rows=" . number_format($arr[$x][3]/$arr[$x][2],0,'.','') . ">";
} elseif ( strtolower($inp) == "<input" ){
echo " type=" . $sTipo . " size=" . $arr[$x][2] ." maxlength=" . $arr[$x][3] . " value=" . $valor . ">";
}
if ( $sTipo == "password" ){
echo "Alterada <input type=checkbox name=ck" . $arr[$x][0] . " id=ck" . $arr[$x][0] . ">";
}
if ( $inp == "<textarea" ) {
echo $row[$arr[$x][0]] . "</textarea>";
}
if ( $inp == "<select" ) {
echo "</select>";
}
echo "</td><td>";
A classe paramLineOut devolveu, pelo seu parâmetro de saída taginput, a tag de HTML correta a ser usada.
Término da exibição do campo
echo "<span class=msg>" . $arr[$x][7] . "</span>";
echo "</td>";
echo "</tr>";
// Fechamento do loop
}
A última informação colocada para cada campo é o sétimo atributo, que contém alguma mensagem de auxílio no preenchimento do campo.
Botão submit
echo "<tr><td colspan=3 align=center><input class=post type=submit value=\"" . $btnEdit . "\"></td>";
Fechamento do formulário, do painel que o contém e do loop de campos
echo "</table>";
echo "</form>";
closeQuadro();
}
Conclusão da ação
include 'Conexao_banco_close.php';
} else {
echo $msgPermissao;
}
break;
Fecha-se a conexão com o banco. Se não houver permissão para esta ação na template ExemploDefinicao.inc, é emitida uma mensagem de impossibilidade da ação ser completada.
Nenhum comentário:
Postar um comentário