geektr 1 Denunciar post Postado Setembro 24, 2009 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
Beraldo 864 Denunciar post Postado Setembro 24, 2009 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
geektr 1 Denunciar post Postado Setembro 24, 2009 o que uso no lugar do is_registered? Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Setembro 24, 2009 isset(). http://br.php.net/isset Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
geektr 1 Denunciar post Postado Setembro 24, 2009 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
lucasmartins 6 Denunciar post Postado Setembro 24, 2009 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"; 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
Beraldo 864 Denunciar post Postado Setembro 25, 2009 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
geektr 1 Denunciar post Postado Setembro 25, 2009 entendi, depois posto resultados, e se virem mais duvidas. obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
geektr 1 Denunciar post Postado Setembro 26, 2009 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
Beraldo 864 Denunciar post Postado Setembro 26, 2009 retire o arroba (@) do session_start e também poste a mensagem de erro que está aparecendo Compartilhar este post Link para o post Compartilhar em outros sites
geektr 1 Denunciar post Postado Setembro 26, 2009 nenhum erro, apenas redireciona para a pagina de login... Compartilhar este post Link para o post Compartilhar em outros sites
geektr 1 Denunciar post Postado Setembro 26, 2009 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
geektr 1 Denunciar post Postado Setembro 27, 2009 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