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

Requêtes MySQL Discussion :

update sur plusieurs champs ?


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut update sur plusieurs champs ?
    bonjour,
    je souhaite effectuer une requete d'update sur plusieurs champs en meme temps.
    en fait, j'ai un fomulaire html qui est recupéré par un script php
    mais je ne sais pas quelle syntaxe je dois prendre pour mettre à jour un lot de valeurs du formulaire
    ou bien mieux: ne mettre à jour que si la valeur differe de la valeur precedente.
    merci pour toute aide !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST["submit"]) && ($_POST['val_form']!=$sql_result["req"]))
    {
    mysql_query("UPDATE  `tarifs` SET  `prix` =  '10.00' WHERE tarifs.type_chambre='single'  ");
     
    }

  2. #2
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    mais j'ai consulté ceci: http://sql.developpez.com/sqlaz/dml/#L3.4
    mais ca n'est pas ce que je souhaite faire: au lieu de màj plusieurs colonnes, je souhaiterais plutot mettre à jour une seule colonne mais pour toutes les entités untel de la table.

  3. #3
    Membre régulier Avatar de harlock59
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 261
    Points : 107
    Points
    107
    Par défaut
    voilà; j'ai un peu avancé, mais ill me reste des erreurs:
    mes affichages echo n'affichent rien lors du submit.
    mon code est un peu "lourd", j'aurais espéré l'optimiser mais pour l'instant, j'ai choisi la facon la plus simple de traiter le sujet.
    seulement les valeurs ne se mettent pas a jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    if (isset($_POST['submit']))
    {
    echo $_POST['submit'];
    echo $_POST['nouv-tarif-single'];
     
    mysql_query("UPDATE  `tarifs` SET  `prix` =  ".$_POST['nouv-tarif-single']." WHERE tarifs.type_chambre='single' ");
     
    mysql_query("UPDATE  `tarifs` SET  `prix` =  ".$_POST['nouv-tarif-double']."  WHERE tarifs.type_chambre='double' ");
     
    mysql_query("UPDATE  `tarifs` SET  `prix` =  ".$_POST['nouv-tarif-twin']."  WHERE tarifs.type_chambre='twin' ");
     
    mysql_query("UPDATE  `tarifs` SET  `prix` =  ".$_POST['nouv-tarif-triple']."  WHERE tarifs.type_chambre='triple' ");
     
    mysql_query("UPDATE  `tarifs` SET  `prix` =  ".$_POST['nouv-tarif-quadr']."  WHERE tarifs.type_chambre='quadruple' ");
     
    mysql_query("UPDATE  `tarifs` SET  `prix` =  ".$_POST['nouv-tarif-suite']."  WHERE tarifs.type_chambre='suite' ");
     
    mysql_query("UPDATE  `tarifs` SET  `prix` =  ".$_POST['nouv-tarif-petit-dej']."  WHERE tarifs.type_chambre='pet-dej' ");
     
    mysql_query("UPDATE  `tarifs` SET  `prix` =  ".$_POST['nouv-tarif-lit-suppl']."  WHERE tarifs.type_chambre='lit-suppl' ");
     
    mysql_query("UPDATE  `tarifs` SET  `prix` =  ".$_POST['nouv-tarif-tax-sej']."  WHERE tarifs.type_chambre='tax-sej' "); 
    }

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    tu crées une table (éventuellement temporaire) contenant les infos de mise à jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TEMPORARY TABLE maj (type_chambre varchar(50), prix DEC) ;
     
    INSERT INTO maj (type_chambre, prix)
    VALUES ('single', $_POST[nouv-tarif-single]),
      ('double', $_POST[nouv-tarif-double]),
      ('triple', $_POST[nouv-tarif-triple])
    ... ;
    Tu peux ensuite faire les màj en une seule requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE tarif T
      INNER JOIN maj ON T.type_chambre = maj.type_chambre
    SET T.prix = maj.prix

  5. #5
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Je suis totalement hors-sujet, mais j'attire ton intention sur une faille de sécurité dans votre code. Votre code peut subir une attaque par injection SQL.

    Vous écrivez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql_query("UPDATE  `tarifs` SET  `prix` =  ".$_POST['nouv-tarif-twin']
                ."  WHERE tarifs.type_chambre='twin' ");
    Tout va bien si $_POST['nouv-tarif-twin'] est un nombre, mais si qqn modifie les headers de son navigateurs, il pourrait donner
    à $POST['nouv-tarif-twin'] la valeur 0#. Le dièse dirait que le reste serait en commentaire.

    Donc la requête deviendrait catastrophique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE  `tarifs` SET  `prix` = 0

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

Discussions similaires

  1. [AC-2003] update sur plusieurs champs avec 2 tables
    Par C02226 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/10/2012, 22h16
  2. Insert/Update sur plusieurs champs
    Par steph_p dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 03/05/2010, 11h54
  3. problème update sur plusieurs champs
    Par samspitz dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/10/2009, 16h39
  4. [AC-2007] Update sur un champ à plusieurs valeurs
    Par mike1310 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/04/2009, 15h02
  5. Trigger UPDATED sur plusieurs champs
    Par Maroxye dans le forum Développement
    Réponses: 4
    Dernier message: 03/04/2007, 14h08

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