Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
Como faria isso?
<input type = "text" name="cep" value="<?php echo $cep; ?>" />Implementei a sua dica, mas continua retornando o campo vazio após o submit, mesmo tendo preenchido o campo.
faz com ajax, da uma olhada nesse link aqui
Nao teria outro metodo sem usar ajax?
Sim, isso pode ser feito perfeitamente sem o uso de ajax.
Poste como está o seu código atualmente pra gente poder ver onde está o problema.
Léo
O código está quase todo no #1.
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".
Como eu poderia resolver este problema?
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.
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>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.
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;
}
}Faça a validação antes do lugar onde você deseja exibir a mensagem.
Tentei esta sugestão, mas ao submeter o formulário os campos html não aparecem.
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
}
?>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.
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.';
}
?>Nesta situação, por exemplo se eu não informar nada no campo "bairro" deveria aparecer a mensagem para informar o campo, e aparecer o campo para que eu pudesse inserir algum dado neste campo, mas está retornando a página em branco.
O problema é por exemplo se o campo não for preenchido, ele não está mostrando o formulário para que eu possa preencher o campo.
Exemplo funcional:
<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)){
echo $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 echo 'Formulário enviado';
}
?>
<P><BR><BR>
</P>
</BODY>
</HTML>ESerra
Problema resolvido. Valeu amigo. Obrigado. Um grande abraço.
seta os values no inputs.