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 :

Lecture séquentielle et mise à jour [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut Lecture séquentielle et mise à jour
    Bonjour,
    je me demande comment procéder pour :
    - lire séquentiellement des records selon certains critères,
    - exploiter les données lues
    - mettre à jour les records lus.

    Jusqu'à maintenant j'ai fait mon traitement sans mise à jour.
    Donc un select avec clause WHERE, ORDE BY et LIMIT, suivi d'une boucle
    "mysql_fetch_assoc" faisait très bien l'affaire.

    Faut-il chercher à mettre à jour au fur et à mesure ou plutôt chercher une maj globale. Et quelles commandes exécuter?

  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
    Mettre à jour au fur et à mesure c'est techniquement possible en utilisant Ajax mais ce n'est pas le fonctionnement auquel s'attend un utilisateur.
    Sur le web classiquement, on valide les données saisies : il s'agit juste ensuite pour toi de faire des UPDATE des lignes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut
    Excuse-moi,
    mon manque de précision t'a induit en erreur.
    Le traitement n'est pas interactif. Il s'agit d'impression de factures.

    Donc soit,
    je lis le record avec mysql_fetch_assoc (ou autre chose), j'imprime, je mets à jour le flag "facturé", je lis la suivante etc
    ou
    je lis le record avec mysql_fetch_assoc, j'imprime, je lis la suivante etc puis
    je mets à jour toutes les factures imprimées (en une seule commande si c'est possibe).

    Logiquement les deux sont possible, mais d'un point de vue Mysql, que faire?

  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
    Les deux sont faisables, la différence est surtout dans la logique de l'application : dans le deuxieme cas, rien n'est marqué "facturé" si le traitement est interrompu.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut
    Bien,
    si je veux le faire au fur et à mesure, faut-il relire l'enregistrement?
    Ou j'enchaine avec un $sqlReq = "UPDATE $table ... directement?
    Il me semble que j'avais droit à un warning pour passer un update après un mysql_fetch_assoc

  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
    Tu peux tout a fait placer un UPDATE dans ta boucle pour modifier chaque ligne lu.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Par défaut
    Mon problème venait du fait que je prenais le même nom de requête pour le select que pour l'update et devant le message d'erreur, j'avais l'impression de ne pas être sur le bon chemin.

    Voici mon code définitif (épuré)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $sqlReq = "SELECT * FROM $table  WHERE cdebiNoFac = 0 ORDER BY cdebiDate";
    $sqlResult = mysql_query($sqlReq) or die('Erreur SQL !<br>'.$sqlReq.'<br>'.mysql_error());
     
    while($data = mysql_fetch_assoc($sqlResult)) 
    {
    $cdebiId = $data['cdebiId'];
    $nofac = $nofac + 1;
    $sqlReq2 = "UPDATE $table SET cdebiNofac ='$nofac' WHERE cdebiId = '$cdebiId' ";
    $sqlResult2 = mysql_query($sqlReq2);
    }
    Voilà, je pense que le code est correct

    Merci pour avoir insisté sur la faisabilité.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/08/2007, 16h46
  2. Réponses: 2
    Dernier message: 30/03/2007, 21h11
  3. [PL/Sql]Mise à jour curseur de lecture
    Par lper dans le forum Oracle
    Réponses: 4
    Dernier message: 22/02/2007, 15h29
  4. Mise à jour impossible, objet en lecture seule
    Par Pitou5464 dans le forum Access
    Réponses: 3
    Dernier message: 12/09/2006, 18h26
  5. [TQuery][DBGRID] pb de mise à jour: table en lecture seule
    Par Chrystèle Carré dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/11/2003, 09h36

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