2012-05-31 4 views
0

Ci-dessous est mon "Login Checker" Cela fonctionne très bien si j'utilise l'ancienne connexion mysql traditionnelle .. mais avec PDO il ne semble pas fonctionner .. l'esprit si quelqu'un me donne quelques conseils ou modifications à ce code pour que ça marche?Connexion Validator Checker PHP MYSQL

Il me donne cette erreur:

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

où la ligne 23 est $ count = mysql_num_rows ($ result); Merci!

<?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(); 
?> 

Répondre

2

Il ne ressemble pas à vous en tirant pleinement parti des PDOs et en utilisant les statments paramétrées.

Si c'était moi je l'aurais écrit votre code comme suit:

$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 
    //... 
} 

En outre, pour des raisons de sécurité, vous devriez Hashage vos mots de passe avec SHA1 au moins (je SHA512) dans votre base de données afin Même si vous volez des données, les mots de passe ne peuvent pas être modifiés à rebours sans beaucoup d'effort.

EDIT: En regardant à nouveau, il peut également être bon d'utiliser un utilisateur autre que root pour accéder à la base de données, mais c'est plus une préférence personnelle.

+0

merci beaucoup vous êtes une légende! – Tuzki

0

Essayez d'imprimer le résultat de cette ligne:

$result=mysql_query($sql); 

On dirait que mysql_query pourrait être à défaut, car il n'est pas passé un link_identifier.