Ir ao conteúdo

Validação formulário


Eder Cuer

Posts recomendados

Postado

Eae galera, estou tendo uma dor de cabeça com meu formulário, nçao acho que deva ser algo muito complexo, mas sinceramente eu não consegui resolver e nem achar os erros... vamos lá.

Estou tendo 2 problemas:

1º - O seguintes erros me perseguem:

Notice: Undefined index: sexo in cadastro.php on line 212

Notice: Undefined index: cod_cid in cadastro.php on line 217

Notice: Undefined index: politica in cadastro.php on line 226

Notice: Undefined index: term in cadastro.php on line 227

2º - Estou fazendo uma validação em javascript e php, na parte de javascript ta tudo ok, mas no php estou tentando não perder os dados na hora de enviar os dados, e queria deixar o radio button e os check selecionados, caso o usuário tenha selecionado antes de enviar o formulário.

Ai vai partes do código:



<?php

include("include/connect.php");

if($_SERVER['REQUEST_METHOD']=="POST"){
$nome = mysql_real_escape_string($_POST['nome']);
$rg = mysql_real_escape_string($_POST['rg']);
$cpf = mysql_real_escape_string($_POST['cpf']);
$sexo = mysql_real_escape_string($_POST['sexo']); // linha 212
$data_nasc = mysql_real_escape_string($_POST['data_nasc']);
$cep = mysql_real_escape_string($_POST['cep']);
$endereco = mysql_real_escape_string($_POST['endereco']);
$bairro = mysql_real_escape_string($_POST['bairro']);
$cid = mysql_real_escape_string($_POST['cod_cid']); // linha 217
$telefone = mysql_real_escape_string($_POST['telefone']);
$celular = mysql_real_escape_string($_POST['celular']);
$fax = mysql_real_escape_string($_POST['fax']);
$email = mysql_real_escape_string($_POST['email']);
$conf_email= mysql_real_escape_string($_POST['conf_email']);
$login = mysql_real_escape_string($_POST['login']);
$senha = md5(mysql_real_escape_string($_POST['senha']));
$conf_senha= md5(mysql_real_escape_string($_POST['conf_senha']));
$politica = mysql_real_escape_string($_POST['politica']); // linha 226
$term = mysql_real_escape_string($_POST['term']); // linha 227


if(empty($nome)){
$retorno = '<div align="center" id="falha">Preencha o nome!</div>';
}elseif(empty($rg)){
$retorno = '<div align="center" id="falha">Preencha o RG!</div>';
}elseif(empty($cpf)){
$retorno = '<div align="center" id="falha">Preencha o CPF!</div>';
}elseif(empty($sexo)){
$retorno = '<div align="center" id="falha">Preencha o sexo!</div>';
}elseif(empty($data_nasc)){
$retorno = '<div align="center" id="falha">Preencha o nascimento!</ div>';
}elseif(empty($cep)){
$retorno = '<div align="center" id="falha">Preencha o CEP!</div>';
}elseif(empty($endereco)){
$retorno = '<div align="center" id="falha">Preencha o Endereço!</div>';
}elseif(empty($bairro)){
$retorno = '<div align="center" id="falha">Preencha o Bairro!</div>';
}elseif(empty($estado)){
$retorno = '<div align="center" id="falha">Escolha o Estado!</div>';
}elseif(empty($cidade)){
$retorno = '<div align="center" id="falha">Escolha a Cidade!</div>';
}elseif(empty($telefone)){
$retorno = '<div align="center" id="falha">Preencha o Telefone!</div>';
}elseif(empty($email)){
$retorno = '<div align="center" id="falha">Preencha o Email!</div>';
}elseif(empty($conf_email)){
$retorno = '<div align="center" id="falha">Preencha a Confirmação de Email!</div>';
}elseif(empty($login)){
$retorno = '<div align="center" id="falha">Preencha o Login!</div>';
}elseif(empty($senha)){
$retorno = '<div align="center" id="falha">Preencha a Senha!</div>';
}elseif(empty($conf_senha)){
$retorno = '<div align="center" id="falha">Preencha a Confirmação de Senha!</div>';
}

echo $retorno;

if("$_POST[nome]" >= 1){
$nome = "$_POST[nome]";
}else{
$nome = '';
}if("$_POST[rg]" >= 1){
$rg = "$_POST[rg]";
}else{
$rg = '';
}if("$_POST[fax]" >= 1){
$fax = "$_POST[fax]";
}else{
$fax = '';
}if("$_POST[cpf]" >= 1){
$cpf = "$_POST[cpf]";
}else{
$cpf = '';
}if("$_POST[celular]" >= 1){
$celular = "$_POST[celular]";
}else{
$celular = '';
}if("$_POST[data_nasc]" >= 1){
$data_nasc = "$_POST[data_nasc]";
}else{
$data_nasc = '';
}if("$_POST[endereco]" >= 1){
$endereco = "$_POST[endereco]";
}else{
$endereco = '';
}if("$_POST[cep]" >= 1){
$cep = "$_POST[cep]";
}else{
$cep = '';
}if("$_POST[bairro]" >= 1){
$bairro = "$_POST[bairro]";
}else{
$bairro = '';
}
if("$_POST[estado]" >= 1){
$estado = "$_POST[estado]";
}else{
$estado = '';
}//if("$_POST[cidade]" >= '1'){
//$cidade = "$_POST[cidade]";
//}else{
//$cidade = '';
//}
if("$_POST[telefone]" >= 1){
$telefone = "$_POST[telefone]";
}else{
$telefone = '';
}if("$_POST[email]" >= 1){
$email = "$_POST[email]";
}else{
$email = '';
}if("$_POST[login]" >= 1){
$login = "$_POST[login]";
}else{
$login = '';
}

}


