php retornar pagina anterior sem perder dados

Enviada por Edmar Antonio Calaça 
Edmar Antonio Calaça
php retornar pagina anterior sem perder dados
15 de June de 2018 às 05:08PM
Camaradas, me ajudem!
Como posso retornar a uma página de formulário sem perder os dados já digitados e parar o cursor no campo que deu erro.
Trambulhao
Re: php retornar pagina anterior sem perder dados
17 de June de 2018 às 05:43AM
Posta aqui o formulário...
Edmar Antonio Calaça
Re: php retornar pagina anterior sem perder dados
17 de June de 2018 às 07:26PM
Página1.php
________________
<?php
require 'conexao.php';
function generateCodCliente($lastCodCliente)
{
$n = ltrim($lastCodCliente, 'C') + 1;
return 'C' . str_pad($n, 4, "0", STR_PAD_LEFT);
}

// Recebe o termo de pesquisa se existir
$termo = (isset($_GET['termo'])) ? $_GET['termo'] : '';

// Verifica se o termo de pesquisa está¡ vazio, se estiver executa uma consulta completa
if (empty($termo)):

$conexao = conexao::getInstance();
$sql = 'SELECT id, cod_cli, nome, sobrenome_cli, email, celular, status, foto FROM tab_clientes ORDER BY cod_cli ASC';
$stm = $conexao->prepare($sql);
$stm->execute();
$clientes = $stm->fetchAll(PDO::FETCH_OBJ);


else:

// Executa uma consulta baseada no termo de pesquisa passado como parâmetro
$conexao = conexao::getInstance();
$sql = 'SELECT id, cod_cli, nome, sobrenome_cli, email, celular, status, foto FROM tab_clientes WHERE nome LIKE :nome OR cod_cli LIKE :cod_cli ORDER BY cod_cli ASC';
$stm = $conexao->prepare($sql);
$stm->bindValue(':nome', $termo.'%');
$stm->bindValue(':cod_cli', $termo.'%');
$stm->execute();
$clientes = $stm->fetchAll(PDO::FETCH_OBJ);

endif;
foreach($clientes as $cliente);
$cod = generateCodCliente($cliente->cod_cli);

?>

<!DOCTYPE html>
<html lang=”pt-br”>
<head>
<meta charset="utf-8">
<title>Listagem de Clientes</title>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/custom.css">
</head>
<body>
<div class='container'>
<fieldset>

<!-- Cabeçalho da Listagem -->
<legend><h1>Cadastro de Clientes</h1></legend>

<!-- Formulário de Pesquisa -->
<table>
<form action="" method="get" id='form-contato' class="form-horizontal">
<td>
<td><label class="control-label" for="termo">Pesquisar</label></td>
<td width=500><input type="text" class="form-control" id="termo" name="termo" placeholder="Infome o Código ou Nome do Cliente"></td>
<td><button type="submit" class="btn btn-primary">Pesquisar</button</td>>
<td><a href='listclie.php' class="btn btn-primary">Ver Todos</a></td>
</form>

<!-- Link para página de cadastro -->
<td width=100></td>
<td><a href='cadclie.php?cod=<?=$cod;?>' class="btn btn-success">Cadastrar Cliente</a></td>
<td><a href='main.html' class="btn btn-success pull-right">Sair</a></td>
<div class='clearfix'></div>
</td>
</table>
<?php if(!empty($clientes)):?>

<!-- Tabela de Clientes -->
<table class="table table-striped">
<tr class='active'>
<th>Foto</th>
<th>Cod.</th>
<th>Nome</th>
<th>Sobrenome</th>
<th>E-mail</th>
<th>Celular</th>
<th>Status</th>
<th>Acao</th>
</tr>
<?php foreach($clientes as $cliente):?>
<tr>
<td><img src='fotos/<?=$cliente->foto?>' height='40' width='40'></td>
<td><?=$cliente->cod_cli?></td>
<td><?=$cliente->nome?></td>
<td><?=$cliente->sobrenome_cli?></td>
<td><?=$cliente->email?></td>
<td><?=$cliente->celular?></td>
<td><?=$cliente->status?></td>
<td>
<a href='editclie.php?id=<?=$cliente->id?>' class="btn btn-primary">Editar</a>
<a href='javascript:void(0)' class="btn btn-danger link_exclusao" rel="<?=$cliente->id?>">Excluir</a>
</td>
</tr>
<?php endforeach;?>
</table>

<?php else: ?>

