Ir para conteúdo
Fórum Script Brasil
  • 0

Como Não Perder Dados Em Formulário?


M4rc0

Pergunta

Dae galera..

Seguinte, tenho o formulário com os campos, certo?

Suponhamos que seja o cadastra.php

Acontece que, caso dê um erro ele vai chamar o erro.php?cod=NUMERO e quando voltar para o cadastra.php os dados serão perdidos.

Exemplo:

Nome:

Idade: 20

"Erro! Você não preencheu o campo Nome!"

Claro que isso é um exemplo fraco, validação de campos em branco é outra coisa, mas caso um arquivo for muito grande em um upload, ou algum outro erro mais "importante" seja exbido e na volta tudo tá perdido...

Qual a(s) função pra contornar isso?

Valeeeeeeeuuuuuu!!! (denovo!)

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0
Ou então você verifica na mesma página mantendo sempre os valores já digitado!

Isso é uma duvida minha. Como eu faço para fazer uma verficação de erros antes de enviar as informações. ex:

<?php

$envia = "INSERT INTO membros VALUES('$objeto',1)";

$executa=mysql_query($envia);

if($executa)

{

echo "<font color=red face=arial size=4><center>Parabéns</font><br><font face=arial color=darkblue>$nome $sobrenome, seu cadastro foi feito com sucesso!!<br><a href=home.php>Home</a></font>";

}

else

{

echo "<font face=arial color=darkblue>Problemas no cadastro</font>";

}

Acontece que essa msg aparece na propria tela de cadastro:

http://members.lycos.co.uk/familiacontin/atualizar.php

Eu queria fazer o tratamento de erros, sem perder essa informações( como o cara li em cima pediu) e antes de envia-lo a outr pagina ou ao bd.

Valeuz

Link para o comentário
Compartilhar em outros sites

  • 0

Use javascrips nos itens do forms para fazer as verificacoes.

tipo você poem uns comandos no submit com "onSubmit" e quando o cara clica se algo estiver errado ele não deixa o post prosseguir.....

mas aluns navegadores não suportarão então mantenha a validação em php...

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0
Ou então você verifica na mesma página mantendo sempre os valores já digitado!

Bom, primeiro desculpa a demora..

Gladisson, eu já faço tudo isso na mesma página, o problema é que quando eu chamo o erro.php pra mostrar o erro, vem com a opção "clique aqui para tentar novamente". Na real nem sei se tem a opção "voltar"..

Eu utilizo sessões sim..

Então, caso dê um erro, como manter os valores já digitados?

Vou tentar explicar melhor, me loguei como admin, vou para a pagina geralAdmin.php, escolho cadastrar.php, fiz algo de errado e ele chama o erro.hp, ele volta pro cadastrar.php mas perde tudo...

Estou com dúvidas... blink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Tipo assim se a página "erro.php" for +ou- assim:

...

if(...)

elseif($msg=="")

{

}

else

{....

você pode fazer um include para que fique na mesma página, ai mude o action do form!

Entre o código do erro.php colorque

Antes -> if($_POST){

Depois -> }

Tente ai qualquer coisa poste!

Valeu pela atenção aí galera, valeu Gladisson..

smile.gif

Não entendi o "include"..

O erro.php é isso aí, mas ao invés de ifs, é um case.

E não existe uma variável 'msg', se entrar no case 'numero' ele escreve a mensagem:

exemplo:

case 1:

echo "Erro xxxxx! Clique <a href=$caminho>aqui</a> para tentar novamente!";

break;

case 2:

echo "Erro yyyy! Clique <a href=$caminho>aqui</a> para tentar novamente!";

break;

São 2 arquivos, erro.php e ok.php que estão na pasta 'confirmação', e já no início eu detecto a sessão e dependendo dela (privilégio) eu redireciono pra página anterior. Só preciso do $caminho pra ver se é no /admin/cadastra.php ou no /redator/cadastra.php. Entendeu?

Voltando tá tudo perdido...não entendi o include...

E eu já faço o $_post pra pegar as variáveis, se foi isso que você quis dizer..

erro.php e cadastra.php são páginas distintas, e fazer o post pra pegar as variáveis (com o include, se foi isso que entendi) no erro.php..acho que não ia funcionar, tem sessões...

Me compliquei agora... huh.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Vo tentar:

esse é o erro.php, dei um resumida:

<? 
  session_start(); 
?>
(...)
<td>
<?
  $erro = $_GET['erro'];
  if($_SESSION['administrador'] != ''){
    $pagina = 'geralAdmin.php';
    $caminho= 'admin';
  }elseif($_SESSION['redator'] != ''){
     $pagina = 'geralRedator.php';
     $caminho= 'redator';
  }elseif($_SESSION['designer'] != ''){
     $pagina = 'geralDesigner.php';
     $caminho= 'designer';
  }elseif($_SESSION['desenhista'] != ''){
     $pagina = 'geralDesenhista.php';
     $caminho= 'desenhista';
  }else{
    echo session_id();
    echo "<script language='javascript'>
                location.href=('bem-vindo.php')  
             </script>"; 
  }
  if($erro != ""){
    switch($erro){
      case 0:
        echo "Área já cadastrada!<br>
                 Clique <a href='../$caminho/cadastraArea.php'>aqui</a>                         para                 tentar    novamente";
      break;
      case 1:
        echo "Não existem áreas cadastradas!<br>
                 Clique <a href='../$caminho/cadastraArea.php'>aqui</a> para tentar novamente";  
      break;
      case 2:
        echo "Erro cadastrando matéria!<br>
                Clique <a href='../$caminho/cadastraMateria.php'>aqui</a> para tentar novamente";
      break;
     case 3:
       echo "Imagem com formato inválido! Utilize somente arquivos .JPG, .GIF ou .GIF ANIMADO<br>
                Clique <a href='../$caminho/cadastraMateria.php'>aqui</a> para tentar novamente";
    break;
(...)
Veja a minha metodologia: Existem 4 tipos de usuários (logo 4 sessões), pra cada um criei uma pasta, e nela tem os arquivos que o o usuário tem direito de usar, que são todas acessadas pelo geralAdmin.php ou geralRedator.php etc... O case vai até o 14 por enquanto, mas digamos que caiu no case 3... O cadastraMateria.php é enorme, vou tentar botar o que é relevante, esse é o /admin/cadastraMateria.php:
<?
  session_start();
  if($_SESSION['administrador'] != ''){
    require("../conexao.php");
    if($_POST['cadastra'] != ""){
      //atribuição de variáveis
      $titulo    = $_POST['txtTitulo'];
      $descricao = $_POST['txtDescricao'];
      $texto     = $_POST['texto'];
      //filtra o texto
     $texto     = strip_tags  ($texto, '<a><b><i><u><ol><li><strong><em><ul><p><hr>');
     $autor     = $_POST['txtAutor'];
     //query que procura a última matéria cadastrada
    $ultimaMateriaID = mysql_query("SELECT materiaID
                                                     FROM   materia
                      ORDER BY materiaID DESC
       LIMIT 1");
   $regID     = mysql_fetch_array($ultimaMateriaID);
   $ultimoID  = $regID['materiaID']+1;
  (...)
  //Segue um looping enorme para o cadastra de 5 imagens
  //depois:
 //SQL PARA VERIFICAR SE JÁ FOI CADASTRADA UMA MATÉRIA IGUAL
 $sql_verifica = mysql_query("SELECT * 
                                            FROM materia 
                                            WHERE titulo    = '$titulo' 
                             AND   descricao = '$descricao'
              AND   texto     = '$texto'
              AND   autor     = '$autor' ")
   or die("ERRO buscando matéria:".mysql_error());
 $busca_verifica = mysql_num_rows($sql_verifica);
 if($busca_verifica == 0){
   //então cadastra...
   $sqlCad = mysql_query("INSERT blablabla....");
    //AQUI VEM A PARADA::
   if($sqlCad){
      echo "<script language='javascript'>
                  location.href=('../confirmacao/ok.php?ok=3');
	</script>";
    }else{
      echo "<script language='javascript'>
                  location.href=('../confirmacao/erro.php?erro=3');
               </script>";

esse "$texto = $_POST['texto'];"

é porque tem um editor de textos ali (negrito, itálico..) em javascript, aí tive que botar um hiddenfield texto, pra pegar o texto e jogar no $texto...

Espero que não tenha ficado muito grande, resumi e comentei pra entender...

(e tá assim desorganizado por causa do ctrl+c e ctrl+v da vida..)

Ah, e se alguém souber porque o 'strip_tags' não tá funcionando também, eu agradeço hehehe =D

Link para o comentário
Compartilhar em outros sites

  • 0

É..sabia que ia me complicar com isso..

Negócio é o seguinte, existe um jeito de não perder dados ou teria que mudar essa minha metodologia?

//AQUI VEM A PARADA::
   if($sqlCad){
     echo "<script language='javascript'>
                 location.href=('../confirmacao/ok.php?ok=3');
             </script>";
   }else{
     echo "<script language='javascript'>
                 location.href=('../confirmacao/erro.php?erro=3');
              </script>";

Link para o comentário
Compartilhar em outros sites

  • 0

Vai ficar mais ou menos assim:

if($_POST){

if($erro != ""){

  switch($erro){

    case 0:

      echo "Área já cadastrada!<br>

                Clique <a href='../$caminho/cadastraArea.php'>aqui</a>                        para                tentar    novamente";

    break;

    case 1:

      echo "Não existem áreas cadastradas!<br>

                Clique <a href='../$caminho/cadastraArea.php'>aqui</a> para tentar novamente";

    break;

    case 2:

      echo "Erro cadastrando matéria!<br>

              Clique <a href='../$caminho/cadastraMateria.php'>aqui</a> para tentar novamente";

    break;

    case 3:

      echo "Imagem com formato inválido! Utilize somente arquivos .JPG, .GIF ou .GIF ANIMADO<br>

              Clique <a href='../$caminho/cadastraMateria.php'>aqui</a> para tentar novamente";

  break;

(...)

}

}

}

AQUI SEU FORMULÁRIO.

Ex:

echo "<INPUT TYPE='TEXT' NAME='materia' VALUE='".$_POST['materia']."'";

Ai continua...

Se não tiver entendo poste ai!

Link para o comentário
Compartilhar em outros sites

  • 0
Vai ficar mais ou menos assim:

if($_POST){

if($erro != ""){

   switch($erro){

     case 0:

       echo "Área já cadastrada!<br>

                Clique <a href='../$caminho/cadastraArea.php'>aqui</a>                         para                 tentar    novamente";

     break;

     case 1:

       echo "Não existem áreas cadastradas!<br>

                Clique <a href='../$caminho/cadastraArea.php'>aqui</a> para tentar novamente";

     break;

     case 2:

       echo "Erro cadastrando matéria!<br>

               Clique <a href='../$caminho/cadastraMateria.php'>aqui</a> para tentar novamente";

     break;

    case 3:

      echo "Imagem com formato inválido! Utilize somente arquivos .JPG, .GIF ou .GIF ANIMADO<br>

               Clique <a href='../$caminho/cadastraMateria.php'>aqui</a> para tentar novamente";

   break;

(...)

}

}

}

AQUI SEU FORMULÁRIO.

Ex:

echo "<INPUT TYPE='TEXT' NAME='materia' VALUE='".$_POST['materia']."'";

Ai continua...

Se não tiver entendo poste ai!

Então eu "junto" o erro.php com o cadastraMateria.php ??

Não entendi o início:

if($_POST) seria o botão?

No caso

$_POST['cadastrar]!="){

}

Mas como vou fazer isso se o $_POST['cadastrar] é utilizado para a atribuição das variáveis e para a tentativa de cadastro??

Ele sempre vai cair no case!

E se realmente tiver erro..ele não vai mostrar nada, porque não estou passando nada por parâmetro..

Como vou chamar o erro se não for assim:

if($sqlCad){
    echo "<script language='javascript'>
                location.href=('../confirmacao/ok.php?ok=3');
            </script>";
  }else{
    echo "<script language='javascript'>
                location.href=('../confirmacao/erro.php?erro=3');
             </script>";

Estou errado?

Link para o comentário
Compartilhar em outros sites

  • 0

Esse "$_POST" na condição ele só vai abrir quando você acionar o formulário em metodo post.

E para não perder o erro você tem fazer mesma página o chamar um include ou usar o metodo "GET", mais ai pode complicar na hora de receber as variaveis.

Se der eu vou postar um exemplo bem simples pra você entender o que eu estou dizendo.

Link para o comentário
Compartilhar em outros sites

  • 0
Esse "$_POST" na condição ele só vai abrir quando você acionar o formulário em metodo post.

E para não perder o erro você tem fazer mesma página o chamar um include ou usar o metodo "GET", mais ai pode complicar na hora de receber as variaveis.

Se der eu vou postar um exemplo bem simples pra você entender o que eu estou dizendo.

Então eu vou ter que sumir com o erro.php, certo?

Toda essa verificação de erro vai ter que ser tudo na mesma página?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...