Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

manolegal

[Resolvido] Validar campos sem perder dados digitados

Recommended Posts

Olá amigos.

Estou com problemas para validar dados em PHP. Tenho os seguintes arquivos:

 

verifica.php

<?php
   //Inicia a sessão
if (!isset($_SESSION)) session_start();

   //Verifica se sessoes estao ativas
if (!isset($_SESSION["teste"]["id_usuario"]) AND (!isset($_SESSION["teste"]["login"]))) {

   //Caso nao estejam, destrói a sessão por segurança
session_start();
session_destroy();
unset($_SESSION["id_usuario"]);
unset($_SESSION["login"]);

   // Redireciona o visitante de volta pro login
header("Location:login.php");
exit;
}
?>

 

bairros_cadastro

require_once("verifica.php");

<table width="100%" border="0">
<form id="bairros_cadastro" name="bairros_cadastro" method="post" action="bairros_cadastrar.php" onsubmit="return validaCampo(); return false;">

<tr>
   <td width="46%"><div align="right"><font color="#333333" face="Courier New, Courier">Bairro:</font></div></td>
   <td width="54%"><INPUT TYPE=TEXT id="bairro" NAME="bairro" SIZE=40 MAXLENGTH=38 autocomplete="off" onfocus="mudacor(this,'yellow')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"><font color="#FF0000" size="2"> *</font></td>
</tr>

<tr>
   <td width="46%"><div align="right"><font color="#333333" face="Courier New, Courier">CEP:</font></div></td>
   <td width="54%"><INPUT TYPE=TEXT id="cep" NAME="cep" SIZE=40 MAXLENGTH=38 autocomplete="off" onfocus="mudacor(this,'yellow')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"><font color="#FF0000" size="2"> *</font></td>
</tr>

 

bairros_cadastrar

<?php
require_once("verifica.php");

$bairro = trim($_POST ["bairro"]);
$cep = $_POST ["cep"];
$erro=0;

if (empty($bairro)){
   $erro=1;
   echo "<center>Informe o Bairro!</center>";
   echo "<center><input type = 'button' value = 'Voltar' name = 'btnVoltar' Onclick = 'javascript:history.go(-1)'></center>";
   exit;
   }

if (empty($cep)){
   $erro=1;
   echo "<center>Informe o CEP!</center>";
   echo "<center><input type = 'button' value = 'Voltar' name = 'btnVoltar' Onclick = 'javascript:history.go(-1)'></center>";
   exit;
   }


if ($erro==0){
   $Sql = "INSERT INTO ...........  
}

?>

 

Ao submeter o formulario "bairros_cadastro", caso algum dado fique sem preenchimento, ao retornar ao formulario os dados já digitados são apagados. Como faço para que estes dados permaneçam após submeter o formulário?

Compartilhar este post


Link para o post
Compartilhar em outros sites
<input type = "text" name="cep" value="<?php echo $cep; ?>" />

Compartilhar este post


Link para o post
Compartilhar em outros sites

Implementei a sua dica, mas continua retornando o campo vazio após o submit, mesmo tendo preenchido o campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Analisando o seu código, provavelmente o erro está sendo causado por causa do javascript:history.go(-1) depois de exibir a mensagem de erro, dessa forma retorna para a página anterior perdendo o POST, por isso o formulário fica "zerado".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não precisa de dois arquivos separados, um para o formulário e outro apenas para inserir no banco de dados, você pode usar um único arquivo.

 

Fazendo isso você já resolve o problema, pois se você recebe o POST no mesmo arquivo em que exibe o formulário fica bem simples mostrar o formulário preenchido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente vejo duas alternativas nesta situação, ou coloca tudo no mesmo script ou então usa o global.

 

Com o gobal ficaria assim:

 

<?php
require_once("verifica.php");

$bairro = trim($_POST ["bairro"]);
$cep = $_POST ["cep"];

global $bairro, $cep;

$erro=0;

if (empty($bairro)){
   $erro=1;
   echo "<center>Informe o Bairro!</center>";
   echo "<center><input type = 'button' value = 'Voltar' name = 'btnVoltar' Onclick = 'javascript:history.go(-1)'></center>";
   exit;
   }

