Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal boa noite
Estou começando no PHP e estou com uma dúvida para poder enviar uma confirmação de uma página para outra e não quero mandar pela URL, para não ficar visível ao usuário
Tenho um captcha e nele estou fazendo uma comparação para poder jogar para uma outra página , caso o código esteja certo
<?php session_start();
if( $_SESSION['captcha'] == $_POST['captcha']){
header("location: emitir_titulo1.php");
}else{
echo "<h1>Erro - Código digitado errado</h1>";
}
?>
Até ai tudo bem esta fazendo certinho, o que eu quero é que na minha emitir_titulo1.php eu consiga fazer uma identificação qqer, onde demonstre que o usuário passou pelo captcha e não jogou o caminho completo até a página emitir_titulo1
Tentei abri a session no emitir_titulo1 porém não deu certo, pois ela vem em branco, e quando coloco o caminho inteiro da página ele abre normalmente
Tentei usar o $_POST, más não tem como ou não sei enviar mesmo, pois estou chamando a página pelo header
Então mudei e tentei criar um arquivo txt com a palavra confirmado
<?php session_start();
if( $_SESSION['captcha'] == $_POST['captcha']){
$fp = fopen("seguranca.txt","a+");
$escreve = fwrite($ft,"confirmado");
fclose($ft);
header ("location: emitir_titulo1.php");
}else{
echo "<h1>Erro - Código digitado errado</h1>";
}
?>
e na página emitir_titulo1.php coloquei
<?php
$arquivo = "seguranca.txt";
$ft=fopen($arquivo,"r");
$conteudo=fread($ft,filesize($arquivo));
fclose($ft);
if ($conteudo == 'confirmado')
{
unlink("seguranca.txt");
}else{
header("location: verificacao.php");
}
?>
Quando a página para executar e digito o código de verificação do captcha, aparece a mensagem abaixo
**Warning**: fwrite(): supplied argument is not a valid stream resource in **caminhodomeuservidor\valida.php** on line **5**
Warning: fclose(): supplied argument is not a valid stream resource in caminhodomeuservidor\valida.php on line 6
Warning: Cannot modify header information - headers already sent by (output started at caminhodomeuservidor\valida.php:5) in caminhodomeuservidor\valida.php on line 7
Más quando coloco o caminho completo da minha página emitir_titulo1.php, ele continua abrindo a página normalmente, e o arquivo gerado esta em branco
Alguém pode me dar uma ajuda, estou o dia todo nisso, o bom é que pesquisei bastante coisa, porém não tenho muito tempo para finalizar
Desde já agradeço a todos
Alguém poderia me dar uma força, eu coloquei o endereço completo da minha página e pulando o meu captcha, e ai o que era para fazer, a página reconhecer que não tinha o arquivo de comparação e carregar a página de verificação
Só que apareceram as mensagens de erro abaixo e a página do emitir_titulo1.php carregou normalmente, ele ignorou o que esta no header
Na tentativa de carregar a página, eu coloquei toda a verificação no topo da página e ai apareceram essas mensagens
Warning: fopen(seguranca.txt) [function.fopen]: failed to open stream: No such file or directory in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 3
Warning: filesize() [function.filesize]: stat failed for seguranca.txt in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 4
Warning: fread(): supplied argument is not a valid stream resource in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 4
Warning: fclose(): supplied argument is not a valid stream resource in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 5
não confirmado <- essa é uma verificação que coloquei, para saber se ele estava identificando que não existia nada, e identificou normalmente
Warning: unlink(seguranca.txt) [function.unlink]: No such file or directory in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 13
Warning: Cannot modify header information - headers already sent by (output started at caminhodaminhapaginanoservidor\emitir_titulo1.php:3) in caminhodaminhapaginanoservidor\emitir_titulo1.php on line 14
@Alvaro_php você pode fazer de forma muito mais simples.
Recomendo você usar variáveis de Sessão, pois evita problemas em ficar gerando arquivos, lendo e apagando.
E caso exista um acesso simultâneo pode ser que de problema já que o arquivo vai existir para uma pessoa e para a outra que pode tentar burlar também vai existir o arquivo.
Você tem essa validação:
<?php
session_start();
if( $_SESSION['captcha'] == $_POST['captcha']){
header("location: emitir_titulo1.php");
exit();
}else{
echo "<h1>Erro - Código digitado errado</h1>";
}
?>
Acredito que esse seja o seu "redirecionador", certo?
Se a pessoa digitar o CAPTCHA que você recebe via POST, juntamente com o CAPTCHA gerado e armazenado no SESSION forem iguais, quer dizer que a pessoa digitou o CAPTCHA corretamente e você vai redirecionar para a página emitir_titulo1.php, certo?
Então, caso a pessoa digite e é o código correto, você pode criar uma outra variável de SESSÃO e armazenas um valor qualquer, tipo $_SESSION['checkCaptch'] = "TRUE"; ficando com o código abaixo:
<?php
session_start();
if( $_SESSION['captcha'] == $_POST['captcha']){
$_SESSION['checkCaptcha'] = "TRUE";
header("location: emitir_titulo1.php");
exit();
}else{
echo "<h1>Erro - Código digitado errado</h1>";
}
?>
Então dentro da página EMITIR_TITULO1.PHP você verifica essa variável.
<?php
IF ($_SESSION['checkCaptcha'] == "TRUE") {
$_SESSION['checkCaptcha'] = "";
} ELSE {
header("Location: index.php");
exit();
};
?>
Como o usuário não consegue ver no navegador o conteudo de uma variável de Sessão, o código fica "seguro" sem a chance de um manuseio direto.
Desta forma você não precisa ficar gerando arquivo, lendo, verificando conteudo, validando e tudo mais.
Espero ter ajudado.
Att.
***Felipe Coutinho***Felipe boa tarde
Agradeço o retorno e a idéia, e assim realmente é mais fácil
Existe uma página verificacao.php que é onde se digita o código que é gerado,e ao apertar o botão envia vai para o captcha.php que faz a verificação que mencionou
Então coloquei os comandos exatamente como você sugeriu, alias dei um ctrl+c e ctrl+v , só que antes lógico entendi o que você quiz dizer, e sei que se alguém descobrir o caminho direto para a página e tentar colocar, a session estará em branco e ai irá força a abertura da página de verificação.
Fazendo o teste aqui, entrei na página de verificação e digitei corretamente o código, porém quando dei o enter apareceu a seguinte mensagem ou mesmo colocando o endereço direto da página emitir_titulo1.php
Warning: Cannot modify header information - headers already sent by (output started at caminhodomeuservidor\emitir_titulo1.php:2) in caminhodomeuservidor\emitir_titulo1.php on line 6
Que é o comando que esta no topo da página do emitir_titulo1.php
Achei que fosse algum problema porque não iniciei a session no emitir_titulo1, porém coloquei e deu uma mensagem de erro que não poderia abrir novamente uma session, deu a mensagem
: Cannot send session cache limiter
Será que você pode me dar mais essa força?
@Alvaro_php
Cara, parabéns, de verdade, você faz parte de um grupo de pessoas que não só faz um CONTROL+C e CONTROL+V e espera que funcione, realmente você entendeu a lógica, infelizmente existem erros que acontecem devido a falta do código completo, mas esse erro não está tão difícil de se identificar.
Na verdade eu já tive uns problemas deste tipo e consegui resolver tranquilamente, vou tentar explicar e você tenta resolver e se não conseguir chama aqui de novo.
Então o erro apontado como você colou é esse:
Warning: Cannot modify header information - headers already sent by (output started at caminhodomeuservidor\emitir_titulo1.php:2) in caminhodomeuservidor\emitir_titulo1.php on line 6
Esse erro não está onde você comentou "Que é o comando que esta no topo da página do emitir_titulo1.php", o erro está exatamente no comando HEADER como a mensagem de erro apresenta HEADER ALREADY SENT BY, e a linha 6 da página EMITIR_TITULO1.PHP deve bater com a linha em questão, veja o código abaixo:
<?php
session_start();
if( $_SESSION['captcha'] == $_POST['captcha']){
$_SESSION['checkCaptcha'] = "TRUE";
header("location: emitir_titulo1.php"); <-- ESTA É A LINHA 6 DO CÓDIGO.
exit();
}else{
echo "<h1>Erro - Código digitado errado</h1>";
}
?>
No meu caso esse Warning foi apresentado porque eu tinha vários ***HEADER*** na minha página e apenas 1 deles tinha o código ***EXIT();*** após o ***HEADER***, o que isso faz? Simples, o ***HEADER*** é um cabeçalho de redirecionamento e se ele não é seguido do comando ***EXIT();*** ele continua a processar todo o conteudo da página e se por ventura ele encontrar outro ***HEADER ***no meio do caminho ou outro comando que emita uma "***SYSOUT***" saida de informação para a tela ele pode gerar esse erro.
Entra nesse [LINK](https://pt.stackoverflow.com/questions/8961/como-resolver-o-erro-cannot-modify-header-information-headers-already-sent-by) que da uns detalhes e uma breve explicação, talvéz você entenda o problema.
O que você vai precisar ver ai no seu código a inicio é se existe algum outro ***HEADER ***e quando eu falo no seu código, eu digo na página completa que você está montando, se você está em ***VERIFICA.PHP*** e dentro desse ***VERIFICA.PHP*** você tem ***UM*** ou ***VÁRIOS INCLUDES*** de outros arquivos ***PHP*** você vai ter que olhar dentro de todos os arquivos ***INCLUDES ***e também no ***CHAMADOR*** que neste exemplo acima é o ***VERIFICA.PHP***.
Só para que você entenda, no meu caso eu simplesmente coloquei ***EXIT();*** logo após ***TODOS OS HEADER*** que estavam na minha "*página*", na página apresentada e dentro de todos os arquivos Incluidos para compor a minha página.
Veja ai se você não tem algo parecido, se você tiver o código que eu coloquei abaixo em um arquivo separado, experimente abrir ele sozinho direto no seu navegador e veja se ele apresenta o mesmo erro de ***HEADER ALREADY SENT BY*** acredito que se você rodar apenas esse código no seu navegador, o erro não deve ser apresentado, mostrando que existe sim algo no seu código que gere esse problema que é gerar saida para a tela antes do ***HEADER***.
<?php
session_start();
if( $_SESSION['captcha'] == $_POST['captcha']){
$_SESSION['checkCaptcha'] = "TRUE";
header("location: emitir_titulo1.php");
exit();
}else{
echo "<h1>Erro - Código digitado errado</h1>";
}
?>
** PRECISO DE AJUDA - Vejá meu problema aqui [Problemas com SELECT](/topic/584129-select-de-3-tabelas-sem-relacionamento-com-sum-com-range-de-data/?tab=comments#comment-2282365)*
Espero ter ajudado.
Att.
***Felipe Coutinho***
Pessoal olhando tudo direitinho, vi que tinha erro de digitação e agora esta dando para criar o arquivo perfeitamente e esta sendo identificado na segunda página
Porém ele não esta fazendo o que preciso, pois quando se joga o caminho inteiro da página até o emitir_titulo1php, o arquivo seguranca.txt não esta criado pois pulou a parte do captcha, e ai o que tinha em mente era ele tentar abrir o arquivo( QUE NÂO EXISTE ) e com isso a variável $conteudo estar em branco e isso é diferente do confirmado, ele teria que apagar o arquivo e abrir no lugar a página verificao.php automaticamente, só que ele esta carregando a página emitir_titulo1.php normalmente
Esse é o comando que esta na emitir_titulo1.php