manolegal 12 Denunciar post Postado Fevereiro 29, 2012 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
shini 318 Denunciar post Postado Fevereiro 29, 2012 seta os values no inputs. Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Fevereiro 29, 2012 Como faria isso? Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Fevereiro 29, 2012 <input type = "text" name="cep" value="<?php echo $cep; ?>" /> Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Fevereiro 29, 2012 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
shini 318 Denunciar post Postado Fevereiro 29, 2012 faz com ajax, da uma olhada nesse link aqui Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Fevereiro 29, 2012 Nao teria outro metodo sem usar ajax? Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Fevereiro 29, 2012 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. Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Março 1, 2012 Léo O código está quase todo no #1. Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Março 1, 2012 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
manolegal 12 Denunciar post Postado Março 1, 2012 Como eu poderia resolver este problema? Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Março 1, 2012 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
rfps888 7 Denunciar post Postado Março 1, 2012 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
manolegal 12 Denunciar post Postado Março 3, 2012 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
manolegal 12 Denunciar post Postado Março 4, 2012 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
ESerra 744 Denunciar post Postado Março 4, 2012 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
manolegal 12 Denunciar post Postado Março 4, 2012 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
ESerra 744 Denunciar post Postado Março 4, 2012 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
manolegal 12 Denunciar post Postado Março 4, 2012 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
ESerra 744 Denunciar post Postado Março 4, 2012 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