• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NSTuga

Sessões em PHP

20 mensagens neste tópico

Boas!!! precisava de uma ajuda: preciso de utilizar sessões no meu web site e não consigo fazê-lo. Retirei um código aqui do Portugal-a-Programar, fiz as alterações necessárias para o adicionar a minha página e base de dados (mysql), mas o grande problema é k não sei kuantos ficheiros tenho de criar. Objectivo é fazer um Login, de modo a introduzir o n.ºBI e uma Password, sendo possivel depois ver os seus dados (NºBI, NºEleitor, Nome, Morada, Codigo Postal, Localidade).

Aqui está o código que fiz:

$BI = $_POST['Num_BI'];
$pass = md5($_POST['Pass_utente']);

$conn = mysql_connect("localhost", "root", "") or die("Impossível ligar à Base de Dados!");

if($conn)
{		
	mysql_select_db("login", $conn);
}

$sql = sprintf("SELECT Num_BI, Num_Eleitor, Nome_utente, Morada_utente, CodigoPostal_utente, Localidade_utente FROM utentes");
$rs = mysql_query($sql, $conn);		
$num = mysql_num_rows($rs);		

if($num > 0)
{
	$rst = mysql_fetch_array($rs);
	$Num_BI = $rst["Num_BI"];
	$Num_Eleitor = $rst["Num_Eleitor"];
	$Nome_utente = $rst["Nome_utente"];
	$Morada_utente = $rst["Morada_utente"];
	$CodigoPostal_utente = $rst["CodigoPostal_utente"];
	$Localidade_utente = $rst["Localidade_utente"];

	session_start();

	$_SESSION["Num_BI"]	= $Num_BI;
	$_SESSION["Num_Eleitor"] = $Num_Eleitor;
	$_SESSION["Nome_utente"] = $Nome_utente;
	$_SESSION["Morada_utente"] = $Morada_utente;
	$_SESSION["CodigoPostal_utente"] = $CodigoPostal_utente;
	$_SESSION["Localidade_utente"] = $Localidade_utente;

	mysql_close($conn);
	header("Location: sessoes2.php");
}	
else
{
	mysql_close($conn);

	echo "<br /><br /><br /><br /><center>Nenhum utilizador foi encontrado com esses dados...</center>";		
	echo "<meta http-equiv='refresh' content='3;URL=login.php'>";	
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Antes de mais tens de fazer o SELECT de modo a que te dê somente se existe o tal BI, logo:

$sql = sprintf("SELECT Num_BI, Num_Eleitor, Nome_utente, Morada_utente, CodigoPostal_utente, Localidade_utente FROM utentes WHERE Num_BI='".$BI."' and Password ='".$pass."'");

Supondo que a Password está no mesmo registo e que está encriptada com MD5, ele assim só te ira escolher o registo com o BI desejado e com a password a condizer.

De resto penso que esteja tudo bem,

Depois dà algum feedback a saber se resultou.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Correcção à query do PF:

$sql = sprintf("SELECT Num_BI, Num_Eleitor, Nome_utente, Morada_utente, CodigoPostal_utente, Localidade_utente FROM utentes WHERE Num_BI='%s' and Password ='%s'", mysql_real_escape_string($BI), $pass);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epá... agora quem ficou a nadar fui eu.. LOL, djthyrax, troca lá isso por miudos... :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que ele fez foi evitar o SQL Injection.

Para mais informação podes ler a partir daqui.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que ele fez foi evitar o SQL Injection.

Para mais informação podes ler a partir daqui.

Exacto, e também foi para dar uso ao sprintf() que não estava lá a fazer nada... :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, dá-me erro nesta linha: $num = mysql_num_rows($rs); O que faço agora?

E mais uma pergunta: eu tenho a pagina Login, e depois de introduzir o BI e a Pass vou para a página Login_visualizardados, onde vejo os meus dados, todos os que inseri a seguir ao SELECT. A questão é: Onde coloco este código na Login.php ou na Login_visualizardados.php???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, dá-me erro nesta linha: $num = mysql_num_rows($rs); O que faço agora?

Isso é muito vago. Tens a certeza que meteste o nome da tabela e o nome da BD certos?

E mais uma pergunta: eu tenho a pagina Login, e depois de introduzir o BI e a Pass vou para a página Login_visualizardados, onde vejo os meus dados, todos os que inseri a seguir ao SELECT. A questão é: Onde coloco este código na Login.php ou na Login_visualizardados.php???

Deixa-me ver se percebi, tens o login.php que é onde está o formulário, o login_visualizadaos.php é para onde vais depois de teres sucesso no login.

Podes criar outro ficheiro e meter esse código, e no ficheiro login.php no form em action metes "nomedesseficheiro.php".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu apaguei a linha:    $num = mysql_num_rows($rs);

e ele ja nao me dá erros. Mas nao me encontra os dados, eu ponho o BI e a pass que tenho na BD e ele nao os encontra, mas não me da erros na pagina.

Em relação em onde colocar o codigo: eu meti no ficheiro login_visualizardados, o qual chamei no action do login.php, mas se fizer como disseste, colocar noutro ficheiro, depois como é que vou para o login_visualizardados?? peço desculpa pela minha ignorancia, mas sou muito novo nisto...obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens no post acima dois exemplos de como se faz isso:

header("Location: sessoes2.php");

echo "<meta http-equiv='refresh' content='3;URL=login.php'>";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No header("Location: ficheiroA.php");  O ficheiroA é qual? o login.php (onde entro no login) ou o login_visualizardados(onde vejo os dados)

e o echo "<meta http-equiv='refresh' content='3;URL=ficheiroB.php'>"; E aqui, o ficheiroB é qual??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1º Onde ves os dados, mas deves validar sempre se o login é feito correctamente. Se o utilizador se enganar ao fazer o login em vez de ir para essa página deve pedir-lhe de novo o login.

2º Isso faz o mesmo, apenas espera 3 segundos antes de ir para essa página.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, eu criei a base de dados 'login' e neste ficheiro chamo-a, mas ele nao me vai buscar os dados, porque será?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, eu criei a base de dados 'login' e neste ficheiro chamo-a, mas ele nao me vai buscar os dados, porque será?

Isso é muito vago, tens de dar mais informações.

tens de mudar o nome da tabela também, e o nome dos campos será que não é disso? :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois, eu nao consigo explicar de outra maneira, porque ele trabalha bem, só que não me vai buscar os dados da BD, aparece sempre "Nenhum utilizador foi encontrado com esses dados...", e volta ao formulário, a minha prof diz que só me falta uma coisa pa isto funcionar, mas eu nao sei o que é... por isso estou aqui a pedir ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Volto a dizer, não te podemos ajudar se não mostrares o código. E já agora o nome da BD e das tabelas. :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este é o meu código PHP com sessões:

<?php
$BI = $_POST['Num_BI'];
$pass = md5($_POST['Pass_utente']);
$conn = mysql_connect("localhost", "root", "") or die("Impossível ligar à Base de Dados!");		
if($conn)
{		
	mysql_select_db("login", $conn);
}

$sql = sprintf("SELECT Num_BI, Num_Eleitor, Nome_utente, Morada_utente, CodigoPostal_utente, Localidade_utente FROM utentes WHERE Num_BI='".$BI."' and Password ='".$pass."'", mysql_real_escape_string($BI), $pass);
$rs = mysql_query($sql, $conn);	

if($num > 0)
{
	$rst = mysql_fetch_array($rs);
	$Num_BI = $rst["Num_BI"];
	$Num_Eleitor = $rst["Num_Eleitor"];
	$Nome_utente = $rst["Nome_utente"];
	$Morada_utente = $rst["Morada_utente"];
	$CodigoPostal_utente = $rst["CodigoPostal_utente"];
	$Localidade_utente = $rst["Localidade_utente"];

	session_start();

	$_SESSION["Num_BI"]	= $Num_BI;
	$_SESSION["Num_Eleitor"] = $Num_Eleitor;
	$_SESSION["Nome_utente"] = $Nome_utente;
	$_SESSION["Morada_utente"] = $Morada_utente;
	$_SESSION["CodigoPostal_utente"] = $CodigoPostal_utente;
	$_SESSION["Localidade_utente"] = $Localidade_utente;

	mysql_close($conn);
	header("Location: Login_VisualizarDados.php");
}	
else
{
	mysql_close($conn);

	echo "<br /><br /><br /><br /><center>Nenhum utilizador foi encontrado com esses dados...</center>";		
	echo "<meta http-equiv='refresh' content='3;URL=Login.php'>";	
}
?>

Este é o meu código PHP com o formulário:

<?php
echo
'<br>
<p class="title" align="center">
<strong>Login</strong>
</p>
<p align="center">
<form method="post" action="Login_VisualizarDados.php">';
?>
<?php
function ttitulo($texto)
{
	echo "<tr><td class=titulo align=center>$texto</td></tr>";
}
function ttexto($texto)
{
	echo "<tr><td class=texto align=center>$texto</td></tr>";
}
function nota($texto)
{
	echo "<p class=text1 align=left>$texto</p>";
}?>
<?php
echo '<table align="center">';
ttitulo ('N.º de B.I.');
ttexto ('<input type="text" name="Num_BI">');
echo '</table><br>';
echo '<table align="center">';
ttitulo ('Palavra-Chave');
ttexto ('<input type="password" name="Pass_utente">');
ttitulo ('<input type="submit" value="ENTRAR" name="entrar">');
echo '</table><br><br><br>';
?>

A minha BD chama-se 'login' e as tabelas são: Utentes, Funcionários, Administradores e Utilizadores.

A tabela que utilizo é a Utentes.

Obrigado  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta fazer um echo ao $BI e ver se está a passar bem.

Outra coisa, qual é o tamanho na BD do campo da password? é que tem de ter uns 50 ou 60 senão a hash gerada não cabe lá e ao fazer as comparações dá mal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu fiz o que disseste mas não funciona à mesma, ou seja, continua a não fazer a ligação, eu ponho a Pass e o BI e ele diz "Nenhum utilizador foi encontrado com esses dados...", tipo eu nao percebo o que está mal, porque ja fiz o que sei e o que disseste e ele continua a dar erro. Se ainda me conseguires ajudar agradecia, se não souberes mais agradeço à mesma.

Muito obrigado  ;):P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora