2012-05-31 6 views
0

Ниже приведена моя «проверка входа» Он отлично работает, если я использую старый традиционный mysql connect .., но с PDO он, похоже, не работает .. ум, если кто-нибудь даст мне несколько советов или изменений в этот код, чтобы он работал?Login Validator Checker PHP MYSQL

Это дает мне эту ошибку:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\clubresults\checklogin.php on line 23 

где линия 23 $ Count = mysql_num_rows ($ результат); Спасибо!

<?php 
ob_start(); 
$tbl_name="admin_passwords"; // Table name 

     $pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678'); 
    #Set Error Mode to ERRMODE_EXCEPTION. 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 
// If result matched $myusername and $mypassword, table row must be 1 row 

if($count==1){ 
// Register $myusername, $mypassword and redirect to file "login_success.php" 
$_SESSION["myusername"] = "$myusername"; 
$_SESSION["mypassword"] = "$mypassword"; 
header("location:login_success.php"); 
} 
else { 

echo "ACCESS DENIED.<br> Incorrect username and/or Password 
<br>Please check your username and password. <br> wait five seconds for redirection. "; 
} 
ob_flush(); 
?> 

ответ

2

Это не выглядит, как вы полностью Усиливая PDOs и использование параметризованных statments.

Если бы это было мне, я бы написал код следующим образом:

$tbl_name="admin_passwords"; // Table name 

$pdo = new PDO('mysql:host=localhost;dbname=clubresults', 'root', '12345678'); 
#Set Error Mode to ERRMODE_EXCEPTION. 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$stmt = $pdo->prepare("SELECT * FROM $tbl_name WHERE username = :username AND password = :password"); 
$stmt->execute(array('username' => $_POST['myusername'], 'password' => $_POST['mypassword'])); 
if ($stmt->fetch() === false) { 
    //access deined 
    //.... 
} 
else { 
    //access granted 
    //... 
} 

Кроме того, в целях безопасности вы должны быть хэширования паролей с sha1 по крайней мере (я SHA512) в базе данных, так что даже если данные будут украдены, пароли не могут быть запрограммированы без каких-либо усилий.

EDIT: Кроме того, может быть полезно использовать пользователя, кроме root, для доступа к базе данных, но это более личное предпочтение.

+0

большое спасибо и легенда! – Tuzki

0

Попробуйте напечатать результат от этой линии:

$result=mysql_query($sql); 

Похоже mysql_query может быть провал, потому что она не прошла link_identifier.