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 :

UPDATE en boucle while [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 149
    Par défaut UPDATE en boucle while
    Bonjour,

    Je suis un programmeur VB et j'ai du mal à faire un update en boucle en PHP. Remarque que l'ECHO fonctionne. Alors j'ose croire que mon SELECT est bon et que j'ai du mal à comprendre comment fonctionne le WHILE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $sql = "SELECT * FROM coco where ID =".$_POST['ID'];
     
    $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());   
     
    while ($row = mysql_fetch_array($result)) { 
     
    $row = 'UPDATE coco SET ready = "'.$ok.'"';
    echo $_POST['ID'];
     
    }
    Merci
    Gorj

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    $row = 'UPDATE coco SET ready = "'.$ok.'"';
    1 - ça vient d' où la variable $ok?
    2 - Utilise de simple quote pour entourer les valeurs dans un champ sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row = "UPDATE coco SET ready = '".$ok."'";
    A+.

  3. #3
    Membre éclairé Avatar de Netek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 57
    Par défaut
    Ceci devrait mieux marcher ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql = "SELECT * FROM coco where ID = '".$_POST['ID']."'";
     
    $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());   
     
    while ($row = mysql_fetch_array($result)) { 
     
    $sql2 = "UPDATE coco SET ready = '$ok'";
    $result2 = mysql_query($req2);
    echo $_POST['ID'];
     
    }
    Meme si dans ton script la boucle ne sert a rien ici.
    Il faudrait que tu expliques ce que tu cherches a faire

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 149
    Par défaut
    Salut, ta boucle actuelle tourne autant de fois que le nombre de ligne retournée par la 1er requete.
    Il semble qu'il manque un WHERE sur la requete située dans la boucle, car sinon là, une requete simple sans boucle ferai l'affaire.
    Pense à échapper $_POST['ID'] si tu compte sécuriser un peu ton script.
    Et dit nous en plus

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 149
    Par défaut Bonjour à tous et merci
    En fait, je veux mettre à jour tout les records de ma première requête. Si "ok" = 1, on met 1 dans tout les records, si il = 0, on met zéro dans tout les records. Le seul champ à mettre à jour est le champs "ready", et ça a comme impact de mettre en ligne ou non les lignes 0=pas en ligne, 1= en ligne.

    J'aimerais qu'on m'explique les lignes suivantes pour que je comprenne bien une fois pour toute :0...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ($row = mysql_fetch_array($result)) {//Pourquoi une variable devant?
    $sql2 = "UPDATE coco SET ready = '$ok'"; //Pourquoi une variable devant?
    $result2 = mysql_query($req2); //Pourquoi cette ligne?
    }
    J'essais ça et je reviens... Nextdev, tu dis que si j'ai pas de where, j'ai pas besoin de while pour mettre à jour tout les champs des lignes de ma première requête? Si c'est le cas, c'est que je peux écrire en simultané, un nombre défini de donnée... En VB j'utilise un while ou un for ... Je vois pas comment ça pourait être autrement aec PHP. Mais je suis très curieux.

    Merci encore et j'attend de vos nouvelles.

    Gorj

  6. #6
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonsoir,

    ce que tu chercherais à faire ne serait il tout simplement pas de mettre à jour ta base pour un ID donné ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query('UPDATE coco SET ready = '.$ok.' WHERE id='.intval($_POST['ID']));

    EDIT: les variables n'ont d'utilité que lorsqu'elles sont utilisées ou exploitées. Si tu n'en as pas l'utilité dans le script, n'en mets pas

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 149
    Par défaut
    J'ai dit ça parce que actuellement, ta boucle effectue n fois la meme requete

    Je pense que tu crois que ton UPDATE va seulement s 'attaquer aux lignes trouvées dans le SELECT, alors que non.

    Il va falloir dire à l'update sur quels lignes agir, actuellement ta requete modifie tous les "ready" de ta table, en 0 ou 1, selon le résultat de $ok.

    Tu va donc avoir besoin d'un WHERE pour cibler les bonnes lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $sql = 'SELECT record, bidule, machin FROM coco WHERE ID="'.$_POST['ID'].'"';
    $result = mysql_query($sql);   
     
    while ($row = mysql_fetch_array($result)) {//$row égale chaque ligne, une après l'autre, présente dans la requete $result
    $sql2 = "UPDATE coco SET ready = '$ok'";//pas obligatoire, pourrai etre directement mysql_query("UPDATE coco SET ready = '$ok'");
    $result2 = mysql_query($req2);//execution de la requete
    echo $row['record'];//écrire la valeur record de cette ligne
    echo $row['bidule'];//valeur bidule de cette ligne... tout ca grace à mysql_fetch_array qui te cree un tableau des valeurs pour chaque ligne
    }
    Madfrix a surement sorti ce que tu cherche à faire

  8. #8
    Membre éclairé Avatar de Netek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2011
    Messages : 57
    Par défaut
    Désolé j'avais fait une petite erreur, ca a pas du t'aider a comprendre ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql2 = "UPDATE coco SET ready = '$ok'";
    $result2 = mysql_query($req2);
    mais plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql2 = "UPDATE coco SET ready = '$ok'";
    $result2 = mysql_query($sql2);
    en gros ca revient a écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result2 = mysql_query("UPDATE coco SET ready = '$ok'");
    Mais bon tout ceci c'est vraiment les bases de mysql.
    Je t'invite a lire quelques tutos pour debuter avec mysql

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 149
    Par défaut
    Bien vu
    Il y a l'erreur dans mon message aussi

    gorjette est repassé au VB

  10. #10
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 149
    Par défaut
    Re-Bonjour

    Ici je met TOUT les champs ready de la table coco à valeur = $okays
    Pourtant dans ma première requête je sélectionne seulement les ID=IDee.!?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //seulement les enregistrement ou ID=IDee
    $sql = 'SELECT * FROM coco WHERE ID="'.$_POST['IDee'].'"';
    $result = mysql_query($sql); 
    //Update TOUT les enregistrements de la table.!?
    while ($row = mysql_fetch_array($result)) {
    //Ici, dans le UPDATE, faut-il que je repasse le WHERE?
    //Pas logique puisque j'ai déjà fait le WHERE plus haut.!?
    $row = 'UPDATE coco SET ready = "$okays"';
    $result2 = mysql_query($row);
    }

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut
    Bonjour gorjette,

    Il y a bcp d'incohérences dans ce tu veux et ce que tu nous montres. Pour mieux comprendre ce que tu cherches peux nous donner la structure de la table et d'autres informations si tu en as omis.
    Merci

    Cdlt.

  12. #12
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 149
    Par défaut
    Citation Envoyé par cycyand1 Voir le message
    Bonjour gorjette,

    Il y a bcp d'incohérences dans ce tu veux et ce que tu nous montres. Pour mieux comprendre ce que tu cherches peux nous donner la structure de la table et d'autres informations si tu en as omis.
    Merci

    Cdlt.
    Comment on fait pour avoir plus de points? Cela fait depuis 2007 que vous existez sur ce site, et toujours pas plus de 21 points, et membre à l'essais.!?

    Merci
    Gorj

  13. #13
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 149
    Par défaut Question.!?
    Ceci va mettre à jour la table coco (chanps "ready") à tout les enregistrements où le id = à mon post? Je veux dire, sans aucun WHILE?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    mysql_query('UPDATE coco SET ready = '.$ok.' WHERE id='.intval($_POST['ID']));

  14. #14
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut
    Bonjour gorjette,

    Comment on fait pour avoir plus de points? Cela fait depuis 2007 que vous existez sur ce site, et toujours pas plus de 21 points, et membre à l'essais.!?

    Merci
    Gorj
    Je ne vois pas où est le rapport avec le post initial et si tu te fis à cela alors ne tient pas compte de mon post.

    Cdlt.

  15. #15
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 149
    Par défaut
    Citation Envoyé par cycyand1 Voir le message
    Bonjour gorjette,



    Je ne vois pas où est le rapport avec le post initial et si tu te fis à cela alors ne tient pas compte de mon post.

    Cdlt.
    Ha, je suis désolé, je voulais seulement connaitre la façon exacte d'accumuler des points. Je ne voulais pas offencer. Désolé.

  16. #16
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut
    gorjette

    On sait vraiment mal compris alors . C'est vraiment que je me suis inscrit il y a longtemps, je ne m'en souvenais plus et j'ai retrouvé mon compte que depuis peu. Parenthèse historique.

    Pour les points, je ne sais pas, demandes a un modérateur.


    Sinon ton pb est résolu ?

  17. #17
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 149
    Par défaut
    Citation Envoyé par gorjette Voir le message
    Ceci va mettre à jour la table coco (chanps "ready") à tout les enregistrements où le id = à mon post? Je veux dire, sans aucun WHILE?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    mysql_query('UPDATE coco SET ready = '.$ok.' WHERE id='.intval($_POST['ID']));
    Oui, relis bien ton topic, il y a les réponses.
    Oui, il faut remettre le where pour la 2eme requete, qui n'a rien a voir avec le 1er select. Ton select sert surement a rien pour ce que tu veux faire.


    Et pour les points, c'est notamment grace aux autres membres qui peuvent te noter.

  18. #18
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 149
    Par défaut
    Alors: J'ai testé, et quand je fais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query('UPDATE coco SET ready = '.$ok.' WHERE id='.intval($_POST['ID']));
    je met à jour TOUT les champs de la table COCO, où le id = au POST. J'ai pas besoin de WHILE. Le truc est que la ligne SNAP tout les enregistrement où le id = POST et les met à jour coté dorsal. Génial ça..!

    En VB, j'aurais fais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dim rs as recordset
    //remarquez qu'il peut y avoir plusieurs id du même number (ce n'est pas une primaire)
    set rs = currentdb.openrecordset("select * from coco where id = "& POST &"")
       do while not rs.eof
       rs.edit
       rs("ready") = okays
       rs.update
       rs.movenext
       loop
    rs.close
    Ce qui est moins génial puisque j'utilise un pointeur sur tout les enregistrement, et ce, après ma première requête. Mais ce que j'ai testé et qui marche avec plus d'un enregistrement en PHP ici, c'est un seul snapshot de la table, et op, le tour est joué.

    Très intéressant!

    Merci
    Gorj

  19. #19
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 149
    Par défaut
    J'étais pas logué. J'avais pas le formulaire pour m'identifier(et javais pas coché "se souvenir de moi!"). Je ne peux donc pas dire que cett discution est résolu... On me suit?

  20. #20
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 149
    Par défaut
    La différence VB s'explique surement à cause du SELECT utilisé aulieu du UPDATE.
    Tu dois bien pouvoir faire un UPDATE, meme sous ton VB, qui semble aller voir dans une vrai BDD qui devrait reconnaitre la commande UPDATE.
    Essaye voir, et ça devrait t'éviter la boucle en VB aussi

    J'ai pas tout suivi pour l'histoire du formulaire, je sais pas comment ça marche pour résolut

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

Discussions similaires

  1. Boucle WHILE FOUND et UPDATE
    Par Acivurt dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 07/03/2008, 01h03
  2. [MySQL] Probleme UPDATE avec boucle WHILE
    Par iverson_mac dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/06/2007, 17h07
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

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