Ir para conteúdo

POWERED BY:

Arquivado

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

geektr

[Resolvido] register_globals = on

Recommended Posts

bom, tava lendo no php.net os erros frequentes que acontecem com register_globals on.

 

meu site nao funcionou com globals off, daí queria fazer de um jeito que funcionasse até porque não sera mais possivel modificar esta opção.

 

creio que o problema esta nesta pagina:

<?php
session_start();

if(!(session_is_registered('login') AND session_is_registered('senha')))
{
?>
<center>ERRO, VOCÊ NÃO ESTÁ LOGADO</center>
<?php
exit;
}else{
?>
---
codigo da pagina que pediu o include

ela exibe a mensagem "ERRO, VOCÊ NÃO ESTÁ LOGADO" se não encontrar a sessão...

 

na parte de cadastro, que foi a que mais deu problema (não cadastrava nem f***), contém a seguinte parte:

 

if($login==""){
$erro = "você nao digitou um login";

if($erro==""){
$cadastrar = mysql_query(insert blablabla);

if($cadastrar=1... // ta funcionando normal com globals on

 

e tambem a que confirma o login

 

// ela conecta, faz uma contagem, se a contagem estiver certa, ele grava a sessão

$confirmacao = mysql_query(select,se login=login, blablabla);
$contagem = mysql_num_rows($confirmacao);

if($contagem==1){
$_SESSION['login'] = $login;
$_SESSION['senha'] = $senha;
echo "script q redireciona pra index..";

 

também uso este código em uma das páginas, mas acho que não iria afetar todo o site...

http://forum.imasters.com.br/index.php?/topic/359458-sites-de-uma-pagina-so/page__p__1367574__fromsearch__1entry1367574

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre session_register

Se você quer que seu script funcione independentemente do uso de register_globals, você precisa usar a matriz $_SESSION já que $_SESSION é automaticamente registrada. Se o seu script usa session_register(), ele não irá funcionar em ambientes onde a diretiva de configuração register_globals esteja desabilitada.

 

Se você esta usando $_SESSION (ou $HTTP_SESSION_VARS), não use session_register(), session_is_registered() e session_unregister().

 

fonte: http://br.php.net/session_register

 

Ou seja, não use session_register is_registered e unregister com register_globals off.

 

 

Os outros problemas são a não criação de variáveis. Por exemplo, vocÊ tem que criar a variável login assim (considerando que os dados vêm de um formulário com método POST):

$login = $_POST['login'];

 

Uma forma melhor, evitando erros com campos não preenchidos é a seguinte:

$login = isset( $_POST['lofgin'] ) ? $_POST['login'] : NULL;

Isso é o operador ternário, É como um if: se isset retornar true, faz o que vem após "?". senão, faz o que vem após ":"

 

 

Adicionalmente, recomenda-se filtrar os valores usando uma função contra SQL Injection.

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo pessoal 50% resolvido :)

 

agora esta parte, pelo o que eu entendi, eu posso fazer mais ou menos isto?

$login = isset( $_POST['lofgin'] ) ? $_POST['login'] : $erro = "Erro";

Compartilhar este post


Link para o post
Compartilhar em outros sites

certo pessoal 50% resolvido Imagem Postada

 

agora esta parte, pelo o que eu entendi, eu posso fazer mais ou menos isto?

$login = isset( $_POST['lofgin'] ) ? $_POST['login'] : $erro = "Erro";

Não, aí ta errado... olha porque:

 

Olha como seria essa condição que você escreveu na forma tradicional usando IF ELSE

if (isset( $_POST['login'] )) {
login = $_POST['login']; // ateh aqui td bem...
} else {
$login = $erro = "Erro"; // ai vai dar o erro mesmo [img=http-~~-//forum.imasters.com.br/public/style_emoticons/default/biggrin.gif]
}

 

Tem que ser assim:

 

isset($_POST['login']) ? $login = $_POST['login'] : $erro = "Erro";

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que ser assim:

isset($_POST['login']) ? $login = $_POST['login'] : $erro = "Erro";

O problema disso é que o else não criará a variável login.

Ou seja, você não poderá usar a variável login num if sem gerar um erro do nível E_NOTICE.

 

Eu acho melhor fazer como eu postei antes, depois verificar se $login é igual a NULL. Se for, não foi preenchido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

arrumei a página de cadastro, agora esta dando problema na página que verifica se está logado (com register_globals off, e on)

 

verifica.php

<?php
@session_start();
if (isset($_SESSION['login']) && isset($_SESSION['senha'])){
   $login_usuario = $_SESSION['login'];
}
else {
   session_destroy();
   header("Location:login.php");
   exit();
}
?>

--

 

cadastro (ta funcionando):

$titulo = $_POST['titulo'];
$titulo = isset( $_POST['titulo'] ) ? $_POST['titulo'] : NULL;
$texto = $_POST['texto'];
$texto = isset( $_POST['texto'] ) ? $_POST['texto'] : NULL;
$data = $_POST['data'];
$data = isset( $_POST['data'] ) ? $_POST['data'] : NULL;

if ( $titulo == NULL ) {
$erro .= "Você não digitou um titulo.<br>";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode ser problema na pagina que confirma o login?

 

segue a mesma:

<?php
include("config.php");

$login = $_POST['login'];
$senha = $_POST['senha'];

$sql = "SELECT * FROM tbl_usuarios WHERE login = '$login' && senha = '$senha'";
$exe = mysql_query($sql) or die (mysql_error());
$fet = mysql_fetch_assoc($exe);
$num = mysql_num_rows($exe);

if ($num == 0){
   echo "Login ou senha invalido.";
   echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para voltar.</a>";   
} 
else{
   session_start();
   $_SESSION['login'] = $login;
   $_SESSION['senha'] = $senha;
   header("Location:principal.php");
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá novamente pessoal, queria agradecer a todos que ajudaram ou tentaram ajudar...

 

finalmente resolvi o problema com várias alterações no codigo.

 

 

obs: moderador, se quiser mesclar/apagar os ultimos 2 post...

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.