<!-- Mensagem caso nãoo exista clientes ou nãoo encontrado -->
<h3 class="text-center text-primary">Não existem clientes cadastrados!</h3>
<?php endif; ?>
</fieldset>
</div>
<script type="text/javascript" src="js/custom.js"></script>
</body>
</html>


Página2.php
--------------------
<!DOCTYPE html>
<html lang=”pt-br”>
<head>
<meta charset="utf-8">
<title>Sistema de Cadastro</title>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/custom.css">
</head>
<body>
<div class='container box-mensagem-crud'>
<?php
require 'conexao.php';
include('valida-cpf.php');
// Atribui uma conexão PDO
$conexao = conexao::getInstance();

// Recebe os dados enviados pela submissão
$acao = (isset($_POST['acao'])) ? $_POST['acao'] : '';
$id = (isset($_POST['id'])) ? $_POST['id'] : '';
$tipo = (isset($_POST['tipo'])) ? $_POST['tipo'] : '';
$cod = (isset($_POST['codigo'])) ? $_POST['codigo'] : '';
$nome = (isset($_POST['nome'])) ? $_POST['nome'] : '';
$sobrenome = (isset($_POST['sobrenome'])) ? $_POST['sobrenome'] : '';
$data_nascimento = (isset($_POST['data_nascimento'])) ? $_POST['data_nascimento'] : '';
$endereco = (isset($_POST['endereco'])) ? $_POST['endereco'] : '';
$cidade = (isset($_POST['cidade'])) ? $_POST['cidade'] : '';
$estado = (isset($_POST['estado'])) ? $_POST['estado'] : '';
$cep = (isset($_POST['cep'])) ? $_POST['cep'] : '';
$email = (isset($_POST['email'])) ? $_POST['email'] : '';
$cpf = (isset($_POST['cpf'])) ? str_replace(array('.','-'), '', $_POST['cpf']): '';
$rg = (isset($_POST['rg'])) ? $_POST['rg'] : '';
$passaporte = (isset($_POST['passaporte'])) ? $_POST['passaporte'] : '';
$emissao = (isset($_POST['emissao'])) ? $_POST['emissao'] : '';
$vencimento = (isset($_POST['vencimento'])) ? $_POST['vencimento'] : '';
$foto_atual = (isset($_POST['foto_atual'])) ? $_POST['foto_atual'] : '';
$telefone = (isset($_POST['telefone'])) ? str_replace(array('-', ' '), '', $_POST['telefone']) : '';
$celular = (isset($_POST['celular'])) ? str_replace(array('-', ' '), '', $_POST['celular']) : '';
$status = (isset($_POST['status'])) ? $_POST['status'] : '';
$data_nascimento = implode("-",array_reverse(explode("/",$data_nascimento)));
$emissao = implode("-",array_reverse(explode("/",$emissao)));
$vencimento = implode("-",array_reverse(explode("/",$vencimento)));

// Valida os dados recebidos
$mensagem = '';
if ($acao == 'editar' && $id == ''):
$mensagem .= '<li>ID do registros desconhecido.</li>';
endif;

// Se for ação diferente de excluir valida os dados obrigatórios
if ($acao != 'excluir'):
if ($nome == '' || strlen($nome) < 3):
$mensagem .= '<li>Favor preencher o Nome.</li>';
endif;

if ( valida_cpf( $cpf ) === false) {
$mensagem .= '<li> O CPF é Inválido.';
}

if ($mensagem != ''):
$mensagem = '<ul>' . $mensagem . '</ul>';
echo "<div class='alert alert-danger' role='alert'>".$mensagem."</div> ";
exit;
endif;


//Aqui o retorno para a página1.php sem perder os dados cadastrados e focando o campo onde deu o erro.


if ($mensagem != ''):
$mensagem = '<ul>' . $mensagem . '</ul>';
echo "<script>alert('Por favor, digite um email válido.');";
echo "javascript:history.go(-1)'</script>";
exit;
endif;
endif;

// Verifica se foi solicitada a inclusão de dados
if ($acao == 'incluir'):

$nome_foto = 'padrao.jpg';
if(isset($_FILES['foto']) && $_FILES['foto']['size'] > 0):

$extensoes_aceitas = array('bmp' ,'png', 'svg', 'jpeg', 'jpg');
$extensao = strtolower(end(explode('.', $_FILES['foto']['name'])));

// Validamos se a extensão do arquivo é aceita
if (array_search($extensao, $extensoes_aceitas) === false):
echo "<h1>Extensão Inválida!</h1>";
exit;
endif;

