Ir para conteúdo

Arquivado

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

Sander Luís

[Resolvido] Login de MySQL para PDO

Recommended Posts

assim pessoal, eu li sobre pdo e não endendi muito, tentei mudar aki mas sem sucesso, eu tenho 3 arquivos para meu login e funcionam perfeitamente, oque eu quero é mudar para pdo mas não consegui: são 3 pequenos scripts:

 

login2.php (no meu servidor eu tirei o .php com htaccess ficando apenas login2)

aki tah só o php do action="" do form

<?php
session_start();
if(isset($_GET['logout'])){$msg ="Sessão Encerrada Com Sucesso!";}
if(isset($_GET['login'])){$msg ="Efetue Login Abaixo Para Accesar Esta Pagina";}
if($_SERVER['REQUEST_METHOD'] == "POST"){
if(isset($_POST['login']) && isset($_POST['senha'])){
require("SQL.php");                             
$login = anti_injection($_POST['login']);
$pass = anti_injection($_POST['senha']);
$new_pass = hash('salsa20', $pass);
$query = mysql_query("SELECT * FROM usuarios WHERE login='$login' AND senha='$new_pass'") or die(mysql_error());
$valid = mysql_num_rows($query);
$row = mysql_fetch_assoc($query);
if($valid > '0'){
session_register('nome');
session_register('login');
session_register('senha');
$_SESSION['nome'] = $row['nome'];
$_SESSION['login'] = $row['login'];
$_SESSION['senha'] = $row['senha'];
header("Location: area_restrita.php");
exit;
} else {
$msg= "Login ou Senha Inválidos";
}
}
}
?>

 

aki a conhexão com o banco

 

SQL.php

<?php

$hostname_SQL = "localhost";
$database_SQL = "banco";
$username_SQL = "login";
$password_SQL = "senha";

$SQL = mysql_pconnect($hostname_SQL, $username_SQL, $password_SQL) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_select_db($database_SQL, $SQL);

if(!function_exists('anti_injection'))
{
function anti_injection($sql)
{
// remove palavras que contenham sintaxe sql
$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
$sql = trim($sql);//limpa espaços vazio
$sql = strip_tags($sql);//tira tags html e php
$sql = addslashes($sql);//Adiciona barras invertidas a uma string
return $sql;
}
}

?>

 

e por final o arquivo que faz o login em si , eu chamo ele com include nas paginas q eu quero proteger

<?
session_start();
if(isset($_SESSION['login']) && isset($_SESSION['senha'])) {
               $login = $_SESSION['login'];
               $senha = $_SESSION['senha'];
               require("SQL.php");
               $query = mysql_query("SELECT * FROM usuarios WHERE login='$login' AND senha='$senha'") or die(mysql_error());
               $valid = mysql_num_rows($query);
}

if(isset($valid) && $valid > '0'){
               $row = mysql_fetch_assoc($query);
} else {
       header("Location: login2?login");
}
?>

 

Por favor Eu Realmente preciso disso e tbm quero entender a logica desse pdo...

 

Oque Eu preciso mudar ae??

Compartilhar este post


Link para o post
Compartilhar em outros sites

infelizmente sou muito fraco a php ainda so fiz um script e mesmo assim foi graças aos amigos do forum.

 

experimenta por o erro que te da e o excerto do codigo onde esse erro esta, assim é mais facil encontrar o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo para você usar pdo terá primeiro que mudar a sua conexão com o banco de dados para pdo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

infelizmente sou muito fraco a php ainda so fiz um script e mesmo assim foi graças aos amigos do forum.

 

experimenta por o erro que te da e o excerto do codigo onde esse erro esta, assim é mais facil encontrar o problema.

 

não é erro só só mudar ali o sql para conectar com pdo e tbm algumas coisas na login2 para buscar no db

 

Amigo para você usar pdo terá primeiro que mudar a sua conexão com o banco de dados para pdo.

seria assim?

<?php

$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password');

?>

 

ate ae eu fiz, só q naum consigo conparar as senhas e tals com o db

 

digamos esta parte

 

       $query = mysql_query("SELECT * FROM usuarios WHERE login='$login' AND senha='$new_pass'") or die(mysql_error());
       $valid = mysql_num_rows($query);
       $row = mysql_fetch_assoc($query);
if($valid > '0'){
session_register('nome');
session_register('login');
session_register('senha');
$_SESSION['nome'] = $row['nome'];
$_SESSION['login'] = $row['login'];
$_SESSION['senha'] = $row['senha'];
header("Location: area_restrita.php");
exit;
} 

 

temq mudar esses mysql_fetch_assoc() e tals para os novos do pdo certo?

 

isso q naum consegui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que mudar algumas coisas, PDO é orientado a objetos, no lugar de mysql_query é somente query

 $query = $banco->query("SELECT * FROM usuarios WHERE login='$login' AND senha='$new_pass'"); 

e no lugar de mysql_fetch_assoc você faz assim

 $row = $query->fetch(PDO::FETCH_OBJ); 

. veja se isso pode ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que mudar algumas coisas, PDO é orientado a objetos, no lugar de mysql_query é somente query

 $query = $banco->query("SELECT * FROM usuarios WHERE login='$login' AND senha='$new_pass'"); 

