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

Problema redirecionamento "Location"


AlexandreSA

Pergunta

Bom dia,

Prezados estou com problema no redirecionamento de minha pagina PHP, tenho um formulário que chama ação:

"inserir_inativos.php"

<?php
require_once("conexao/conexao.php");
require_once("classes/inativos.class.php");
require_once("classes/dependentes.class.php");

// Instancia a classe Inativos
$inativosClass = new Inativos();

// Pega os dados vindos do formulário
$inativo = array(
'matricula' => "$_POST[txt_matricula]", 
'nome' => "'$_POST[txt_nome]'",
'nascimento' => "$_POST[txt_nascimento]", 
'sexo' => "'$_POST[rd_sexo]'",
'estado_civil' => "'$_POST[sel_estado_civil]'",
'identidade' => "'$_POST[txt_rg]'", 
'cpf' => "'$_POST[txt_cpf]'", 
'logradouro' => "'$_POST[txt_logradouro]'",
'numero' => "$_POST[txt_numero]",
'complemento' => "'$_POST[txt_complemento]'",
'bairro' => "'$_POST[txt_bairro]'",
'cidade' => "'$_POST[txt_cidade]'", 
'estado' => "'$_POST[txt_estado]'", 
'cep' => "'$_POST[txt_cep]'", 
'pais' => "'$_POST[txt_pais]'",
'telefone' => "'$_POST[txt_telefone]'", 
'celular' => "'$_POST[txt_celular]'", 
'email' => "'$_POST[email]'",
'renda' => "'$_POST[rd_renda]'",
'fonte' => "'$_POST[txt_fonte]'",
'ip' => "'$_SERVER[REMOTE_ADDR]'",
'data' => "'" . date('Y-m-d H:i:s') . "'"); 

// Formata data para inserir no banco
$inativo['nascimento'] = $inativosClass->data2banco($inativo['nascimento']);

// Retira mascara do CEP
$inativo['cep'] = $inativosClass->cep($inativo['cep']);

// Retira mascara do CPF
$inativo['cpf'] = $inativosClass->cpf($inativo['cpf']);

$dadosInativo = implode(', ',$inativo);
//echo "Dados Inativo: " . $dadosInativo . "<br /> <br />";

// Se o campo "lembrar" não existir, o script funcionará normalmente
$lembrar = (isset($_POST['lembrar']) AND !empty($_POST['lembrar']));