// Verifica se o upload foi enviado via POST
if(is_uploaded_file($_FILES['foto']['tmp_name'])):

// Verifica se o diretório de destino existe, senão existir cria o diretório
if(!file_exists("fotos")):
mkdir("fotos");
endif;

// Monta o caminho de destino com o nome do arquivo
$nome_foto = date('dmY') . '_' . $_FILES['foto']['name'];

// Essa função move_uploaded_file() copia e verifica se o arquivo enviado foi copiado com sucesso para o destino
if (!move_uploaded_file($_FILES['foto']['tmp_name'], 'fotos/'.$nome_foto)):
echo "Houve um erro ao gravar arquivo na pasta de destino!";
endif;
endif;
endif;

$sql = 'INSERT INTO tab_clientes (tipo_cli, cod_cli, nome, sobrenome_cli, data_nascimento, endereco_cli, cidade_cli, estado_cli, cep_cli, email, telefone, celular, cpf, rg_cli, passaporte_cli, emis_pp_cli, val_pp_cli, status, foto)
VALUES(:tipo, :codigo, :nome, :sobrenome, :data_nascimento, :endereco, :cidade, :estado, :cep, :email, :telefone, :celular, :cpf, :rg, :passaporte, :emissao, :vencimento, :status, :foto)';

$stm = $conexao->prepare($sql);
$stm->bindValue(':tipo', $tipo);
$stm->bindValue(':codigo', $cod);
$stm->bindValue(':nome', $nome);
$stm->bindValue(':sobrenome', $sobrenome);
$stm->bindValue(':data_nascimento', $data_nascimento);
$stm->bindValue(':endereco', $endereco);
$stm->bindValue(':cidade', $cidade);
$stm->bindValue(':estado', $estado);
$stm->bindValue(':cep', $cep);
$stm->bindValue(':email', $email);
$stm->bindValue(':telefone', $telefone);
$stm->bindValue(':celular', $celular);
$stm->bindValue(':cpf', $cpf);
$stm->bindValue(':rg', $rg);
$stm->bindValue(':passaporte', $passaporte);
$stm->bindValue(':emissao', $emissao);
$stm->bindValue(':vencimento', $vencimento);
$stm->bindValue(':status', $status);
$stm->bindValue(':foto', $nome_foto);
$retorno = $stm->execute();
if ($retorno):
echo "<div class='alert alert-success' role='alert'>Registro inserido com sucesso, aguarde você está sendo redirecionado ...</div> ";
else:
echo "<div class='alert alert-danger' role='alert'>Erro ao inserir registro!</div> ";
endif;

echo "<meta http-equiv=refresh content='3;URL=listclie.php'>";
endif;


// Verifica se foi solicitada a edição de dados
if ($acao == 'editar'):
if(isset($_FILES['foto']) && $_FILES['foto']['size'] > 0):

// Verifica se a foto é diferente da padrão, se verdadeiro exclui a foto antiga da pasta
if ($foto_atual <> 'padrao.jpg'):
unlink("fotos/" . $foto_atual);
endif;

$extensoes_aceitas = array('bmp' ,'png', 'svg', 'jpeg', 'jpg');
$extensao = strtolower(end(explode('.', $_FILES['foto']['name'])));

// Validamos se a extensão do arquivo é aceita
if (array_search($extensao, $extensoes_aceitas) === false):
echo "<h1>Extensão Inválida!</h1>";
exit;
endif;

// Verifica se o upload foi enviado via POST
if(is_uploaded_file($_FILES['foto']['tmp_name'])):

// Verifica se o diretório de destino existe, senão existir cria o diretório
if(!file_exists("fotos")):
mkdir("fotos");
endif;

// Monta o caminho de destino com o nome do arquivo
$nome_foto = date('dmY') . '_' . $_FILES['foto']['name'];

// Essa função move_uploaded_file() copia e verifica se o arquivo enviado foi copiado com sucesso para o destino
if (!move_uploaded_file($_FILES['foto']['tmp_name'], 'fotos/'.$nome_foto)):
echo "Houve um erro ao gravar arquivo na pasta de destino!";
endif;
endif;
else:

$nome_foto = $foto_atual;

endif;

$sql = 'UPDATE tab_clientes SET tipo_cli=:tipo, nome=:nome, sobrenome_cli=:sobrenome, data_nascimento=:data_nascimento, endereco_cli=:endereco, cidade_cli=:cidade, estado_cli=:estado, cep_cli=:cep, email=:email, telefone=:telefone, celular=:celular, cpf=:cpf, rg_cli=:rg, passaporte_cli=:passaporte, emis_pp_cli=:emissao, val_pp_cli=:vencimento, status=:status, foto=:foto ';
$sql .= 'WHERE id = :id';