?>

Aqui é a parte HTML


<label>
Masculino
<input type="radio" name="sexo" id="masculino" value="masculino" />
Feminino
<input type="radio" name="sexo" id="feminino" value="feminino" />
</label>

<label>
<input type="checkbox" name="politica" id="politica" />
Politica de Privacidade
</label>

<label style="display:none;" for="politica"
class="error">Aceite a Política de Privacidade
</label>

<label>
<input type="checkbox" name="term" id="term" />Termos de Uso</label><label style="display:none;" for="term" class="error">Aceite os termos de uso
</label>

Eu não postei a parte da cidade porque eu estou fazendo o carregamento por ajax, quando o usuário escolhe um estado lista as cidades.

Desculpa ae se ta muito grande e se for uma coisa muito *****, mas empaquei aqui =/

  • Moderador
Postado

cara.. acho que você nao precisa usar o mysql_real_escape_string para valores vindo de checkbox.. e radiobutton... isso é mais usado pra escapar caracteres especiais em campos de texto

Postado

Eae Dif...

Então eu tinha achado que era isso também, mas não é...

E pior, cada hora da um erro em um lugar diferente, por exemplo:

se eu desativo o javascript e dou um echo $nome (sem aspas) aparece assim no input:

<br /><font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'><tr><th align='left' bgcolor='#f57900' colspan=

e da o erro:

Notice: Undefined variable: nome in cadastro.php on line 351

e se eu dou um echo '$nome' (aspas simples) aparece assim no input $nome

e não da nenhum erro no php

Postado

Eu consegui resolver o problema do radio button sexo, e dos checks politica e term com esse codigo:



$sexo = isset($_POST['sexo'])? $_POST['sexo'] : null;
$politica = isset($_POST['politica'])? $_POST['politica'] : null;
$term = isset($_POST['term'])? $_POST['term'] : null;

Mas os outros ainda persistem, e estou me perguntando se esses erros estão vindo desse novo wamp, porque ja fiz uma validação muito parecida com essa e sem esses erros com uma versão anterior a desse wamp =/

  • Moderador
Postado

eu so ainda nao entendi porque tens que comparar com null com esses ifs.

você verifica com isset para ver se ele tem algum conteudo, e ainda comprara com null

nao seria mais fácil você só verificar se o conteudo do checkbox é true ou false?

