Ir para conteúdo

POWERED BY:

Arquivado

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

rogerss_7

validação campo form (bd), _post, _get.

Recommended Posts

Gente, fiz este código (formulário inserção banco de dados) de iniciante, mas tenho algumas dúvidas referentes ao mesmo.

Como vocês vêem, ele conecta ao bd, mostra o form e insere no banco, tudo na mesma página.

A inserção do dado no banco está funcionando tudo ok.

 

register_globals = off (com on funciona tudo tranquilo)

 

1ª duv. - Quando abro esta página ele já mostra o campo e o botão do form com a mensagem "O campo nome está vazio.

Clique aqui para preenchê-lo.", ou seja, já valida o campo sem ao menos eu apertar no botão enviar.

Não é assim que quero e sim que abra a página limpa (quero alternar conforme $acao=coisa). Como fazer?

 

2ª duv. - Supondo que tenhamos enviado o form, aparecerá uma página dizendo que foi enviado com sucesso, pedindo pra clicar e voltar ao form, beleza, se dermos refresh ele inserirá novamente o mesmo dado no bd, como corrigir isto?

 

Agradeço desde já.

 

 

<?php	$servidor = "localhost";	$usuario = "root";	$senha = "";	$banco = "teste";	$conecta = mysql_connect($servidor, $usuario, $senha) or die ("Erro ao conectar no servidor.");	mysql_select_db($banco, $conecta) or die ("Erro ao selecionar banco de dados.");?><?php	if($acao == $_POST['cad']) { ?>		<form action="<?php echo $_SERVER["PHP_SELF"]; ?>?acao=grav" method="post">			<input type="text" name="nome" />			<input type="submit" value="enviar" />		</form>   <?php	$nome = $_POST['nome'];	}	?><?php	if($acao == $_POST['grav']) {		if(!isset($nome)) {		print ("O campo nome está vazio.<br />Clique <a href=\"{$_SERVER['PHP_SELF']}?acao=cad\">aqui</a> para preenchê-lo.");		}		else {		$inclui = "INSERT INTO tab_teste (id, nome, sobrenome) VALUES ('','$nome','')";		mysql_query($inclui) or die ("Erro ao gravar informações.");		print ("Gravado com sucesso.<br>Clique <a href=\"{$_SERVER['PHP_SELF']}?acao=cad\">aqui</a> para realizar um novo cadastro.");		}	}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Repare o seguinteif($acao == $_POST['cad']) { ?>Pelo jeito esta vindo um outro form antes certo?? com ação CADpelo jeito, parece ser por isso que está já dizendo que já está valindando seu form.Sobre o Refresh... ou você já direciona o usuário para algum lugar após o cadastro..ou seja, deixa a tela por dois segundos e mande para outra..Ou procure alguma coisa no forum de JavaScript.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim estou validando antes do tempo, mas não consigo fazer de outro jeito, como disse quero a página limpa, quando eu colocar, por exemplo, index.php?acao=cad, aí sim deverá aparecer o form, caso contrário, não. vlw desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Roger, se a ação você quer controlar com index.php?acao=cad, deve então usar o array global GET, não o POST.

Na condição, tente assim:

 

if ($_GET['acao'] == 'cad') {	//... exibe o form

Se sua intenção é pegar a variável ação, não importando o método, pode ainda usar o array $_REQUEST.

Qualquer coisa, posta aí ;)

 

[]s

Anderson Mello

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, Roger, o problema estava com o uso da diretiva register_globals. Dê uma lida neste link da documentação oficial pra você entender.

 

Seu código precisará de algumas mudanças, pois as variáveis, como a $nome, não existe. Você precisa declará-la antes de verificar se ela existe.

Tente o seguinte:

 

$nome = $_POST['nome'];if (empty($nome)) {	print ("O campo nome está vazio.<br />Clique <a href=\"{$_SERVER['PHP_SELF']}?acao=cad\">aqui</a> para preenchê-lo.");}

Veja que a variável $nome agora existe, pois foi enviada anteriormente pelo formulário (método POST) e agora foi inicializada.

Para verificar se ela está vazia e exibir a mensagem de erro, foi usada a função empty().

 

Faz um teste aí ;)

 

[]s

Anderson Mello

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara é a coisa mais engraça que já vi, fiz isso milhares de vezes, troquei varias vezes o _POST por _GET empty por isset essas coisas.... nunca deu certo mas quando tu falou, testei e deu certo, vou postar o código abaixo pra tu ver como ficou.

 

<?php	$servidor = "localhost";	$usuario = "root";	$senha = "";	$banco = "teste";	$conecta = mysql_connect($servidor, $usuario, $senha) or die ("Erro ao conectar no servidor.");	mysql_select_db($banco, $conecta) or die ("Erro ao selecionar banco de dados.");?><?php	if ($_GET['acao'] == 'cad') {			 /* <?php $_SERVER['PHP_SELF']."?acao=grav" ?> */	?>		<form name="form1" action="<?php echo $_SERVER["PHP_SELF"]; ?>?acao=grav" method="post">			<input type="text" name="nome" />			<input type="submit" value="enviar" />		</form>   <?php } ?>   <?php	if($_GET['acao'] == 'grav') {		$nome = $_POST['nome'];		if(empty($nome)) {		print ("O campo nome está vazio.<br />Clique <a href=\"{$_SERVER['PHP_SELF']}?acao=cad\">aqui</a> para preenchê-lo.");		}		else {		$inclui = "INSERT INTO tab_teste (id, nome, sobrenome) VALUES ('','$nome','')";		mysql_query($inclui) or die ("Erro ao gravar informações.");		print ("Gravado com sucesso.<br>Clique <a href=\"{$_SERVER['PHP_SELF']}?acao=cad\">aqui</a> para realizar um novo cadastro.");		}	}?>

o que tu achou? outra coisa, referente ao Refresh da página (depois de postado o valo no campo), tu sabe como corrigir isto?

 

Cara esqueci de perguntar uma outra coisa qual é a diferença entre:

 

<?php $_SERVER['PHP_SELF']."?acao=grav" ?>e<?php echo $_SERVER["PHP_SELF"]; ?>?acao=grav?

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Roger, para facilitar a manutenção, algumas coisas podem ser mudadas. Há várias tags de demarcação do PHP (<?php e ?>) que estão sobrando ali.

Feche a tag somente quando for alterar para HTML ;)

Recomendo você a dar uma lida neste artigo, que pode lhe auxiliar em algumas práticas.

 

Sobre a dúvida com as duas linhas com $_SERVER, a segunda exibe o "/nome_do_script.php?acao=grav". Já a primeira, não deve fazer nada http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Você deve ter confundido com as short tags, não? Se fizer assim, ela imprime:

 

<?= $_SERVER['PHP_SELF']."?acao=grav"; ?>

Porém, a diretiva short_open_tag deve estar habilitada ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw Anderson pela sua ajuda, vou ler a página que tu me recomendou, mas inicialmente gostaria de saber se fiz, basicamente, tudo como se deve fazer? Este seria um dos modos corretos de se programar? Abraços.

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.