$stm = $conexao->prepare($sql);
$stm->bindValue(':tipo', $tipo);
$stm->bindValue(':nome', $nome);
$stm->bindValue(':sobrenome', $sobrenome);
$stm->bindValue(':data_nascimento', $data_nascimento);
$stm->bindValue(':endereco', $endereco);
$stm->bindValue(':cidade', $cidade);
$stm->bindValue(':estado', $estado);
$stm->bindValue(':cep', $cep);
$stm->bindValue(':email', $email);
$stm->bindValue(':telefone', $telefone);
$stm->bindValue(':celular', $celular);
$stm->bindValue(':cpf', $cpf);
$stm->bindValue(':rg', $rg);
$stm->bindValue(':passaporte', $passaporte);
$stm->bindValue(':emissao', $emissao);
$stm->bindValue(':vencimento', $vencimento);
$stm->bindValue(':status', $status);
$stm->bindValue(':foto', $nome_foto);
$stm->bindValue(':id', $id);
$retorno = $stm->execute();

if ($retorno):
echo "<div class='alert alert-success' role='alert'>Registro editado com sucesso, aguarde você está sendo redirecionado ...</div> ";
else:
echo "<div class='alert alert-danger' role='alert'>Erro ao editar registro!</div> ";
endif;

echo "<meta http-equiv=refresh content='3;URL=listclie.php'>";
endif;


// Verifica se foi solicitada a exclusão dos dados
if ($acao == 'excluir'):

// Captura o nome da foto para excluir da pasta
$sql = "SELECT foto FROM tab_clientes WHERE id = :id AND foto <> 'padrao.jpg'";
$stm = $conexao->prepare($sql);
$stm->bindValue(':id', $id);
$stm->execute();
$cliente = $stm->fetch(PDO::FETCH_OBJ);

if (!empty($cliente) && file_exists('fotos/'.$cliente->foto)):
unlink("fotos/" . $cliente->foto);
endif;

// Exclui o registro do banco de dados
$sql = 'DELETE FROM tab_clientes WHERE id = :id';
$stm = $conexao->prepare($sql);
$stm->bindValue(':id', $id);
$retorno = $stm->execute();

if ($retorno):
echo "<div class='alert alert-success' role='alert'>Registro excluído com sucesso, aguarde você está sendo redirecionado ...</div> ";
else:
echo "<div class='alert alert-danger' role='alert'>Erro ao excluir registro!</div> ";
endif;

echo "<meta http-equiv=refresh content='3;URL=listclie.php'>";
endif;
?>

</div>
</body>
</html>
Trambulhao
Re: php retornar pagina anterior sem perder dados
19 de June de 2018 às 11:00AM
Cara, essa coisa de retroceder página já não faz muito sentido. O negócio é verificar os dados do formulário antes do envio. Você só precisa usar input predefinidos como numder, email, date, time, url e/ou atributos como required, pattern, min, max.. https://www.w3schools.com/Html/html_form_input_types.asp

Ex. No caso de um campo do tipo número inteiro e que seja obrigatório:

<input type="number" name="id" min="1" max="99999" required>
ou
<input type="text" name="id" pattern="[1-9]{1,5}" required>

Depois no PHP é só usar o filter_input por questão de segurança, tipo:

$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT); // Retorna um número inteiro ou null

Pronto!

Aí é só validar..

$expreg = [
'date' => [
'options' => [
'regexp' => '/^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-[12][0-9]{3}$/'
]
]
];

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$data = filter_input(INPUT_POST, 'data', FILTER_VALIDATE_REGEXP, $expreg['date']);

$erros = [];

// inserir ou editar
if ($acao == 'add' or $acao == 'edit') {

if (!id) {
$erros[] = 'ID incorreto!';
}

if (!email) {
$erros[] = 'E-mail incorreto!';
}

if (!data) {
$erros[] = 'Data incorreta!';
}
}

// Não encontrou nenhum erro
if (empty($erros) {
// código
}
//erros encontrados
else {
echo 'ul';
foreach($erros as $erro) {
echo 'li' . $erro . '/li';
}
echo '/ul';
}


Outra coisa, atenção ao teu script apresenta alguns erros no html.
Trambulhao
Re: php retornar pagina anterior sem perder dados
19 de June de 2018 às 11:13AM
Ou usa XMLHTTPRequest (AJAX)
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.