rogerss_7 0 Denunciar post Postado Julho 23, 2007 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
Leandromx 0 Denunciar post Postado Julho 23, 2007 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
rogerss_7 0 Denunciar post Postado Julho 23, 2007 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
rogerss_7 0 Denunciar post Postado Julho 23, 2007 alguém por gentileza, sei que são coisas básicas, mas estou não consigo encontrar a resposta. Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Mello 3 Denunciar post Postado Julho 23, 2007 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
rogerss_7 0 Denunciar post Postado Julho 23, 2007 Anderson, até aí está tudo perfeito, mas agora na validação e no envio para o bd não estão dando certo. Pode me dar uma força? Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Mello 3 Denunciar post Postado Julho 23, 2007 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
rogerss_7 0 Denunciar post Postado Julho 23, 2007 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
Anderson Mello 3 Denunciar post Postado Julho 24, 2007 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
rogerss_7 0 Denunciar post Postado Julho 24, 2007 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