Incrementation
marc
-
olivier -
olivier -
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 :)
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 :)
13 réponses
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 ? :)
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 ? :)
les numéros d'ordre servent a l'affichage des lignes du devis, ils sont importants aussi pour le calcul des sous totaux
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tu as bien compris le probleme :)
j'ai testé ça marche pas, surement la requette oui
merci de ton aide
j'ai testé ça marche pas, surement la requette oui
merci de ton aide
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
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
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 ^^
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 ^^
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
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