e sobre o radiobutton, nao sei.. mas eu acho nao tem necessidade de fazer aquela verificaçao porque ele sempre "terá" um valor.. geralmente sempre deixamos um padrão marcado..

fazendo assim: <input type="radio" name="sexo" id="masculino" value="masculino" checked />

enfim.. e outra coisa eu acho meio deselegante usar aquele monte de if else..

você poderia fazer isso com switch case

Postado

Eu peguei esse exemplo de um blog ai fui seguinte com ele, eu to quase desistindo de fazer uma validação com php...

Eu tinha um formulario aqui com uma validação muito parecida mas funcionava

  • Moderador
Postado

Mas é estão simples fazer uma validaçao com php

segue um exemplo simples e funcional:

formulario


<form action="recebeDados.php" method="post">

<label for="nome">Nome:</label>
<input type="text" name="nome"/>

<label for="email">Email:</label>
<input type="text" name="email"/>

<input type="radio" name="sexo" value="masculino" checked/>Masculino
<input type="radio" name="sexo" value="feminino"/>feminino


<input type="checkbox" name="term" id="term" />Termos de Uso
</form>

php


<?php
include 'conexao.php';

$nome = $_POST["nome"];
$email = $_POST["email"];
$sexo = $_POST["sexo"];
$termo = $POST["term"];


if ( empty($nome) OR empty($email)){

echo "<script>alert('Preencha todos os campos'); history.go(-1);</script>";
exit;
}

if(empty($termo)){
echo "<script>alert('voce precisa aceitar os termos'); history.go(-1);</script>";

}

?>


é basicamente isso.. se quiser pode suprir os erros que sao insignificantes com error_reporting(0)

Postado

O problema está surgindo porque não quero que na hora que der o submit vá para outra pagina, quero que fique na mesma pagina e ainda não perca o que o usuário ja tenha digitado.

Postado

Esse método de receber os dados ($_SERVER['REQUEST_METHOD']=="POST") do formulário na mesma página é o melhor jeito? To percebendo que assim que acesso a página ele já da os erros, mas pela lógica era pra dar os erros após eu enviar os dados via post, ou estou errado?

E ali no radio e nos checks estou tentando deixar preenchido to fazendo assim mas não funciona:


<input type="checkbox" name="politica" id="politica" <?php if ($_POST['politica'] >= 1){echo 'checked="checked"';}?> />

  • Moderador
Postado

ta errrado o jeito que você esta tentando deixar preenchido o radiobutton. só apenas insira o checked depois o value dela. assim você definirá um valor padrão naqual você colocar isso.

sobre aquele metodos... bem eu nao sei te dizer porque eu nunca usei assim, mas pelo q eu ja conhecço eu acho melhor usar ajax para fazer requisiçoes assincronas sem dar um refresh na pagina ou sair dela.

Postado

Entendi, então eu posso deixar padrão já o sexo, a politica de privacidade e os termos de uso, isso já me aliviaria desses erros...

Mas e se o cara estiver com o js desativado, não vai funcionar.

  • Moderador
Postado

isso nao tem nada a ver com o JS. pois você esta usando direto no HTML.

<input type="radio" name="sexo" id="sexo" value="masculino" checked/>

<input type="checkbox" name="term" id="term" checked/>

<input type="checkbox" name="politica" id="politica" checked/>

Postado

Nossa vida de programador não é fácil, os erros ficam invisiveis, olha o erro que aparece na hora de fazer o cadastro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.111-1,222.222.222-22,555555555555555555,(77)7777-7777,,,[email protected],masculin' at line 3


<?php

include("include/connect.php");

$nome = mysql_escape_string(trim($_POST['nome']));
$rg = mysql_escape_string(trim($_POST['rg']));
$cpf = mysql_escape_string(trim($_POST['cpf']));
$endereco = mysql_escape_string(trim($_POST['endereco']));
$telefone = mysql_escape_string(trim($_POST['telefone']));
$celular = mysql_escape_string(trim($_POST['celular']));
$fax = mysql_escape_string(trim($_POST['fax']));
$email = mysql_escape_string(trim($_POST['email']));
$sexo = mysql_escape_string(trim($_POST['sexo']));
$data_nasc = mysql_escape_string(trim($_POST['data_nasc']));
$bairro = mysql_escape_string(trim($_POST['bairro']));
$cep = mysql_escape_string(trim($_POST['cep']));
$login = mysql_escape_string(trim($_POST['login']));
$senha = md5(mysql_escape_string(trim($_POST['senha'])));
$cod_cid = mysql_escape_string(trim($_POST['cidade']));


