J'utilise un plugin jagru datagrid pour créer un outil simple pour modifier la table de mon utilisateur dans la zone d'administration d'un site. Je stocke les mots de passe en tant que md5() lorsque l'utilisateur s'enregistre. Chaque fois que j'essaie de mettre à jour la table, elle ressasse le mot de passe, le rendant inutilisable. J'ai essayé plusieurs méthodes de vérification du mot de passe qui est la même que celle de la base de données, mais aucune d'entre elles ne semble fonctionner.Ne correspond pas aux mots de passe md5
Voici mon code de mise à jour:
PHP
<?php
require_once("../class/TimeClock.class.php");
$tc = new TimeClock();
$id = $_POST['id'];
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$active = $_POST['active'];
$role = $_POST['role'];
$emp_id = $_POST['emp_id'];
if($tc->validatePass($id, $password)) {
try {
$tc->connect();
$query = $tc->dbh->prepare("UPDATE us_users SET username=:username,email=:email,active=:active,role=:role,emp_id=:emp_id WHERE id=:id");
$query->execute(array(':username' => $username, ':email' => $email, ':active' => $active, ':role' => $role, ':emp_id' => $emp_id, ':id' => $id));
$tc->close();
} catch (PDOException $e) {
throw new Exception('Something bad happened' . $e->getMessage());
}
} else {
try {
$password = md5($password);
$tc->connect();
$query = $tc->dbh->prepare("UPDATE us_users SET username=:username,password=:password,email=:email,active=:active,role=:role,emp_id=:emp_id WHERE id=:id");
$query->execute(array(':username' => $username, ':password' => $password, ':email' => $email, ':active' => $active, ':role' => $role, ':emp_id' => $emp_id, ':id' => $id));
$tc->close();
} catch (PDOException $e) {
throw new Exception('Something bad happened' . $e->getMessage());
}
}
echo json_encode(array(
'id' => $id,
'username' => $username,
'password' => $password,
'email' => $email,
'active' => $active,
'role' => $role,
'emp_id' => $emp_id
));
?>
Ma fonction validatePasss():
PHP
function validatePass($id, $pass) {
try {
$this->connect();
$result = $this->dbh->prepare("SELECT username, password FROM us_users WHERE id=:id");
$result->execute(array(':id' => $id));
$userObj = $result->fetch(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
throw new Exception('Something bad happened' . $e->getMessage());
die();
}
if($pass == $userObj['password']) {
return true;
} else {
return false;
}
$this->close();
}
Je sais que le code mysql_ est démodées, Cependant, quand j'essaie d'utiliser PDO, il y a des erreurs, je pense que c'est lié au composant ou quelque chose.
Nous vous remercions de votre aide.
EDIT: Changé la fonction de pur AOP, et est ici une image de la grille de sorte que vous voyez que les mots de passe sont stockés sous forme d'un hachage, et, à moins que modifié, doit être transmis au script de mise à jour comme un match à ce qui est dans la base de données.
http://www.bolinconstruction.com/timeclock/datagrid.png
Quelles sont les erreurs? Je ne peux pas fournir beaucoup d'aide si vous ne pouvez pas nous donner un indice. – Brad
Duh, désolé. Le code ne montre jamais que les mots de passe correspondent, et renvoie plutôt le mot de passe md5() à la place, ce qui rend impossible la connexion d'un utilisateur si j'ai modifié les détails. – FireCrakcer37
ne comparez-vous pas le mot de passe en clair à partir d'un formulaire avec md5 stocké en db? –