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 :

Demande de conseils sur Requète UPDATE en POO [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Par défaut Demande de conseils sur Requète UPDATE en POO
    Bonjour à tous

    Par faiblesse, je l'avoue...

    J'ai créer une fonction d'enregistrement d'un objet dans une table.
    Partant du principe que le nom du champ de la table = le nom de l'attribut de l'objet, j' update l'attribut directement dans la table sauf l'Id par sécurité.

    Mon problème ... c'est que je fais autant de requètes qu'il y a de champs mais la fonction est tellement pratique que j'en démords pas
    Pouvez vous me dire s'il cela est viable sur le long terme et si cela ne sollicite pas trop la BDD (Mysql)

    voila la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public function enregistre() {
            $tab = get_object_vars($this);
            foreach ($tab as $key => $value) {
                if($key != 'id') {
                    mysql_query ("UPDATE table SET `$key` = '$value' WHERE `id` = '$this->id'") or die(mysql_error());
                }  
            }
        }

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    Concatène tes valeur avant de les modifier comme ça tu aura qu'une seul requête a exécuter

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Par défaut
    J'y avais pensé mais je suis embêté avec la virgule qui doit séparer les updates. Une idée ?

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    fais pas de or die, déjà c'est or exit, ensuite si y'e une erreur ton code s'arrete avec une belle erreur SQL qui donne des infos a l'utilisateur,
    si tu veux voir les erreur active le mysql.trace_mode en développement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('mysql.trace_mode', true)
    sépare la requête et fais une condition pour savoir si ca a marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sql = "UPDATE table SET `$key` = '$value' WHERE `id` = '$this->id'";
    if(false === mysql_query($sql)
    {
        return mysql_error();
    }
     
    return true;
    protege aussi tes valeurs, avec mysql_real_escape_string.
    et il faut vérifier si les champs existe aussi...

    T'as pas mysqli ou PDO sur ton serveur, sinon il est peu etre temps de passer a des choses plus moderne, l'extension mysql est complètement obsolète :
    http://fr2.php.net/manual/fr/mysqli.overview.php

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $set = 'set ';
    $i = 0;
    foreach($ar_elt as $key => $value)
    {
         $set .=  $key . " = " . $value;
         $i++;
         if($i < count($ar_elt))$set .= ",";
    }
    requete("Update $tab $set where IDCONTRAT=$indice ");

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par m4riachi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $set = 'set ';
    $i = 0;
    foreach($ar_elt as $key => $value)
    {
         $set .=  $key . " = " . $value;
         $i++;
         if($i < count($ar_elt))$set .= ",";
    }
    requete("Update $tab $set where IDCONTRAT=$indice ");
    donc $value n'est pas protégé en en plus n'as pas de guillemets autour (pareil pour les noms de table), le $i c'est ridicule, c'est plus simple d'utiliser de faire un tableau et ensuite avec un implode

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Par défaut
    Merci à tous les deux

    stealth35, tu peux expliquer ta version tableau avec implode ??
    Car la, m4riachi vient de bien m'aider dans la concaténation !

    Concernant la sécurité, les données sont filtrés avant cette fonction (c'est un objet) donc part du principe que $value est déja sécurisé.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/05/2015, 13h09
  2. Réponses: 0
    Dernier message: 05/09/2007, 13h24
  3. demande de conseil sur le modèle entité/association
    Par amandiiiiiine dans le forum Access
    Réponses: 3
    Dernier message: 02/01/2007, 00h34
  4. demande de conseils sur l'utilisation d'index
    Par Ickou dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/03/2006, 12h13
  5. [SGBD] demande de conseil sur script util (FPDF et mysql_insert_id)
    Par mangafan dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/10/2005, 00h57

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