Ir ao conteúdo
  • Cadastre-se

Validação formulário


Eder Cuer

Posts recomendados

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 =/

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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 =/

Link para o comentário
Compartilhar em outros sites

  • Moderador

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

Link para o comentário
Compartilhar em outros sites

  • Moderador

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)

Link para o comentário
Compartilhar em outros sites

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"';}?> />

Link para o comentário
Compartilhar em outros sites

  • Moderador

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.

Link para o comentário
Compartilhar em outros sites

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();



?>

Link para o comentário
Compartilhar em outros sites

  • Moderador

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

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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()

Link para o comentário
Compartilhar em outros sites

  • Moderador

é 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.

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!