Incrementation

Bonjour,

je me suis fait un petit logiciel de devis factures
je viens d'ajouter une nouvelle fonctionnalité, possibilité d'insérer une ligne entre 2 lignes existantes
l'affichage dans un tableau est fait par le numéro d'ordre de la ligne, donc j'arrive bien a insérer ma ligne, mais pas a modifier le numéro d'ordre des lignes suivantes (+1 sur toutes les lignes apres)

je vous mets mon code :

$req = mysql_query("insert into devis_produits values ('','$nbOrdre1','".$_GET['id_devis']."','','','','','','','','','','','','','','".$_GET['id_sous_total']."')");// j'ajoute la nouvelle ligne et son num d'ordre

$query = mysql_query("SELECT * FROM devis_produits WHERE num_devis=".$_GET['id_devis']);

$nbTotal = mysql_num_rows($query); // récupère le nombre de lignes et donc le numero d'ordre max

for($i = $nbOrdre1; $i < $nbTotal ; $i++){ // incremente i de 1 à chaque boucle

mysql_query("UPDATE ".$prefixe_table."devis_produits SET ordre='$i' WHERE num_devis=".$_GET['id_devis']." between '$nbOrdre1' and '$nbTotal'");

}

merci de vos réponses :)
Configuration: Windows XP
Firefox 3.0.1

13 réponses

  1. personne pour me donner une piste ?

    merci
    0
    1. Juste une petite question ? A quoi correspond ces numéros ?
      Parceque sinon au lieu de les avoir en bdd autant les afficher lors de la récupération des données au moment de la boucle affichage ? ce qui permet une incrémentation très propre.

      Peut être ne suis je pas clair ? :)
      0
      1. les numéros d'ordre servent a l'affichage des lignes du devis, ils sont importants aussi pour le calcul des sous totaux
        0
        1. disons tu as ligne 1,2,3,4,5
          tu ajoutes entre 2 et 3
          tu as donc 1,2,3,3,4,5
          et tu veux obtenir
          1,2,3,4,5,6
          donc for i=4 à 6
          donc je dirais
          for($i = $nbOrdre1+1; $i < $nbTotal +1 ; $i++)
          déjà ais je vais bien lire ta requête sql elle est peut être injuste aussi
          0
          1. tu as bien compris le probleme :)
            j'ai testé ça marche pas, surement la requette oui
            merci de ton aide
            0
            1. Intuitivement je ferais ça :
              lorsque tu as deux ligne 3 difficile de savoir laquelle incrémenter.
              Alors jincrémenterais d'abord en faisant le requete update xxx set ordre = ordre+1 WHERE ordre > $numordre
              ensuite j'insererais ma ligne
              0
              1. je testerai demain suis trop naze pour ce soir lol
                mais si j'update avant d'inserer ma ligne le probleme sera le meme car il y aura tjrs 2 ordres identiques ?
                si j'ai 2 lignes 3 je peux me baser sur l'id de la nouvelle ligne créée par ex, pour savoir laquelle incrémenter ?

                encore merci et bonne nuit ^^
                0
                1. non ca marche car :
                  tu as 1,2,3,4,5
                  qui deviens
                  1,2,4,5,6
                  puis tu insere 3
                  et tu obtiens 1,2,3,4,5,6
                  0
                  1. mais se baser sur l'id fonctionne aussi bonne nuit.
                    0
                    1. j'ai pas pu attendre demain pour tester lol
                      ça marche du tonnerre ^^
                      t'as l'esprit vif pour cette heure bien avancée
                      merci encore
                      0
                      1. peut être parceque l'heure n'est pas si avancée pour moi lol.
                        J'habite au Panama en amérique centrale :)
                        0