IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Vérifier que l'enregistrement existe avant de l'exploiter [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut Vérifier que l'enregistrement existe avant de l'exploiter
    Bonjour,

    voilà l'idée :

    le fichier liste.php reçoit une requête en méthode $_GET :
    liste.php?id=5

    Ok si cet enregistrement existe, si l'utilisateur n'a pas réécrit manuellement l'url, par exemple.

    Dans le cas contraire, les requêtes SELECT, DELETE et UPDATE vont générer des erreurs.

    Existe-t-il une procédure unique sous PDO qui permet de traiter les enregistrements seulement s'ils existent ou de réorienter s'ils n'existent pas ?

    Pour le moment, je fais cela en 2 fois :
    1- je vérifie si l'enregistrement existe
    2- je traite la requête

    Mais c'est un peu fastidieux, surtout à maintenir sur le long terme.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    En fait aucune des tres requetes ne va générer d'erreur :
    - si tu fais un SELECT ... WHERE id = id_bidon, tu n'auras simplement pas d'enregistrement ; tu as juste a verifier que tu as bien recolté quelque chose avant de te lancer dans un affichage.
    - si tu fais un DELETE ou un UPDATE sur une ligne qui n'existe pas, il n'y aura simplement rien de fait.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Citation Envoyé par sabotage Voir le message
    tu as juste a verifier que tu as bien recolté quelque chose avant de te lancer dans un affichage
    Voilà ma problématique bien résumée.

    1. je vérifie si un enregistrement existe :
    SELECT id where id = '$_GET[id]'
    -> je verifie si id > 0, par exemple

    2a. si la condition d'existence est vérifiée, je lance une nouvelle requête avec mes SELECT ou UPDATE ou DELETE

    2b. si la condition ne se vérifie pas, je déleste

    Sur le papier, ça marche.
    C'est juste un peu lourd.

    Ayant auparavant utilisé la classe EzSql, j'ai le souvenir d'une procédure qui traitait ces conditions en 2 lignes...
    Dommage que PDO ne fasse pas cela de manière "native" !

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je me repête mais tu n'as pas besoin de tester l'existence d'un id avant de faire un DELETE ou un UPDATE.
    De même, avec un SELECT et l'ecriture classique while/fetch, si la requete n'a rien retourné, il n'y aura simplement rien d'affiché.

    En résumé, dans les 3 cas, si quelqu'un passe un faux id, il ne se passera simplement rien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Ok, j'ai bien compris pour la sécurité. C'est rassurant.
    En revanche l'affichage de pages bien préparées à accueillir des infos et qui restent vide n'est pas du meilleur effet.

    Tu me diras "tant pis pour celui qui réécrit les url".
    Mais alors comment gérer les pointages à partir de clients de messageries ou webmail qui tronquent certaines urls un peu longues par des renvois à la ligne malencontreux ?

    J'ai quand même l'impression que PDO ne prévoit pas de système de délestage en natif, d'après ce que tu me dis.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu veux mettre un message personnalisé plutôt que rien, tu peux utiliser rowCount() (qui fonctionne avec SELECT aussi chez mysql).

    Mais quand tu parles de "delestage" ou de "reorientation" je ne vois pas a quoi tu fais reference.
    Que ton id soit intentionnellement modifié ou tronqué par accident, rien ne permettra de dire ce qu'il aurait du être.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Citation Envoyé par sabotage Voir le message
    "delestage" ou de "reorientation"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		if ($id =='')
    				{
    					header("Location: index.htm"); exit; 
    				}

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu veux mettre un message personnalisé plutôt que rien, tu peux utiliser rowCount() (qui fonctionne avec SELECT aussi chez mysql).
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Merci pour ta réactivité, sabotage.
    Bonnes fêtes de fin d'année.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérifier si un enregistrement existe dans une table
    Par developpeur_débutant dans le forum PL/SQL
    Réponses: 4
    Dernier message: 08/06/2010, 12h05
  2. Upload : vérifier que le fichier existe déjà
    Par kOrt3x dans le forum Langage
    Réponses: 4
    Dernier message: 16/06/2009, 17h33
  3. [MySQL] Vérifier si un enregistrement existe
    Par mrsoyer dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/05/2008, 15h09
  4. Vérifier que un fichier existe
    Par Wolfgang31 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/08/2007, 09h14
  5. [SQL] Vérifier si un enregistrement existe
    Par Mamath76 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/08/2007, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo