Jump to content
JoaoVM

Login 2X para Concretizar

Recommended Posts

JoaoVM

Bom dia,

Estou com um problema no meu login, o que sucede é que quando efetuo o login ele não faz nada, meti uns echo's para ver onde estava o erro mas ele passa por todos os passos como podem ver...

http://prntscr.com/16w9ez

<?php

echo "passei aqui 1 ";
if(isset($_GET['erro'])) //SE EXISTIR ERRO	
 echo 'Erro no login. Tente novamente.';

echo $_SESSION['username'];

echo "passei aqui 2 ";

$consulta="select * from utilizadores where username='" . $_POST['username'] . "' and passwd='" . $_POST['passwd'] . "'";
$resultado=mysql_query($consulta);

if (mysql_num_rows($resultado)>0) //SE O EMAIL E A PASSWORD COINCIDIREM
{
 echo "passei aqui 3	 ";
 //COLOCA NA VARIAVEL LINHA OS DADOS DA CONSULTA
 $linha=mysql_fetch_array($resultado);
 //COLOCA O USERNAME EM SESSAO
 $_SESSION['username']=$linha['username'];

}
else //CASO NAO COINCIDAM
{

 echo "passei aqui 4 ";
 //REDIRECCIONA PARA A PAGINA INICIAL REPORTANDO O ERRO
 header("location: login.php?erro=1");
}

?>

<form class="login_form" method="POST" id="formulario" action="login.php">
 <label for="username">Utilizador</label>
 <input type="text" name="username" id="username" value="" />
 <label for="passwd">Palavra–Passe</label>
 <input type="password" name="passwd" id="passwd" value=""/>
 <input type="submit" name="login" id="login" value="Login" />
</form>

Neste caso tenho a action="login.php" para verificar que tenho que fazer o login a segunda vez, se tiver para o index.php ele entra no index.php sem iniciar a sessão.

Mas se fizer o login novamente ele inicia a variável de sessão, como podem ser na imagem a sublinhado, ou seja, efetua o login.

http://prntscr.com/16w9ry

O objetivo é fazer login a primeira como é óbvio.

Se me conseguirem ajudar...

Cumprimentos

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
JoaoVM

Ele inicia a sessão mas apenas depois de colocar o username e password 2X..

Share this post


Link to post
Share on other sites
HappyHippyHippo

Ele inicia a sessão mas apenas depois de colocar o username e password 2X..

leste o link que te foi apresentado ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pikax

Nao estas a inciar a sessao!

tens que meter no inicio do ficheiro session_start

Da' uma vista de olhos no link que o HappyHippyHippo postou


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
JoaoVM

sim, eu sei que o session_start(); inicia s sessão ou repõe uma já existente.

Se você quiser usar uma seção com nomes, você deve usar session_name() antes de session_start().

session_start() irá registrar um handler de saída interno para URL reescrevendo quando trans-sid está habilitada. Se um usuário utiliza ob_gzhandler ou ob_start(), a ordem do handler de exibição é importante para a exibição apropriada. Por exemplo, usuário deve registrar ob_gzhandler antes da sessão começar.

Esta foi a parte que me chamou mais a atenção para o meu problema e coloquei o ob_start(); no inicio do meu código, coloquei o session_start() e até o session_name() que na minha opinião não tem tanta importância aqui.

Continua a dar igual, preciso iniciar a sessão duas vezes para funcionar, se calhar não estou a ver bem o problema e é uma coisa óbvia...

Share this post


Link to post
Share on other sites
JoaoVM

Pessoal está a funcionar bem agora, em vez de fazer tudo na mesma página coloquei um login e um valida login com um require_once('init.php') a chamar a função session_start() e funcionou bem, não devia ser do session_start() porque ele iniciava sessão a mesma, apenas tinha que inserir duas vezes, problemas a parte está a funcionar ;) Obrigado a todos

Cumprimentos

Share this post


Link to post
Share on other sites
HappyHippyHippo

então deixa cá ver :

- não pode ser do session_start porque (no teu desvaneio) dizes que não é

- dás uma martelada para chamar a função

- passou a funcionar

- mesmo assim não pode ser da função session_start

... hum, certo ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JoaoVM

Atenção, não estou a dizer que não era da função session_start(), estou a dizer que não devia ser porque ele iniciava a sessão, na minha opinião se nao tivesse o session_start() ele nem a sessão iniciava, o que fiz foi apenas alterar o código e dividir em 2 ficheiros...no código que coloquei a pouco não tinha a minha ligação a bd mas nessa ligação existia um session_start().

Vejamos como ficou:

login.php

<?php


if(isset($_GET['erro'])) //SE EXISTIR ERRO	
echo 'Erro no login. Tente novamente.';


echo $_SESSION['username'];

?>
<form class="login_form" method="POST" id="formulario" action="valida_login.php">
 <label for="username">Utilizador</label>
 <input type="text" name="username" id="username" value="" />
 <label for="passwd">Palavra–Passe</label>
 <input type="password" name="passwd" id="passwd" value=""/>
 <input type="submit" name="login" id="login" value="Login" />
</form>

valida_login.php

<?php
require_once ('init.php');
//CONSULTA DO UTILIZADOR
$consulta="select * from utilizadores where username='" . $_POST['username'] . "' and passwd='" . $_POST['passwd'] . "'";
$resultado=mysql_query($consulta);

if (mysql_num_rows($resultado)>0) //SE O EMAIL E A PASSWORD COINCIDIREM
{
//COLOCA NA VARIAVEL LINHA OS DADOS DA CONSULTA
$linha=mysql_fetch_array($resultado);
//COLOCA O EMAIL EM SESSAO
$_SESSION['username']=$linha['username'];
//REDIRECCIONA A PAGINA PARA A PAGINA SECRETA
header("location: index.php");
}
else //CASO NAO COINCIDAM
{
//REDIRECCIONA PARA A PAGINA INICIAL REPORTANDO O ERRO
header("location: index.php?erro=1");
}
?>

É obvio que tanto um como o outro ficheiro tem ligação a base de dados onde se encontra a função session_start().

Não estou a dizer que não tens razão, porque o mais certo é que tenhas, mas fiz de outra forma e funcionou.

O mais certo é que tenha sido pela função session_start() e como era tão obvio pensava eu que não fosse por isso..

Desde já obrigado pela ajuda e obrigado pela critica, como é obvio são sempre bem vindas, são os erros e as criticas que nos fazem crescer não as coisas de mão beijada...

Cumprimentos

Share this post


Link to post
Share on other sites
bioshock

Fora o que já foi dito, deves ter em atenção ao tipo de código que estás a implementar.

Vê a Wiki P@P, tens vários exemplos, mais simples, eficazes e seguros.

http://wiki.portugal-a-programar.pt/dev_web:php:snippet:login_basico

http://wiki.portugal-a-programar.pt/dev_web:php:criar_login_seguro

http://wiki.portugal-a-programar.pt/dev_web:php:login_parametros <- utiliza a extensão MySQLi, que deves implementar nos teus próximos projectos:

Share this post


Link to post
Share on other sites
JoaoVM

Obrigado Bioshock, eu já conheço também esses links que me enviaste, o que tenho é equivalente ao login básico, o erro era meu no caso que coloquei a cima, apenas não estava a perceber o que estava a acontecer.

Cumprimentos

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.