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

cryteck

Passar id por url

9 mensagens neste tópico

Eu fiz um sistema de login usando sessões, mas agora não estou conseguindo fazer a página de editar utilizador .

Eu faço o login página login.php, depois se errar o login, vai para a página errar_login.php senão cria a sessão e vai para a página principal.php onde aparece logout e editar utilizador.

Ao clicar em editar utilizador vai para a página editar_utilizador.php onde tem um formulario para por nova password e novo email.

Eu consigo actualizar a base de dados, mas só com o id que eu puser ex:

$sql="UPDATE user SET password='$password', email='$email' WHERE id='1'";

$resultado = mysql_query($sql);

$exe_resultado = mysql_query($sql) or die (mysql_error());

O que eu queria é que só actualizasse a base de dados com o id do utilizador que fez login.

Podiam-me dar sugestões como proceder, é que eu não estou a conseguir.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando o utilizador fizer login, guardas o id dele na sessão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, eu já fiz isso ao fazer login vai para a página errar_login.php se não cria a sessão e vai para a pagina principal.php.

Ora verifica

errar_login.php

<?php

include("config.php");

$login = $_POST['login'];

$id = $_POST['id'];

$password = md5($_POST['password']);

/* Verifica se existe utilizador e  procura  uma

linha que contenha o login e a senha digitada */

$sql_verificar = "SELECT * FROM user WHERE login = '$login' && password = '$password'";

$exe_verificar = mysql_query($sql_verificar) or die (mysql_error());

$fet_verificar = mysql_fetch_assoc($exe_verificar);

$num_verificar = mysql_num_rows($exe_verificar);

//Verifica se n existe uma linha com o login e a senha digitado

if ($num_verificar == 0){

  echo "Utilizador ou Password inválida.";

  echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para voltar.</a>"; 

}

else

{

  //Cria a sessão e manda pra pagina principal.php

  session_start();

  $_SESSION['id'] = $id;

  $_SESSION['login'] = $login;

  $_SESSION['password'] = $password;

  header("Location:principal.php");

}

 

?>

principal.php

<?php

include("config.php");

include("restrito.php");

$sql_pesquisa = "SELECT * FROM user WHERE login = '$login_utilizador'";

$exe_pesquisa = mysql_query($sql_pesquisa) or die (mysql_error());

$fet_pesquisa = mysql_fetch_assoc($exe_pesquisa);

?>

Olá <? echo $fet_pesquisa['login'];?>

<a href="logout.php">Logout</a>

<a href="editar_utilizador.php?id='.$id.'">Editar Utilizador</a>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O teu código é um bocado grande, mas só de olhar assim rapidamente, tens um erro aí no teu 2º código, na tua query sql:

$sql_verificar = "SELECT * FROM user WHERE login = '$login' && password = '$password'";

devia ser

$sql_verificar = "SELECT * FROM user WHERE login = '$login' and password = '$password'";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sir, como o scorch disse, estás a obter o id por $_POST['id'], quando este está a ser passado por Query String (tendo que ser $_GET['id']).

Ah, e tem atenção também ao que o softclean disse.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando trabalhas com logins é aconselhável que uses o método POST, por isso altera o método no form.

Tem atenção ao que scorch, softclean, The Loser disseram. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Completando o que o scorch disse (porque ele não explicou exactamente porquê),

Agora reparei. Ao fazer login, devias usar mysql_real_escape_string, porque senão é facili-mo penetrar na tua aplicação.

http://pt.php.net/manual/pt_BR/function.mysql-real-escape-string.php

Quando não escapas caracteres especiais (nomeadamente, o ' ), é possível explorar isso, procedendo à execução de um SQL Injection.

Basicamente, uma SQL Injection é, como o nome sugere, uma injecção de código SQL no teu query, permitindo assim a qualquer zé mané que saiba SQL manipular como quiser as tuas bases de dados.

Vejemos..

Supondo que tens o query:

SELECT id FROM toni where user='$user'

Sendo que estás a usar input feito pelo utilizador, $user pode ser qualquer coisa desde um utilizador válido a um Query.

Vamor supor que $user tem o seguinte valor:

'; UPDATE toni SET password='lulz' WHERE user='queroAtuaConta'

Desta forma, o query completo ficaria:

SELECT id FROM toni where user=''; UPDATE toni SET password='lulz' WHERE user='queroAtuaConta'

Ou seja, seriam executados esses 2 queries e a password do utilizador queroAtuaConta seria alterada para uma conhecida ao injecter..

Antes de inserires a $user no query, usarias a mysql_real_escape_string, de forma a escapar o ' com um \.

(fazendo assim o query pesquisar pelo utilizador inexistente \'; UPDATE toni SET password=\'lulz\' WHERE user=\'queroAtuaConta\').

Huge text is huge, apeteceu-me escrever. :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