// Inserir inativo
if ($inativosClass->inserirInativo($dadosInativo, $inativo['matricula'])) {
    $inativosClass->sessaoInativo($inativo['matricula'], $lembrar);
    
    // Instancia a classe
    $dependentesClass = new Dependentes();
    
    $nomeDep = $_POST['txt_nomeDep'];
    $nascDep = $_POST['txt_nascDep'];
    $situacaoDep = $_POST['sel_situacaoDep'];
    $tipoDep = $_POST['sel_tipoDep'];    

    $cont = count($nomeDep);
    for ($i=0; $i<$cont; $i++) {    
        if (($nomeDep[$i] == '') || ($nascDep[$i] == '') || ($situacaoDep[$i] == '') || ($tipoDep[$i] == '')) {
            exit;
        } else {
            $nascDep[$i] = $dependentesClass->data2banco($nascDep[$i]);
            $dependente = array('nomeDep' => "'$nomeDep[$i]'", 
                                'nascDep' => $nascDep[$i], 
                                'situacaoDep' => "'$situacaoDep[$i]'", 
                                'tipoDep' => $tipoDep[$i]
                                );
            $dadosDependente[$i] = implode(', ',$dependente);
            //echo $dadosDependente[$i];
        }
        if($dependentesClass->inserirDependente($dadosDependente[$i], $_SESSION['inativos_F_INA_ID'])){
            $dependentesClass->sessaoDependente($_SESSION['inativos_F_INA_ID']);
        } else {
            echo "<strong>Erro: </strong>" . $dependentesClass->erro;            
        }
    }    
} else {
    // Não foi possível inserir inativo, exibe a mensagem de erro
    echo "<strong>Erro: </strong>" . $inativosClass->erro;
}
if ($inativosClass->sessaoInativo($inativo['matricula'], $lembrar){
    header("Location: confirmar_inativos.php");
    exit;
}
?>
O código esta funcionando quase perfeito: Inseri no banco, faz todas as validações, etc. No final ele deveria redirecionar para a pagina: "confirmar_inativos.php"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
<title>Confirmação de cadastro</title>
<link rel="stylesheet" href="css/estilo.css" type="text/css" media="screen" />
<link rel="stylesheet" href="css/validationEngine.jquery.css" type="text/css" media="screen"/>
&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
&lt;script src="js/jquery.validationEngine-pt.js" type="text/javascript"></script>
&lt;script src="js/jquery.validationEngine.js" type="text/javascript"></script>
&lt;script src="js/jquery.maskedinput-1.2.2.js" type="text/javascript"></script>
&lt;script src="js/funcoes.js" type="text/javascript"></script>
  
<?php
include_once("classes/inativos.class.php");
if (!isset($inativosClass)) {
    $inativosClass = new Inativos();
}
if ($inativosClass->inativoLogado() == false ) {
    header("Location: recadastrar_inativos.php");
    exit;
}
?>

</head>

<body background="imagens/fundo.jpg" style="background-repeat:repeat">
<div id="dv_container">
  <div id="dv_cabecalho">
    <img src="imagens/inativos.png" width="600px" height="105px"  />
    </div>
    <div id="dv_confirmacao">
    <div id="dv_sucesso"> 
        Recadastramento realizado com sucesso ! <img src="imagens/visto.png" width="40px" height="20px"/> </p> 
    </div>
    <div id="dv_conf_dados"> 
        Número de Inscrição: <?php echo "Sessão: " . $_SESSION['inativos_F_INA_ID']; ?>
        <br />
        <?php echo "Matricula: " . $_SESSION['inativos_F_INA_MATRICULA'] . "  Servidor: " . $_SESSION['inativos_F_INA_NOME']; ?>
    </div>
    </div>
    <div id="dv_rodape">
        <hr />
           <div id="dv_ajuda">
            <p>
               Em caso de dúvidas entre em contato com a equipe do IPREM/GV
               <br />
            (33)3279-**** - (33)3279-**** ou i***@***.gov.br
            </p>
           </div>
    </div>
</div>
</body>
</html>

Obs1: Se eu comentar de "// Instancia a classe" ate o final do "FOR" ele redireciona certinho.

Obs2: Se eu cadastrar e depois abrir em outra aba a pagina "confirmar_inativos.php" ele me mostra a Sessão certo.

Agora não conseguir entender porque ele não redireciona. Alguém poderia me ajudar?

Grato.

Editado por AlexandreSA
Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Me parece que o erro está nesta linha:

if ($inativosClass->sessaoInativo($inativo['matricula'], $lembrar){
Repare que foram abertos 2 parênteses mas fechado apenas 1. Feche o outro, teste e volte a postar. De qualquer forma, adicione estas linhas no começo do arquivo:
error_reporting(E_ALL);
ini_set('display_errors', '1');

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Descobrir duas coisas no meu código:

O campo 'MATRICULA' é do tipo INT(6), então quando eu insiro uma matricula com algum zero a esquerda ex: 000123. OU não preencho os campos para os dependentes, ele não redireciona para pagina seguinte.

Já se eu colocar no campo matricula um valor sem zeros a esquerda ex: 123555 e preencho os campos de Dependentes ele REDIRECIONA para a pagina "confirmar_inativos.php".

Continua minha dúvida de como resolver esse problema.

"função: sessaoInativo()"

function sessaoInativo($matricula) {            
        // Verifica se é um inativo existe
        if ($this->verificaInativo($matricula)) {
            $this->erro = 'Inativo não cadastrado';
        } else {

            // Inicia a sessão
            if ($this->iniciaSessao AND !isset($_SESSION)) {
                session_start();
            }
            // Traz dados da tabela?
            if ($this->dados != false) {
                // Adiciona o campo do matricula na lista de dados
                if (!in_array($this->campos['matricula'], $this->dados)) {
                $this->dados[] = 'F_INA_MATRICULA';
                }
    
                // Monta o formato SQL da lista de campos
                $dados = '`' . join('`, `', array_unique($this->dados)) . '`';
                            
                $sql = "SELECT {$dados} FROM {$this->bancoDeDados}.{$this->tabelaInativos}  
                        WHERE {$this->campos['matricula']} = {$matricula}"; 
                $query = mysql_query($sql);
                    
                // Se a consulta falhou retorna falso
                if (!$query) {
                    //$this->erro = $sql;
                    $this->erro = "Matricula não encontrada";
                    return false;
                }else {
                    // Traz os dados para uma 
                    $dados = mysql_fetch_assoc($query);
                    // Limpa a consulta da memória
                    mysql_free_result($query);
                    
                    // Passa os dados para a sessão
                    foreach ($dados AS $chave=>$valor) {
                        $_SESSION[$this->prefixoChaves . $chave] = $valor; 
                    }
                }
            }
        // Usuário logado com sucesso
        $_SESSION[$this->prefixoChaves . 'logado'] = true;
        
        // Define um cookie para maior segurança?
        if ($this->cookie) {
            // Monta uma cookie com informações gerais sobre o usuário: usuario, ip e navegador
            $valor = join('#', array($matricula, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']));
    
            // Encripta o valor do cookie
            $valor = sha1($valor);
                
            // Cria o cookie
            setcookie($this->prefixoChaves . 'token', $valor, 0, $this->cookiePath);
        }
            
        // Fim da verificação, retorna true
        return true;
        }
    }
"Função inativoLogado()"
function inativoLogado($cookies = true) {
        // Inicia a sessão?
        if ($this->iniciaSessao AND !isset($_SESSION)) {
            session_start();
        }
        
        // Verifica se não existe o valor na sessão
        if (!isset($_SESSION[$this->prefixoChaves . 'logado']) OR !$_SESSION[$this->prefixoChaves . 'logado']) {
            // Não existem dados na sessão

            // Verifica os dados salvos nos cookies?
            if ($cookies) {
                // Se os dados forem válidos o usuário é logado automaticamente
                return $this->verificaDadosLembrados();
            } else {
                // Não há usuário logado
                $this->erro = 'Não há usuário logado 1';
                return false;
            }
        }
        
        // Faz a verificação do cookie?
        if ($this->cookie) {
            // Verifica se o cookie não existe
            if (!isset($_COOKIE[$this->prefixoChaves . 'token'])) {
                $this->erro = 'Não há usuário logado 2';
                return false;
            } else {
                // Monta o valor do cookie
                $valor = join('#', array($_SESSION[$this->prefixoChaves . 'F_INA_MATRICULA'], $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']));
                // Encripta o valor do cookie
                $valor = sha1($valor);
    
                // Verifica o valor do cookie
                if ($_COOKIE[$this->prefixoChaves . 'token'] !== $valor) {
                    $this->erro = 'Não há usuário logado 3';
                    return false;
                }
            }
        }
        // A sessão e o cookie foram verificados, há um usuário logado
        return true;
    }

Link para o comentário
Compartilhar em outros sites

  • 0
Me parece que o erro está nesta linha:

if ($inativosClass->sessaoInativo($inativo['matricula'], $lembrar){
Repare que foram abertos 2 parênteses mas fechado apenas 1. Feche o outro, teste e volte a postar. De qualquer forma, adicione estas linhas no começo do arquivo:
error_reporting(E_ALL);
ini_set('display_errors', '1');
Abraços
($inativosClass->sessaoInativo($inativo['matricula'], $lembrar)
foi um erro de digitação na minha pagina isso esta correto. Adicionei:
rror_reporting(E_ALL);
ini_set('display_errors', '1');

no topo da pagina mas não retornou nenhum erro =/

Você verificou sobre os parênteses?

Como assim eu não entendi ? :)

Editado por AlexandreSA
Link para o comentário
Compartilhar em outros sites

  • 0

hehe

Eu perguntei se você verificou se os parênteses estão corretos, pois tinham sido abertos 2 mas fechado só 1...

Tente alterar a função sessaoInativo() para ver se está entrando no if ou no else:

if ($this->verificaInativo($matricula)) {
            $this->erro = 'Inativo não cadastrado';
            echo $this->erro;
        } else {
            echo 'Sem erros!';

E adicione o error_reporting e ini_set na classe onde tem as funções também...

Editado por Stoma
Link para o comentário
Compartilhar em outros sites

  • 0
hehe

Eu perguntei se você verificou se os parênteses estão corretos, pois tinham sido abertos 2 mas fechado só 1...

Tente alterar a função sessaoInativo() para ver se está entrando no if ou no else:

if ($this->verificaInativo($matricula)) {
            $this->erro = 'Inativo não cadastrado';
            echo $this->erro;
        } else {
            echo 'Sem erros!';

E adicione o error_reporting e ini_set na classe onde tem as funções também...

esta sem erros como eu citei no meu segundo post o erro estar no campo MATRICULA e no não preenchimento dos campos de Dependentes(o que não deveria acontecer pois os campos são dinâmicos) ... coloquei as funções mais para mostrar como estou fazendo

não estou conseguindo resolver ... mas eu sei que o erro está na pagina "inserir_inativos.php"

Link para o comentário
Compartilhar em outros sites

  • 0

Bem... mais uma tentativa ^_^

Adicione isto e vê se muda alguma coisa:

echo 'Até aqui chega...';
Acima desta linha da página inserir_inativos.php:
if ($inativosClass->sessaoInativo($inativo['matricula'], $lembrar){
    header("Location: confirmar_inativos.php");

Editado por Stoma
Link para o comentário
Compartilhar em outros sites

  • 0
Bem... mais uma tentativa ^_^

Adicione isto e vê se muda alguma coisa:

echo 'Até aqui chega...';
Acima desta linha da página inserir_inativos.php:
if ($inativosClass->sessaoInativo($inativo['matricula'], $lembrar){
    header("Location: confirmar_inativos.php");
Não chegou =/
echo "<strong>Erro: </strong>" . $inativosClass->erro;
}
echo 'Até aqui chega...';
if ($inativosClass->sessaoInativo($inativo['matricula'], $lembrar)){
    header("Location: confirmar_inativos.php");
    exit;
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0
hehe

Eu perguntei se você verificou se os parênteses estão corretos, pois tinham sido abertos 2 mas fechado só 1...

Tente alterar a função sessaoInativo() para ver se está entrando no if ou no else:

if ($this->verificaInativo($matricula)) {
            $this->erro = 'Inativo não cadastrado';
            echo $this->erro;
        } else {
            echo 'Sem erros!';

E adicione o error_reporting e ini_set na classe onde tem as funções também...

esta sem erros como eu citei no meu segundo post o erro estar no campo MATRICULA e no não preenchimento dos campos de Dependentes(o que não deveria acontecer pois os campos são dinâmicos) ... coloquei as funções mais para mostrar como estou fazendo

não estou conseguindo resolver ... mas eu sei que o erro está na pagina "inserir_inativos.php"

você disse que o campo 'matricula' => "$_POST[txt_matricula]", é do tipo inteiro ne.

então indique ele como inteirno talves resolva

ex

'matricula' => (int)trim($_POST[txt_matricula]),

a função trim retira os espaços antes e depois dos dados e int converte para inteiro

adicione um or die(mysql_error()) na execução do update pois assim irá informar erro caso seja na atualização dos dados.

até mais.

Link para o comentário
Compartilhar em outros sites

  • 0
hehe

Eu perguntei se você verificou se os parênteses estão corretos, pois tinham sido abertos 2 mas fechado só 1...

Tente alterar a função sessaoInativo() para ver se está entrando no if ou no else:

if ($this->verificaInativo($matricula)) {
            $this->erro = 'Inativo não cadastrado';
            echo $this->erro;
        } else {
            echo 'Sem erros!';
E adicione o error_reporting e ini_set na classe onde tem as funções também...
esta sem erros como eu citei no meu segundo post o erro estar no campo MATRICULA e no não preenchimento dos campos de Dependentes(o que não deveria acontecer pois os campos são dinâmicos) ... coloquei as funções mais para mostrar como estou fazendo não estou conseguindo resolver ... mas eu sei que o erro está na pagina "inserir_inativos.php"
você disse que o campo 'matricula' => "$_POST[txt_matricula]", é do tipo inteiro ne. então indique ele como inteirno talves resolva ex 'matricula' => (int)trim($_POST[txt_matricula]), a função trim retira os espaços antes e depois dos dados e int converte para inteiro adicione um or die(mysql_error()) na execução do update pois assim irá informar erro caso seja na atualização dos dados. até mais.
Coloquei
'matricula' => (int)trim($_POST['txt_matricula'])

melhorou Agora só falta 1 ERRO.

Quando eu não preencho os campos Dependentes (que realmente deve ser dinâmico) ele não faz o LOCATION. Agora quando eu digitando uma MATRICULA: 000012 ou 222333 + todos os campos dependentes ele esta funcionando.

OU SEJA agora só resta descobrir porque ele não aceita redirecionar para pagina seguinte "sem" Dependentes

Link para o comentário
Compartilhar em outros sites

  • 0
hehe

Eu perguntei se você verificou se os parênteses estão corretos, pois tinham sido abertos 2 mas fechado só 1...

Tente alterar a função sessaoInativo() para ver se está entrando no if ou no else:

if ($this->verificaInativo($matricula)) {
            $this->erro = 'Inativo não cadastrado';
            echo $this->erro;
        } else {
            echo 'Sem erros!';
E adicione o error_reporting e ini_set na classe onde tem as funções também...
esta sem erros como eu citei no meu segundo post o erro estar no campo MATRICULA e no não preenchimento dos campos de Dependentes(o que não deveria acontecer pois os campos são dinâmicos) ... coloquei as funções mais para mostrar como estou fazendo não estou conseguindo resolver ... mas eu sei que o erro está na pagina "inserir_inativos.php"
você disse que o campo 'matricula' => "$_POST[txt_matricula]", é do tipo inteiro ne. então indique ele como inteirno talves resolva ex 'matricula' => (int)trim($_POST[txt_matricula]), a função trim retira os espaços antes e depois dos dados e int converte para inteiro adicione um or die(mysql_error()) na execução do update pois assim irá informar erro caso seja na atualização dos dados. até mais.
Coloquei
'matricula' => (int)trim($_POST['txt_matricula'])

melhorou Agora só falta 1 ERRO.

Quando eu não preencho os campos Dependentes (que realmente deve ser dinâmico) ele não faz o LOCATION. Agora quando eu digitando uma MATRICULA: 000012 ou 222333 + todos os campos dependentes ele esta funcionando.

OU SEJA agora só resta descobrir porque ele não aceita redirecionar para pagina seguinte "sem" Dependentes

as vezes o header apresenta erros, principalmente quando há echo ou print no escript ainda não descobrir o motivo do erro mas no seu caso acredito que isso pode melhorar

troque isso

header("Location: confirmar_inativos.php");

por isso

header("Location: confirmar_inativos.php", true);

vai forçar um redirecionamento mas se mesmo assim continuar dando erro

faça em js

echo "<script type='text/javascript'>location.href='confirmar_inativos.php'</script>";

até mais

Link para o comentário
Compartilhar em outros sites

  • 0

(RESOLVIDO)

modifiquei meu código ... o problema era de Lógica mesmo rsrsrs

1º fiz como rickayron falou:

'matricula' => (int)trim($_POST['txt_matricula'])
2º Modifiquei a parte dos Dependentes colocando o Location dentro do IF:
$cont = count($nomeDep);
    for ($i=0; $i<$cont; $i++) {    
        if (($nomeDep[$i] == '') || ($nascDep[$i] == '') || ($situacaoDep[$i] == '') || ($tipoDep[$i] == '')) {
            header("Location: confirmar_inativos.php");
            exit;
        } else {
            $nascDep[$i] = $dependentesClass->data2banco($nascDep[$i]);
            $dependente = array('nomeDep' => "'$nomeDep[$i]'", 
                                'nascDep' => $nascDep[$i], 
                                'situacaoDep' => "'$situacaoDep[$i]'", 
                                'tipoDep' => $tipoDep[$i]
                                );
            $dadosDependente[$i] = implode(', ',$dependente);
            //echo $dadosDependente[$i];
        }
        if($dependentesClass->inserirDependente($dadosDependente[$i], $_SESSION['inativos_F_INA_ID'])){
            $dependentesClass->sessaoDependente($_SESSION['inativos_F_INA_ID']);
        } else {
            echo "<strong>Erro: </strong>" . $dependentesClass->erro;            
        }
    }    
    header("Location: confirmar_inativos.php");
    exit;
} else {
    // Não foi possível inserir inativo, exibe a mensagem de erro
    echo "<strong>Erro: </strong>" . $inativosClass->erro;
}
?>

Obrigado a todos ...

Sou novato no Forum ... tenho que marcar o Tópico como Respondido?

B)

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...