Bonjour,
Pour mettre à jour les lignes d'une facture, j'efface les lignes de la facture dans la table detailFacture (DELETE), j'insère les nouvelles lignes dans la table (INSERT), et enfin je rafraîchis mes données à l'écran avec un SELECT.
Ces 3 requêtes sont envoyées l'une après l'autre en php.
Le problème est que la requête SELECT, bien qu'appelée en dernier, est exécutée alors que DELETE et INSERT n'ont pas encore fait leur boulot dans la table.
SELECT me renvoie donc les anciennes données.
Si je refais un SELECT quelques secondes plus tard, les nouvelles données sont bien lues, preuve que DELETE et INSERT ont fait leur boulot, mais trop tard.
Quelqu'un a une idée sur cette chose étrange ?

Merci,
Thierry.

9 réponses


thierrysudfr
Auteur
Réponse acceptée

Me revoilà, après de nombreux tests, le problème ne venait finalement pas de là.
Les requêtes sont bien exécutées dans l'ordre, avec ou sans contrôle.
Tout ça m'aura quand même permis de débugger mon code.
Merci à tous de votre participation.
Thierry.

Tu peux nous montrer le code PHP ?

Pourquoi faire un delete puis un insert et pas un update?

A mon avis, notre ami fait les requêtes les unes à la suite des autres, sans aucun contrôle.

Il faudrait donc organiser les requêtes pour effectuer les requêtes dans l'ordre.

genre :

if(mysql_query(DELETE)
{
    if(mysql_query(INSERT){
        if(mysql_query(SELECT){
            // on sélectionne et on affiche les données.
        }
    }
}

@Gregory : Je pense que dans ce cas, on supprime des éléments pour en insérer d'autres à la place ;)

Merci pour vos réponses, ta remarque est pertinente vash, je vais regarder ça de près dès ce soir. Ceci dit, je pensais que mysql gérait nativement l'ordre d'arrivée des requêtes, c'est quand même étonnant.
Gregory, vash t'a répondu en partie, imagine une facture comprenant 4 lignes, j'en supprime une, j'en rajoute 2, je change l'ordre, et je modifie une des lignes.. le plus simple est effectivement de tout effacer de la table, puis de tout réécrire au moment de l'enregistrement de la facture.

Je reviens demain pour valider (ou non) la solution proposée par vash.
bonne après-midi à tous.

Alors ?? des news ??? :)

Au pire, si j'ai bien compris tu veut faire une MAJ ? Pour n'utilise tu pas alors un 'UPDATE' ? Dans ce cas la, sa supprimerais les anciennes données et ajouterais les nouvelles à la place. Ce n'est pas plus simple comme sa ? :p

Par exemple :
Traitement :

<?php
    // On se connecte à la base de données
    $DB = new PDO('mysql:host=localhost;dbname=MaBase','MonUser','MonPassword');
    // On met à jours notre table
    $DB->query('UPDATE MaTable SET MonTruc=Truc');
    // On sélectionne notre table à afficher
    $req = $DB->query('SELECT * FROM MaTable WHERE MonTruc=Truc');
    $D = $req->fetch(PDO::FETCH_ASSOC); 
    ?>

Affichage :

// On affiche notre 'truc' (<?= ?> == <?php echo ?>)
    <?= $D'MonTruc']; ?>

Après c'est sous PDO (que je te recommande par ailleurs, MySql est un peu dépassez maintenant :p) :)

En espérant avoir aidez, après je ne suis pas trop sur de la syntaxe, ceci n'est qu'un exemple :)

Florian.

Bonsoir à tous,
Vash, je teste ce soir, pas eu le temps depuis.
Florian, merci pour votre réponse, mais j'ai déjà répondu à cette question à Grégory (voir un peu plus haut).
J'utilise bien entendu MySql via PDO.
les news, Vash, c'est pour ce soir !

Thierry.