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 d'un champ en fonction de l'ID


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut update d'un champ en fonction de l'ID
    Bonjour,

    Je fais mes premiers pas en PHP/Mysql, et j'aurai besoin d'un coup de pouce.

    J'ai créer un formulaire qui me relève mes infos de ma base.
    J'ai dans ce formulaire, un checkbox qui me permet de 'Valider' certaines lignes!

    j'arrive bien à relever les infos "cheker", mais j'aimerai que celle-ci me rajoute dans la base, cette info relevée " le ID"!

    Je ne sais pas si je suis très clair...

    Est ce que je peux faire quelque chose du genre:

    "UPDATE mabase (monid) VALUE (mavaleur)"

    Je cherche le principe des messagerie, ou on sélectionne à l'aide d'une checkbox le message que l'on veux marquer comme lu.

    Je vous remercie d'avance.

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Citation Envoyé par novasurf74 Voir le message
    Je ne sais pas si je suis très clair...
    Justement pas trop là.
    Citation Envoyé par novasurf74 Voir le message
    Est ce que je peux faire quelque chose du genre:

    "UPDATE mabase (monid) VALUE (mavaleur)"

    Je cherche le principe des messagerie, ou on sélectionne à l'aide d'une checkbox le message que l'on veux marquer comme lu.
    Si ce que tu cherches à faire, c'est mettre à jour une colonne `lu` dans une table `messages` de ta base de données, ça devrait plutôt faire qqe chose comme ça
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE messages SET lu='OUI' WHERE id=monid

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    Bon, toutes mes excuse!!! Pour mon explication.

    C'est pour cela que j'ai pris l'exemple de la messagerie.

    En attendant, merci. je vais travailler sur cette idée.

    Merci.

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par novasurf74 Voir le message
    Bon, toutes mes excuse!!! Pour mon explication.
    Y-a pas de lézard !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    J'ai adapter, je test, mais j'ai un message du type: No database selected.

    Voici ce que j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "UPDATE travaux SET fait='oui' WHERE id=".$value."";
    Ma base, c'est travaux;
    Mon champ, c'est fait.

    j'ai vérifié sur le net et cela semble bon!!!
    Ai-je mal fais ma requête???

    Merci

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Tu confonds 2 notions :
    database : base de données : ensemble de tables qui, selon la description de leur structure, regroupent des données similaires.
    Donc je ne connais pas le nom de ta base de données qui contient ta table travaux laquelle semble avoir une colonne fait et un colonne id.
    Donc il faut utiliser mysql_select_db(nom de la base) après mysql_connect() et avant mysql_query().
    Ou, mieux encore si tu es en PHP 5.xx, utilise PDO.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    Je suis sous PHP.
    Et j'ai utilisé tout ce que tu me propose:
    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
     
    // Connexion au serveur mysql
    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME,
    DB_SERVER_PASSWORD)
    or die('<font color=red>Désolé mais vous ne pouvez voir les infos de la data-base</font>');
    mysql_select_db('travaux',$connect);
    foreach ($val_id as $value){
    print "$value";
     
    //$sql = "INSERT INTO travaux ('',fait) VALUES ('','$value')";
    $sql = "UPDATE travaux SET fait='oui' WHERE id=".$value."";
    //echo $sql;
    $req= mysql_query($sql);
    }
    if ($req) {
    echo $msg_ok;
    // si mysql a retourné une erreur
    } else if (!$req) {
    echo mysql_error();
    }
    De plus j'utilise déjà dans une autre page, le même principe, sauf que ma requête est un INSERT, et cela fonctionne.

    Je m'excuse de la question bête, mais que veux-tu dire par "PDO"?

    Merci

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    Ok, je viens de corriger mon soucis! j'ai rajouter, le nom de ma base, devant le nom de ma table.

    Merci.

    J'ai chercher aussi pour PDO, comme je début, y aurait-il un site, simple et efficace qui m'expique cette fonction? Et puis-je la metttre en place chez mon hébergeur?

    Merci.

  9. #9
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    PDO, tout d'abord : http://php.developpez.com/cours/?page=bibliotheques#pdo
    Donc tu as une table travaux dans une base de données travaux, c'est cela ?

    Et d'où proviens cet array $val_id que tu parcours avec un foreach ?

    D'autre part, ton traitement avec INSERT puis UPDATE ne me semble vraiment pas cohérent.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    Merci pour le lien, je vais aller voir cela!

    Non, j'ai une table: travaux, avec une base cm......

    Pour ce qui est du val_id, et du foreach, c'est ce que j'ai trouve sur le net, et j'ai essayé de construire avec des infos...

    Pour ce qui est du INSERT; je l'utilise dans une autre page, qui me sert à inserer des infos relevées par un formulaire.

    Mais comme je ne mets que des bouts de mon code, il est clair, que c'est peut-être pas très clair...

    Si tu veux, je peux te faire suivre d'autres infos!!!

    En tout cas encore merci.

    Mais c'est sure que ce n'est pas vraiment propre comme code!!!

  11. #11
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par novasurf74 Voir le message
    Non, j'ai une table: travaux, avec une base cm......
    Alors pourquoi ça ?
    Citation Envoyé par novasurf74 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_select_db('travaux',$connect);
    Citation Envoyé par novasurf74 Voir le message
    Pour ce qui est du val_id, et du foreach, c'est ce que j'ai trouve sur le net, et j'ai essayé de construire avec des infos...

    Pour ce qui est du INSERT; je l'utilise dans une autre page, qui me sert à inserer des infos relevées par un formulaire.

    Mais comme je ne mets que des bouts de mon code, il est clair, que c'est peut-être pas très clair...

    Si tu veux, je peux te faire suivre d'autres infos!!!
    Ce qu'il faudrait c'est que tu exposes clairement à quel résultat tu veux arriver en partant d'exemples concrets.
    Quant au copier-coller du web sans plus réfléchir, ben, tu vois le résultat ....

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    Toutes mes excuses pour cette construction "Mauvaise", j'essaie juste de me mettre à php/mysql, donc je fais avec les infos que je peux trouver!!!
    Mea-culpa!!!

    Donc, mon travail:

    un formulaire qui me sert à relever des infos concernant des travaux, ensuite, je le valide et j'enregistre tout cela dans ma base "cm......", table"travaux".
    Ensuite, pour voir les demandes de travaux, j'ai créé une page qui me liste toutes les demandes. Dans cette page, j'ai des "checkbox" devant chaque demandes pour selectionner et valider celle qui sont faites. Je ne les supprime pas de ma table, je veux juste les marquer comme "fait".

    Suis-je assez clair?

  13. #13
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par novasurf74 Voir le message
    Donc, mon travail:

    un formulaire qui me sert à relever des infos concernant des travaux, ensuite, je le valide et j'enregistre tout cela dans ma base "cm......", table"travaux".
    Ensuite, pour voir les demandes de travaux, j'ai créé une page qui me liste toutes les demandes. Dans cette page, j'ai des "checkbox" devant chaque demandes pour selectionner et valider celle qui sont faites. Je ne les supprime pas de ma table, je veux juste les marquer comme "fait".
    Ce sont donc ces checkbox que tu retrouves dans ton array $val_id.
    Alors pourquoi faire une commande INSERT s'il sont déjà dans la table travaux, un UPDATE de la colonne `fait`à OUI suffit.
    Et tu peux te contenter d'une seule requête en supprimant to foreach, et en remplaçant WHERE id=$values par un WHERE id IN(".implode(',',$val_id).")"

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    Pardon, je viens de comprendre une chose!!!

    la ligne, //.....= insert...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //$sql = "INSERT INTO travaux ('',fait) VALUES ('','$value')";
    $sql = "UPDATE `cm265742`.`travaux` SET fait='oui' WHERE id=".$value."";
    :

    Elle ne sert à rien, je vais la supprimer!!! TOUTES mes excuse, je l'avais conservé pour faire des essaies, comme cela je la dé commentai.

    Oui, ce sont les checkbox.

    Je peux te mettre le code de la page qui me sert à relever les travaux si tu veux mieux comprendre le FOREACH. Car c'est la methode que j'ai trouvé.

  15. #15
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par novasurf74 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "UPDATE `cm265742`.`travaux` SET fait='oui' 
          WHERE id=IN(".implode(',',$val_id).")";
    et tu n'a plus besoin du foreach.
    Porquoi faire n requêtes UPDATE alors qu'une seule peut faire tout le travail ?

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    Bon, j'ai fais le grand ménage dans code.

    Le voici:
    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
    24
    25
    26
    27
    <?php include('connect.inc.php'); 
    ?>
    <?php
    //les messages:
    $msg_ok = "Votre demande a bien été prise en compte.";
     
    // on commence par déclarer ce qui va se passe si jamais on valide des fiches
    if(isset($_POST["update"]))
    {
    // on déclare les variables
    $val_id = $_POST["update"];
    // Connexion au serveur mysql
    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME,
    DB_SERVER_PASSWORD)
    or die('<font color=red>Désolé mais vous ne pouvez voir les infos de la data-base</font>');
    mysql_select_db('travaux',$connect);
    $sql = "UPDATE `cm265742`.`travaux` SET fait='oui' WHERE id=IN(".implode(',',$val_id).")";
    $req= mysql_query($sql);
    }
    if ($req) {
    echo $msg_ok;
    // si mysql a retourné une erreur
    } else if (!$req) {
    echo mysql_error();
    }
    mysql_close();
    ?>
    Mon soucis, c'est ce beau message d'erreur:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN(3)' at line 1

    j'en ai trop enlever, ou il y a une configue, ou autre chose que je ne metrise pas?

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    j'ai trouvé cela sur le forum, c'est pour un DELETE, mais je peux peut etre l'adapter?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ('DELETE FROM collaborateur WHERE id IN (' . implode(",", $_POST['supprime']) . ')');
    et mettre:
    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
    24
    25
    <?php include('connect.inc.php'); 
    ?>
    <?php
    //les messages:
    $msg_ok = "Votre demande a bien été prise en compte.";
     
    // on commence par déclarer ce qui va se passe si jamais on valide des fiches
    if(isset($_POST["update"]))
    {
    // Connexion au serveur mysql
    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME,
    DB_SERVER_PASSWORD)
    or die('<font color=red>Désolé mais vous ne pouvez voir les infos de la data-base</font>');
    mysql_select_db('travaux',$connect);
    $sql = "UPDATE `cm265742`.`travaux` SET fait='oui' WHERE id=IN(".implode(',',$_POST["update"]).")";
    $req= mysql_query($sql);
    }
    if ($req) {
    echo $msg_ok;
    // si mysql a retourné une erreur
    } else if (!$req) {
    echo mysql_error();
    }
    mysql_close();
    ?>
    Est ce que cela pourrait etre juste?

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    Bon, je viens de trouver pour le message d'erreur!
    Il ne faut pas de = entre ID et IN!!!
    Ce qui donne et qui fonctionne à prioris:
    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
    24
    25
    26
     
    <?php include('connect.inc.php'); 
    ?>
    <?php
    //les messages:
    $msg_ok = "Votre demande a bien été prise en compte.";
     
    // on commence par déclarer ce qui va se passe si jamais on valide des fiches
    if(isset($_POST["update"]))
    {
    // Connexion au serveur mysql
    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME,
    DB_SERVER_PASSWORD)
    or die('<font color=red>Désolé mais vous ne pouvez voir les infos de la data-base</font>');
    mysql_select_db('travaux',$connect);
    $sql = "UPDATE `cm265742`.`travaux` SET fait='oui' WHERE id IN(".implode(',',$_POST["update"]).")";
    $req= mysql_query($sql);
    }
    if ($req) {
    echo $msg_ok;
    // si mysql a retourné une erreur
    } else if (!$req) {
    echo mysql_error();
    }
    mysql_close();
    ?>
    Est ce que j'ai juste???

  19. #19
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Excuse-moi, j'étais pris par ailleurs et oui ce = est un résidu de copier-coller.
    Ce qui me pose question c'est ton implode(',',$_POST["update"])
    Pour deux raisons :
    Es-tu sûr qu'il s'agira toujours d'un array ?
    Es-tu sûr de ne pas générer une faille de sécurité pour injection SQL ?

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2009
    Messages : 40
    Points : 14
    Points
    14
    Par défaut
    Oulala!!! Pleins de question auxquelles, je ne pourrai te répondre vu que je ne mis connais pas ... Toutes mes excuses!!!

    En tout cas, je viens de peaufiner, et nettoyer mes codes en php; j'obtiens le résultat escompté!!!

    Après, je ne sais pas si c'est la bonne manière de le faire... Je m'excuse de mon ignorance!

    Chose très intéressante, et que je ne maitrise pas, c'est la logique de programmation...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/12/2010, 00h00
  2. update d une table en fonction de champs texte
    Par saphi dans le forum Langage
    Réponses: 6
    Dernier message: 03/11/2009, 14h57
  3. Updater un champ en fonction de divers critères.
    Par SANY56 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/12/2008, 15h26
  4. update d'un champ en fonction des valeurs des autres
    Par jamesleouf dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 03/06/2008, 11h51
  5. Update d'une table en fonction des champs d'une autre table
    Par The Molo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/02/2008, 15h41

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