if (empty($cep)){
   $erro=1;
   echo "<center>Informe o CEP!</center>";
   echo "<center><input type = 'button' value = 'Voltar' name = 'btnVoltar' Onclick = 'javascript:history.go(-1)'></center>";
   exit;
   }


if ($erro==0){
   $Sql = "INSERT INTO ...........  
}

?>

 

require_once("verifica.php");
global $bairro, $cep;
<table width="100%" border="0">
<form id="bairros_cadastro" name="bairros_cadastro" method="post" action="bairros_cadastrar.php" onsubmit="return validaCampo(); return false;">

<tr>
   <td width="46%"><div align="right"><font color="#333333" face="Courier New, Courier">Bairro:</font></div></td>
   <td width="54%"><INPUT TYPE=TEXT value="<?php echo $bairro; ?>" id="bairro" NAME="bairro" SIZE=40 MAXLENGTH=38 autocomplete="off" onfocus="mudacor(this,'yellow')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"><font color="#FF0000" size="2"> *</font></td>
</tr>

<tr>
   <td width="46%"><div align="right"><font color="#333333" face="Courier New, Courier">CEP:</font></div></td>
   <td width="54%"><INPUT TYPE=TEXT" value="<?php echo $cep; ?>" id="cep" NAME="cep" SIZE=40 MAXLENGTH=38 autocomplete="off" onfocus="mudacor(this,'yellow')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"><font color="#FF0000" size="2"> *</font></td>
</tr>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguindo a orientação dos colegas, implementei os seguintes códigos:

 

bairros_cadastro

require_once("verifica.php");

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Cadastro de Bairros</title>

<script type="text/javascript">
function validaCampo() {
if(document.bairros_cadastro.bairro.value=="") {
alert("Informe o Bairro!");
       document.bairros_cadastro.bairro.focus()
return false;
}
else
return true;
}
</script>

<table width="100%" border="0">
<form id="bairros_cadastro" name="bairros_cadastro" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" onsubmit="return validaCampo(); return false;">

<tr>
   <td width="46%"><div align="right"><font color="#333333" face="Courier New, Courier">Bairro:</font></div></td>
   <td width="54%"><INPUT TYPE=TEXT id="bairro" NAME="bairro" SIZE=40 MAXLENGTH=38 value="<?php echo $_POST ["bairro"]; ?>" autocomplete="off" onfocus="mudacor(this,'yellow')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"><font color="#FF0000" size="2"> *</font></td>
</tr>


<tr>
   <td> </td>
   <td><INPUT TYPE=submit NAME="cadastrar" VALUE="Cadastrar" STYLE="width: 2.68cm; height: 0.85cm"></td>
</tr>

</form>
</table>


<?php

if ($_SERVER['REQUEST_METHOD'] == "POST"){

$bairro = trim($_POST ["bairro"]);

if (empty($bairro)){
   $erro=1;
   echo "<center>Informe o Bairro!</center>";
   exit;
   }

if ($erro==0){
   $Sql = "INSERT INTO ...........  
}
}

 

Desta forma, utilizo apenas 01 arquivo. Cheguei ao resultado esperado.

Antes de encerrar o tópico, gostaria de saber a opinião dos colegas, se realmente é a melhor forma de validação e/ou possíveis modificações para melhorar o código. Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As mensagens de erro emitidas após a validação em PHP estão sendo mostradas na parte inferior do formulário. Eu gostaria que estas mensagens aparecessem na parte superior do formulário, logo acima do primeiro campo. Criei uma <div> na parte superior do form, mas não estou conseguindo mostrar as mensagens.

 

<table width="100%" border="0">
<form id="bairros_cadastro" name="bairros_cadastro" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" onsubmit="return validaCampo(); return false;">

<tr>
<td colspan="2">
   <div id="msg" align="center"><font color="#FF0000"><b><?php echo $msg_erro;?></b><br/>
<?php if(!empty($msg_erro)){
echo $msg_erro; }   ?>
   </font></div>
</td>
</tr>

<tr>
   <td width="46%"><div align="right"><font color="#333333" face="Courier New, Courier">Bairro:</font></div></td>
   <td width="54%"><INPUT TYPE=TEXT id="bairro" NAME="bairro" SIZE=40 MAXLENGTH=38 value="<?php echo $_POST ["bairro"]; ?>" autocomplete="off" onfocus="mudacor(this,'yellow')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"><font color="#FF0000" size="2"> *</font></td>
