Incrementation

Fermé
marc - 9 sept. 2008 à 21:00
 olivier - 10 sept. 2008 à 01:53
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 :)

13 réponses

personne pour me donner une piste ?

merci
0
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
les numéros d'ordre servent a l'affichage des lignes du devis, ils sont importants aussi pour le calcul des sous totaux
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sauf erreur de ma part
0
tu as bien compris le probleme :)
j'ai testé ça marche pas, surement la requette oui
merci de ton aide
0
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
>= et non >
0
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
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
mais se baser sur l'id fonctionne aussi bonne nuit.
0
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
peut être parceque l'heure n'est pas si avancée pour moi lol.
J'habite au Panama en amérique centrale :)
0