$data_nova = implode(preg_match("~\/~", $data_nasc) == 0 ? "/" : "-", array_reverse(explode(preg_match("~\/~", $data_nasc) == 0 ? "-" : "/", $data_nasc)));

$sql = "INSERT INTO usuario
(nome, rg, cpf, endereco, telefone, celular, fax, email, sexo, data_nasc, bairro, cep, login, senha, cod_cid)
VALUES ($nome,$rg,$cpf,$endereco,$telefone,$celular,$fax,$email,$sexo,$data_nasc,$bairro,$cep,$login,$senha, $cod_cid);";

mysql_query($sql,$con);
echo mysql_error();



?>

  • Moderador
Postado

bem.. faltou as aspas simples dentro do seu insert. todas as variaceis que contenham dados do tipo string devem estar entre aspas: '$nome' , '$email' ... tudo que for do tipo int, no caso uma ID tem qser sem aspas mesmo

Postado

O erro ta no javascript, to usando um plugin que faz máscara para certos campos ¬¬

Agora a validação em php ta very hard...

Dif valeu pela paciencia hein.. hehe

Eu comprei aquele livro "PHP & Mysql - Use a cabeça", todo mundo elogia, você já chegou a ler?

  • Moderador
Postado

Agora a validação em php ta very hard...

validaçao em php eu acho a coisa mais fácil do mundo.. rsrs nunca me deu problemas mesmo usando ajax.

sobre o livro... nunca li então eu nao sei dizer se é bom.. o que sei é que ja ouvi falar mal do use a cabeça para o java

Postado

Verdade validação em php é fácil, mas do jeito que eu tava fazendo tava difícil, mas eu resolvi, fiz o seguinte:

Deixei meu formulario todo validado no js, e quando der submit envia pra outra página, e nessa outra página estou validando em php, então se o js for desativado ele valida na outra página =)

Vixi bom saber, eu tava querendo comprar o de Java também O.O

valeu ae Dif pela paciencia e pela ajuda.

  • Moderador
Postado

@Eder Cuer, nao há melhor coisa do que validar nos dois. é bem estranho dar pau assim.. você pode fazer a validaçao por js e depois por php... nao da pra confiar muito so na validaçao do js.. existem scripts que você pode injetar codigos e alterar.. pois o js age pelo lado do cliente... ja o php age pelo lado servidor. dai então só terias que ter o cuidado com ataques de sql injection que você pode resolver usando as funçoes addslashes() e htmlentities()

Postado

Pode cre Dif, por isso eu estava com essa preocupação, mas estou validando nos 2 sim, com mysql_escape_string e trim, a unica coisa que mudei foi que estou mandando pra outra pagina ao invés da mesma pagina =)

  • Moderador
Postado

é isso é uma das soluçoes mais fáceis que eu ja tinha te sugerido antes.. mas como você queria deixar na mesma pagina.. o mais certo seria usar o ajax. porque ai você faria uma requisiçao para uma outra pagina php... mas supostament você nao sai da pagina atual... isso acontece.. porque o ajax faz requisiçoes assincronas.. então nao há necessidade de dar um refresh na pagina ou sair dela para validar..

é interessante você dar uma pequisada em ajax com jquery, oferecido pelo livro de maurício samy silva chamado ajax com jquery - requisiçoes ajax com a simplicidade do jquery. oferecido pela editora novatec. ele possui uma pagina para esse livro para você ver os exemplos funcionando.

sao todos exemplos fáceis de entender.. mas sugiro que se você puder comprar esse livro.. nao vai se arrepender.. ele oferece muita coisa boa para você fazer suas paginas mais dinamicas e atrativas.

abraço e fica ai a dica.

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!