Ir para conteúdo

POWERED BY:

Arquivado

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

felipefarseer

Como pegar url anterior, para usar na nova pagina?

Recommended Posts

Estou fazendo uma pagina aqui e gostaria de tirar a seguinte duvida.

 

Pagina De Compra.

O cara clica em comprar, e manda para pagina de login, ele loga para comprar, assim que ele logar quero que manda ele para pagina de compra que ele estava, e gostaria de saber tb como pegar o URL desta pagina que ele esta e assim que ele clicar em comprar na Pagina de finalizacao de compra, enviar um email para ele com o link do produto que ele comprou.

 

aguardo e obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$_SERVER['PHP_SELF'];
Isso vai te dar a página que o internauta está.

Quando redirecioná-lo para a página de login, você pode, por exemplo, passar esse valor por GET, e após logá-lo:

 

header('location: ' . url_decode($_GET['pagina_anterior'] );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcio Leandro,

 

Trabalhava em visual basic, mas estou tendo aprender a linguagem php, mas até hoje não entendi essas funções: urlencode e urlencode que vocês falam para codificar a URL. Então, explique-me nesse código abaixo com codificar a URL do logado.php

 

<?php

 

// Inicia sessões

session_start();

 

// Conexão com o banco de bados

include("bdinc.php");

 

// Recupera o nome

$nome = isset($_POST["nome"]) ? addslashes(trim($_POST["nome"])) : FALSE;

 

// Recupera a senha, a criptografando em MD5

$senha = isset($_POST["senha"]) ? base64_encode((trim($_POST["senha"]))) : FALSE;

 

// Usuário não forneceu a senha ou o nome

if(!$nome || !$senha)

{

echo "Você deve digitar sua senha e login !";

exit;

}

 

/**

* Executa a consulta no banco de dados.

* Caso o número de linhas retornadas seja 1 o nome é válido,

* caso 0, inválido.

*/

$SQL = "SELECT * FROM usuarios where nome = '$nome' ";

$result_id = @pg_query($SQL) or die("Erro no banco de dados!");

$total = @pg_num_rows($result_id);

 

// Caso o usuário tenha digitado um nome válido o número de linhas será 1..

if($total)

{

// Obtém os dados do usuário, para poder verificar a senha e passar os demais dados para a sessão

$dados = @pg_fetch_array($result_id);

 

// Agora verifica a senha

if(!strcmp($senha, $dados["senha"]))

{

// TUDO OK! Agora, passa os dados para a sessão e redireciona o usuário

$_SESSION["id_usuario"] = $dados["codigo"];

$_SESSION["nome_usuario"] = $dados["nome"];

header("location: logado.php");

exit;

}

// Senha inválida

else

{

echo "<html><body>";

echo "<hr>";

echo "<p align=\"center\">A senha está incorreta !</p>";

echo "<p align=\"center\"><a href=\"index.php\">Voltar</a></p>";

echo "<hr>";

echo "</body></html>";

exit;

}

}

// nome inválido

else

{

echo "<html><body>";

echo "<hr>";

echo "<p align=\"center\">Usuários não encontrado !</p>";

echo "<p align=\"center\"><a href=\"index.php\">Voltar</a></p>";

echo "<hr>";

echo "</body></html>";

exit;

}

?>

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se voce tiver trabalhando com strings neste caso

 

$_SERVER['PHP_SELF'];

 

não funciona!

 

voce pode estar fanzendo o seguinte armazena a URL numa variavel, ao efetuar o login se variavel $url(por exemplo) for diferente de vazia manda ele pra ela, caso contrário manda ele pra pagina que você quiser!

 

Um exemplo que uso para armazenando em variavel de sessão!

 

<?php
session_start();
//$url = $_SERVER['QUERY_STRING'];
$_SESSION['url'] = ($_SERVER["HTTPS"]=="on")?"https://":"http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]."?".$_SERVER['QUERY_STRING'];
echo $_SESSION['url'];
?>

e o restante faça igual o Marcio leandro disse para redirecionar

 

Espero que ajude!

 

Abraços http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, em linguagens para WEB, utiliza-se valores passados pela URL, então, recomendo você dar um estudada na referência do PHP:

 

Superglobais: http://br.php.net/manual/pt_BR/language.va...uperglobals.php

Variáveis de requisiçaõ GET: http://br.php.net/manual/pt_BR/reserved.variables.get.php

Valores capturados/gerados pelo servidor: http://br.php.net/manual/pt_BR/reserved.variables.server.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

WDuarte,

 

Acho que sou muito burro, pois não entendi nada ?

Esse código coloco no início do index.php.

<?php

session_start();

//$url = $_SERVER['QUERY_STRING'];

$_SESSION['url'] = ($_SERVER["HTTPS"]=="on")?"https://":"http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]."?".$_SERVER['QUERY_STRING'];

echo $_SESSION['url'];

?>

E depois, o que faço aqui ?

header('location: ' . url_decode($_GET['pagina_anterior'] );

É isso ?

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que sou muito burro, pois não entendi nada ?

Bom amigo isso não existe e simplesmente trabalhamos da forma que nos é conveniente a cada tipo de sistema nem sempre $_GET vai resolver seus problemas http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif por isso existe esta ampla biblioteca que é o PHP

 

Vamos lá então

 

no inicio de cada pagina coloca o que voce citou acima

 

<?php

session_start();

$_SESSION['pegaurl'] = ($_SERVER["HTTPS"]=="on")?"https://":"http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];

?>

e isso é independente se é via get ou session é só mudar

 

pegando seu código de login, fiz uma simples alteração

 

 

<?php 

// Inicia sessões 
session_start(); 
$header = $_SESSION['pegaurl'];

// Conexão com o banco de bados
include("bdinc.php");

// Recupera o nome 
$nome = isset($_POST["nome"]) ? addslashes(trim($_POST["nome"])) : FALSE; 

// Recupera a senha, a criptografando em MD5 
$senha = isset($_POST["senha"]) ? base64_encode((trim($_POST["senha"]))) : FALSE; 

// Usuário não forneceu a senha ou o nome 
if(!$nome || !$senha) 
{ 
echo "Você deve digitar sua senha e login !"; 
exit; 
} 

/** 
* Executa a consulta no banco de dados. 
* Caso o número de linhas retornadas seja 1 o nome é válido, 
* caso 0, inválido. 
*/ 
$SQL = "SELECT * FROM usuarios where nome = '$nome' "; 
$result_id = @pg_query($SQL) or die("Erro no banco de dados!"); 
$total = @pg_num_rows($result_id); 

// Caso o usuário tenha digitado um nome válido o número de linhas será 1.. 
if($total) 
{ 
// Obtém os dados do usuário, para poder verificar a senha e passar os demais dados para a sessão 
$dados = @pg_fetch_array($result_id); 

// Agora verifica a senha 
if(!strcmp($senha, $dados["senha"])) 
{ 
// TUDO OK! Agora, passa os dados para a sessão e redireciona o usuário 
$_SESSION["id_usuario"] = $dados["codigo"]; 
$_SESSION["nome_usuario"] = $dados["nome"]; 


header("Location: $header");// mudei a forma para dinamica



exit; 
} 
// Senha inválida 
else 
{ 
echo "<html><body>";
echo "<hr>";
echo "<p align=\"center\">A senha está incorreta !</p>";
echo "<p align=\"center\"><a href=\"index.php\">Voltar</a></p>";
echo "<hr>";
echo "</body></html>";
exit; 
} 
} 
// nome inválido 
else 
{ 
echo "<html><body>";
echo "<hr>";
echo "<p align=\"center\">Usuários não encontrado !</p>";
echo "<p align=\"center\"><a href=\"index.php\">Voltar</a></p>";
echo "<hr>";
echo "</body></html>";
exit; 
} 
?>

Agora voce pode tambem ta trazendo este valores via get voce escolhe

 

Abraços

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

WDuarte,

 

Desculpe-me por mais um pergunta, mas não está exigindo o arquivo logado.php. Veja o que fiz:

index.php

<?php

session_start();

$_SESSION['pegaurl'] = ($_SERVER["HTTPS"]=="on")?"https://":"http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];

?>

<html>

<head>

<title>Área Restrita Favor Logar</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script language="javascript">

function valida_dados ()

{

if (login.nome.value=="") {

alert ("Por favor digite o login.");

login.nome.focus();

return false;

}

if (login.senha.value=="") {

alert ("Por favor digite a senha.");

login.senha.focus();

return false;

}

return true;

}

</script>

</head>

 

<body bgcolor="#0099CC" text="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">

<table width="100%" border="0" cellspacing="0" cellpadding="0">

<tr>

<td bgcolor="#FFCC66"> <div align="center">

<p><font color="#000000" size="2"><b><span class="titulo">· Atenção</span>

·<br>Área Restrita Favor Logar no Sistema

<br>

<?php include("mostradata.php");?></b></font>

<br>

<br>

<strong><font color="#CC0000"><b>

<?=$errado;?>

</b> </font></strong></p>

</div></td>

</tr>

<tr>

<td bgcolor="#FFFFFF" height="2"></td>

</tr>

<tr>

<td> <table width="235" border="0" cellspacing="0" cellpadding="0" align="center">

<form name="login" method="post" action="login.php" onSubmit="return valida_dados(this)">

<tr valign="middle" align="center">

<td height="75">Login:<br> <input type="text" name="nome" class="caixa" size="16">

<br>

Senha:<br> <input type="password" name="senha" class="caixa" size="8">

</td>

</tr>

<tr>

<td bgcolor="#000000" height="1"></td>

</tr>

<tr valign="middle" align="center">

<td> <div align="center"><font color="#000000"><b>

<p align="center"><input name="Submit" type="submit" class="botao" value="Entrar">

<input type="button" value="Sair" name="fechar" onClick="self.close()"></p></b></font></div></td>

</tr>

<tr valign="middle" align="center">

<td><strong><a href="senha.php">Esqueci a senha</a> · <a href="cadastro.html">Cadastrar</a></strong></td>

</tr>

</form>

</table></td>

</tr>

<tr>

<td> <div align="center"></div></td>

</tr>

</table>

</body>

</html>

login.php

<?php

 

// Inicia sessões

session_start();

$header = $_SESSION['pegaurl'];

 

// Conexão com o banco de bados

include("bdinc.php");

 

// Adicionamos uma função para verificar se o servidor executou addslashes() de forma

// transparente, senão executamos:

function checkslashes ( $valor)

{ if (

!

get_magic_quotes_gpc ())

{

return addslashes ( $valor);

} else {

return $valor;

}

}

 

// Recupera o nome

$nome = isset($_POST["nome"]) ? addslashes(trim($_POST["nome"])) : FALSE;

 

// Recupera a senha, a criptografando em MD5

$senha = isset($_POST["senha"]) ? base64_encode((trim($_POST["senha"]))) : FALSE;

 

// Usuário não forneceu a senha ou o nome

if(!$nome || !$senha)

{

echo "Você deve digitar sua senha e login !";

exit;

}

 

/**

* Executa a consulta no banco de dados.

* Caso o número de linhas retornadas seja 1 o nome é válido,

* caso 0, inválido.

*/

$SQL = "SELECT * FROM usuarios where nome = '". checkslashes($nome) ."' AND senha = '". checkslashes($senha) ."' ";

$result_id = pg_query($SQL) or die("Erro no banco de dados!");

$total = @pg_num_rows($result_id);

 

// Caso o usuário tenha digitado um nome válido o número de linhas será 1..

if($total)

{

// Obtém os dados do usuário, para poder verificar a senha e passar os demais dados para a sessão

$dados = @pg_fetch_array($result_id);

 

// Agora verifica a senha

if(!strcmp($senha, $dados["senha"]))

{

// TUDO OK! Agora, passa os dados para a sessão e redireciona o usuário

$_SESSION["id_usuario"] = $dados["codigo"];

$_SESSION["nome_usuario"] = $dados["nome"];

header("Location: $header");// mudei a forma para dinamica

exit;

}

// Senha inválida

else

{

echo "<html><body bgcolor=#E1E1E1>";

echo "<script language=JavaScript> window.alert('A senha está incorreta !'); </SCRIPT>";

echo "<script>window.location = 'index.php'</script>";

echo "</body></html>";

exit;

}

}

// nome inválido

else

{

echo "<html><body bgcolor=#E1E1E1>";

echo "<script language=JavaScript> window.alert('Usuários não encontrado !'); </SCRIPT>";

echo "<script>window.location = 'index.php'</script>";

echo "</body></html>";

exit;

}

?>

Está gerando essa sessão, após clicar no botão entrar.

Aqui ficava o arquivo logado.php

header("Location: $header");// mudei a forma para dinamica

 

Que besteira estou fazendo.

 

 

Um abraço.

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opá amigo sem problemas estamos aqui pra isso http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

 

dei uma modificada em seu código testa ai e me diz o que da que vamos corrigindo

 

<?php
session_start();
$header = $_SESSION['pegaurl'];

require "bdinc.php";

$nome = isset($_POST["nome"]) ? strtolower(addslashes(trim(strip_tags($_POST["nome"])))) : FALSE; // strip_tags antes do trim para não correr o risco do strip_tags gerar espaços em branco
$senha = isset($_POST["senha"]) ? base64_encode(trim($_POST["senha"])) : FALSE;

if(!$nome || !$senha) {
echo "Você deve digitar sua senha e login !"; 
exit; 
}

$SQL = "SELECT codigo, nome FROM usuarios WHERE nome = '$nome' AND senha = '$senha'"; // Se você falar que o cara acertou o usuário mas errou a senha, ele vai saber em qual nome usar um brute force, por isso, se der errado um da errado os dois
$result_id = @mysql_query($SQL) or die("Erro no banco de dados!");
if (mysql_numrows($result_id) != 1) die echo "<script language=JavaScript> window.alert('Login ou senha inválidos!'); </SCRIPT>";

$dados = @mysql_fetch_array($result_id);

$_SESSION["id_usuario"] = $dados["codigo"]; 
$_SESSION["nome_usuario"] = $dados["nome"]; 

header("Location: $header");
?>

Não testei mas se aparecer algum erro posta ai

 

agora este tipo de redirecionamento e para multiplas páginas como como foi intitulado o tópico, se voce estiver usando só pra mandar para uma especifica faça pelo método convencional.

 

Abraços!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

WDuarte,

 

Após fazer algumas mudanças no seu código: De mysql para postgres. Está exibindo esse erro:

Parse error: syntax error, unexpected T_LOGICAL_OR in C:\Arquivos de programas\Apache Group\Apache2\htdocs\site\login.php on line 17

Veja código alterado: login.php

<?php

session_start();

$header = $_SESSION['pegaurl'];

 

require "bdinc.php";

 

$nome = isset($_POST["nome"]) ? strtolower(addslashes(trim(strip_tags($_POST["nome"])))) : FALSE; // strip_tags antes do trim para não correr o risco do strip_tags gerar espaços em branco

$senha = isset($_POST["senha"]) ? base64_encode(trim($_POST["senha"])) : FALSE;

 

if(!$nome || !$senha) {

echo "Você deve digitar sua senha e login !";

exit;

}

 

$SQL = "SELECT * FROM usuarios WHERE nome = '$nome' AND senha = '$senha'"; // Se você falar que o cara acertou o usuário mas errou a senha, ele vai saber em qual nome usar um brute force, por isso, se der errado um da errado os dois

$result_id = @pg_query($SQL) or die("Erro no banco de dados!");

if (pg_num_rows($result_id) != 1) or die

echo "<script language=JavaScript> window.alert('Login ou senha inválidos !');</script>";

 

$dados = @pg_fetch_array($result_id);

 

$_SESSION["id_usuario"] = $dados["codigo"];

$_SESSION["nome_usuario"] = $dados["nome"];

 

header("Location: $header");

?>

WDuarte, estou tentando fazer isso, pois acho mais seguro. Trabalho no setor de compras e estou desenvolvendo um site para o setor, porém o código está muito amador, pois como falei trabalho com visual basic 06 e no php não tem os objetos para arrastá-lo e fazer o design bonito. A parte administrativa está quase pronta, mas queria uma opinião sua: mande-me um email para: nossilasantana@bol.com.br que forneço um login e senha com usuário de diretoria.

 

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procurando pela web uma solução para pegar a url anterior cai aqui novamente... rsrsrsr..

 

Então galera me ferrei um monte tentando achar uma solução... existiam coisas com javascript, outras com php, mas nada que pegasse caso o usuário acessa-se externo o site, para que eu pudesse analisar o que estava sendo acessado visto que antes ele passava pelo .htaccess, perdendo a url com problema, como falaram logo acima.

 

Então tentei a seguinte solução que no final apresento um unico problema:

 

Utilizar o mod_rewrite que tem a função de reescrever URLs a partir de um conjunto de parâmetros especificado por você, nas distribuições derivadas do Debian, você pode ativá-lo usando o comando a2enmod:

 

# a2enmod rewrite

 

Você receberá uma resposta dizendo que o modulo esta ativo, dai podemos ativar no /etc/apache2/httpd.conf

 

<Directory "/var/www/minhapagina">
AllowOverride all
</Directory>

A primeira linha identifica o caminho da pagina dentro do servidor

A segunda linha libera para você especificar um arquivo .htaccess nas pastas das paginas para especificar regras diferentes para cada pasta se necessário.

 

dentro de /var/www/minhapagina/ você cria um arquivo .htaccess com o seguinte conteúdo:

Options -Indexes
RewriteEngine on
RewriteRule (.*) http://meusite/erros/index.php?url=$1 [R=301,L]

 

Lembrando que:

O .htaccess é um arquivo ASCII. Use seu editor de texto preferido certificando-se de que esteja com o rearranjo de linhas (word wrap) desativado para evitar a inclusão de caracteres de quebra de linha, geralmente não visíveis, que poderão gerar erros. Se você usar o Bloco de Notas do Windows, cuidado quando for salvar seu arquivo: como padrão, este editor de texto adiciona a extensão .txt e um arquivo com o nome .htaccess.txt não vai ser reconhecido pelo Apache.

by: Vovo vicki

 

Eu utilizo o vi ou vim.

 

Vamos comentar o Código:

 

Options -Indexes

 

Impede a listagem dos arquivos do diretorio, importante somente para segurança não para nosso caso mas eu listei ele aqui...

 

RewriteEngine on

 

Habilita a re-escrita de url para que possamos manipula-la.

 

RewriteRule (.*) http://meusite/erros/index.php?url=$1 [R=301,L]

 

A linha mais importante o que iremos vazer com a manipulação, sendo que $1 armazena a url que esta sendo acessada sendo enviada por get para o arquivo dentro da pasta erros de nome index.php (pode ser qualquer nome).

 

Por ultimo um script basico index.php dentro da pasta erros que mostra a url que tentou ser acessada:

 

<?php

echo 'Você tentou acessar a url: '.$_GET['url'];

?>

 

Bem neste exemplo simples quando a pessoa for entrar em http://www.meusite.com.br/link_invalido.php ela será redirecionada para http://www.meusite.com.br/erros/index.php?url=link_invalido.php onde será apresentado a seguinte mensagem:

 

Você tentou acessar a url: link_invalido.php

 

PROBLEMA: Todas as urls mesmo as corretas são redirecionadas... talvez algo como:

 

RewriteEngine on
ErrorDocument 404 RewriteRule (.*) http://meusite/erros/index.php?url=$1 [R=301,L]

 

Mas não consegui fazer funcionar ainda... tem alguma solução?

 

Edit

A solução

 

Consegui uma solução sem utilizar o mod_rewrite, utilizando especialmente para cada erro eis a solução no htaccess utilizando javascript:

 

ErrorDocument 404 "<script>var urlerro=window.location; window.location = 'http://meusite/erros/index.php?url='+urlerro;</script>;

 

A unica dureza é por utilizar o javascript... mas funfa de boa... uma coisa boa é que pode ser criado um script de erro para cada erro por exemplo um para o 403, 404, 405 etc...

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.