e no lugar de mysql_fetch_assoc você faz assim

 $row = $query->fetch(PDO::FETCH_OBJ); 

. veja se isso pode ajudar.

beleza vou ver aki vlw

e oque seria o $valid = mysql_num_rows($query);

teria alguum link q você saiba q esplique mais sobre isso dae não precizo ficar pedindo aki.. vlw

 

mudei para

 

 $query = $banco->query("SELECT * FROM usuarios WHERE login='$login' AND senha='$new_pass'"); 
$row = $query->fetch(PDO::FETCH_OBJ);
 $valid = $query->fetch(PDO::FETCH_NUM); 

 

agora para conectar com db:

$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco', 'username','password');

 

assim?

 

acho q o

 

$valid = $query->fetch(PDO::FETCH_NUM);

 

tah erado pq redireciona para a area restrita, ams volta para o login pq não criou as sessões

$query = $banco->query("SELECT * FROM usuarios WHERE login='$login' AND senha='$new_pass'"); 
$valid = $query->fetch(PDO::FETCH_NUM);
$row = $query->fetch(PDO::FETCH_OBJ);
if($valid > '0'){
session_register('nome');
session_register('login');
session_register('senha');
$_SESSION['nome'] = $row['nome'];
$_SESSION['login'] = $row['login'];
$_SESSION['senha'] = $row['senha'];
header("Location: area_restrita.php");
exit;
}

 

a claro

 

tenho q mudar o $row['nome'];$row['login'];e $row['senha'];para pdo tbm como q faço isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa beleza, agora o erro tah aki

 

eu troquei:

 

        $valid = mysql_num_rows($query);
       $row = mysql_fetch_assoc($query);

 

por:

$valid = $query->fetch(PDO::FETCH_NUM);
$row = $query->fetch(PDO::FETCH_OBJ);

 

deve ter algum erro ae no "PDO::FETCH..." pq não tah criando as sessões

 

atualmente esta assim:

 

login2

 

<?php
session_start();
if(isset($_GET['logout'])){$msg ="Sessão Encerrada Com Sucesso!";}
if(isset($_GET['login'])){$msg ="Efetue Login Abaixo Para Accesar Esta Pagina";}
if($_SERVER['REQUEST_METHOD'] == "POST"){
if(isset($_POST['login']) && isset($_POST['senha'])){
require("SQL.php");                             
$login = $_POST['login'];
$pass = $_POST['senha'];
$new_pass = hash('salsa20', $pass);
$query = $banco->query("SELECT * FROM usuarios WHERE login='$login' AND senha='$new_pass'"); 
$valid = $query->fetch(PDO::FETCH_NUM);
$row = $query->fetch(PDO::FETCH_OBJ);

if($valid > '0'){
session_register('nome');
session_register('login');
session_register('senha');
$_SESSION['nome'] = $row->nome;
$_SESSION['login'] = $row->login;
$_SESSION['senha'] = $row->senha;
header("Location: area_restrita.php");
exit;
} else {
$msg= "Login ou Senha Inválidos";
}
}
}
?>

 

SQL.php

<?php
$banco = new PDO('mysql:host=localhost;dbname=banco', 'usser','senha');
?>

e o segurança.php:

<?
session_start();
if(isset($_SESSION['login']) && isset($_SESSION['senha'])) {
               $login = $_SESSION['login'];
               $senha = $_SESSION['senha'];
               require("SQL.php");
			$query = $banco->query("SELECT * FROM usuarios WHERE login='$login' AND senha='$senha'"); 
               $valid = $query->fetch(PDO::FETCH_NUM); 
}

if(isset($valid) && $valid > '0'){
               $row = $query->fetch(PDO::FETCH_OBJ);
} else {
       header("Location: login2?login");
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ae vcs aconselham adicionar mais alguma proteção anti slq ingection ou o pdo ja cuida?

 

eu coloquei assim:

 

$query = $banco->prepare("SELECT * FROM usuarios WHERE login='$login' AND senha='$senha'"); 
$query->execute();
...........
continua o code
...........

 

agora nessas partes que pego do post e tals

 

$email = $_POST['email'];

antes estava

$email = anti_injection($_POST['email']);

 

e a função anti_injection()

era assim sem o pdo:

 

if(!function_exists('anti_injection'))
{
function anti_injection($sql)
{
// remove palavras que contenham sintaxe sql
$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
$sql = trim($sql);//limpa espaços vazio
$sql = strip_tags($sql);//tira tags html e php
$sql = addslashes($sql);//Adiciona barras invertidas a uma string
return $sql;
}
}

 

depois com o pdo eu tirrei essa função ficando "livre"

mas tentei algumas ingections e não da certo... da erro...

 

uma q meu login usa salsa20 para as senhas dae ele pega a do input cria a hash em salsa20 e compara com a do db..

 

acho q tah seeguro, e o login do carra acho q vou colocar com base 64 ...

 

pq se ele colocar algum comando de sql vai criar a hash em salsa20 e vai comparar a hash com a do db dae não vai existir e da login errado uhsauhsauha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ressuscitando o post, porém é pra somar no conhecimento...

Segurança sempre é importante.

Neste link, o usuário mostra como o invasor se utiliza dos métodos e como "se livrar" deles...

http://stackoverflow.com/a/12118602

 

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.