</tr>


<?php

if ($_SERVER['REQUEST_METHOD'] == "POST"){

$bairro = trim($_POST ["bairro"]);

if (empty($bairro)){
   $erro=1;
   $msg_erro = "<center>Informe o Bairro!</center><br>";
   exit;
   }

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça a validação antes do lugar onde você deseja exibir a mensagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei esta sugestão, mas ao submeter o formulário os campos html não aparecem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia basicamente é esta...

<?php
if ($_SERVER['REQUEST_METHOD'] == "POST"){

$bairro = trim($_POST ["bairro"]);

if (empty($bairro)){
   $erro=1;
   $msg_erro = "<center>Informe o Bairro!</center><br>";
   }

}
}

if(count($_POST) <= '0' OR isset($msg_erro)){
?>
<table width="100%" border="0">
<form id="bairros_cadastro" name="bairros_cadastro" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" onsubmit="return validaCampo(); return false;">

<tr>
<td colspan="2">
   <div id="msg" align="center"><font color="#FF0000"><b><?php echo $msg_erro;?></b><br/>
<?php if(!empty($msg_erro)){
echo $msg_erro; }   ?>
   </font></div>
</td>
</tr>

<tr>
   <td width="46%"><div align="right"><font color="#333333" face="Courier New, Courier">Bairro:</font></div></td>
   <td width="54%"><INPUT TYPE=TEXT id="bairro" NAME="bairro" SIZE=40 MAXLENGTH=38 value="<?php echo $_POST ["bairro"]; ?>" autocomplete="off" onfocus="mudacor(this,'yellow')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"><font color="#FF0000" size="2"> *</font></td>
</tr>
<?php
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei da seguinte forma:

 

require_once("verifica.php");

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Cadastro de Bairros</title>

<script type="text/javascript">
function validaCampo() {
if(document.bairros_cadastro.bairro.value=="") {
       alert("Informe o Bairro!");
       document.bairros_cadastro.bairro.focus()
       return false;
       }
else
return true;
}
</script>


<?php
if ($_SERVER['REQUEST_METHOD'] == "POST"){

$bairro = trim($_POST ["bairro"]);

if (empty($bairro)){
   $erro=1;
   $msg_erro = "<center>Informe o Bairro!</center><br>";
   }

if ($erro==0){
   $Sql = "INSERT INTO bairros ...........  
}
}

if(count($_POST) <= '0' OR isset($msg_erro)){
?>

<table width="100%" border="0">
<form id="bairros_cadastro" name="bairros_cadastro" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" onsubmit="return validaCampo(); return false;">

<tr>
<td colspan="2"><div align="center">
<p><font color="#0084d1"><span style="background: transparent"><font face="Courier New, monospace">
               <font size=4><b>Cadastro de Bairros</b></font></font><font size=6></font></span></font></p>
</div></td>
</tr>

<tr>
   <td width="46%"><div align="right"><font color="#333333" face="Courier New, Courier">Bairro:</font></div></td>
   <td width="54%"><INPUT TYPE=TEXT id="bairro" NAME="bairro" SIZE=40 MAXLENGTH=38 value="<?php echo $_POST ["bairro"]; ?>" autocomplete="off" onfocus="mudacor(this,'yellow')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"><font color="#FF0000" size="2"> *</font></td>
</tr>

<tr>
   <td> </td>
   <td><INPUT TYPE=submit NAME="cadastrar" VALUE="Cadastrar" STYLE="width: 2.68cm; height: 0.85cm"></td>
</tr>

</form>
</table>

<?php
}
?>

<P><BR><BR>
</P>
</BODY>
</HTML>

 

Quando abro o formulário, aparecem todos os campos, o formulário completo. Ao submeter o formulário retorna a página em branco, sem nenhum dado ou campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não existir post ou existir a $msg_erro exibe o formulário:

 

if(count($_POST) <= '0' OR isset($msg_erro)){

 

Ou seja, quando você entrar na página existirá o formulário e a menos que alguma mensagem de erro seja lançada, o formulário não será mais exibido quando for feito o POST, nesste caso, se desejar exibir uma mensagem qualquer deve usar um else:

</form>
</table>

<?php
}else{
echo 'Formulário enviado.';
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.