J'ai un problème dans mon application où la fonctionnalité «Modifier mon mot de passe» a réinitialisé le mot de passe de TOUS les utilisateurs à la même valeur. J'ai restauré une sauvegarde, donc pas de problème majeur, mis à part ce bug horrible sans autre faute que la mienne.L'instruction WHERE émet UPDATEing toutes les lignes
Évidemment, cela était dû à la condition WHERE dans l'instruction UPDATE n'ayant aucune valeur. C'était via une requête d'enregistrement active dans CodeIgniter. Pour éviter ce problème il y avait une sauvegarde en place:
if(!is_numeric($userdata['client_id'])) die('could not retrieve user ID from session');
Un typeof($userdata['client_id'])
me dit ceci est une « chaîne » si mon chèque is_numeric aurait bien fonctionné. le tableau $ userdata provient de la session.
Il n'y a aucun utilisateur avec l'ID client 0, ils ont tous une valeur numérique.
Je pensais que cela aurait pu se produire lorsque l'utilisateur accédait à la page "changer le mot de passe", attendant que la session se déconnecte après X minutes et ensuite soumettre le formulaire. Je l'ai essayé moi-même et il me redirige juste à la page de connexion, comme il se doit.
Mon instruction WHERE essaie de faire correspondre $userdata['client_id']
à une valeur client_id_fk. Un ou deux clients de test ont un client_id_fk de NULL - un tel client de test ayant réinitialisé leur mot de passe peut-il avoir causé cela?
Sinon, je suis perplexe. N'importe qui?
Je ne sais pas si et comment client_id aurait pu être NULL mais je suppose que c'est possible grâce à un autre bug. J'ai ajouté un contrôle is_null pour être sûr. Merci. – stef