Page 1 sur 2

incrementation d'un champs

Posté : 15 juil. 2005, 11:17
par ruly
bonjour,

encore et tjrs des ptits soucy avec php :wink:

voici mon probleme si vous pouviez m'aider ca serrait super gentil car la je block depuis hier et je sais plus koi faire de nouvo

voici le probleme

je dois inserer dans ma base de donnees des produits. ces produits ont un id propre a la base et un autre id qui est du style : IT-num ou num est la valeur la plus grande trouvee dans la table+1.

mon probleme c ke arrive a 10 le it-num se block et ne s'incremente plus.

voici la partiy du code ou je traite cette info:
//recuperation du dernier n°it:
$sql_it = "select it_num from model order by 1 desc";
$req_it = mysql_query($sql_it) or die('Erreur SQL !<br>'.$sql_it.'<br>'.mysql_error());
$cols_it = mysql_num_rows($req_it);

$it_num = mysql_result($req_it,($cols_it-1),"it_num");
$it_num_tmp = explode("-", $it_num);
$lt = $it_num_tmp[0];
$ch = $it_num_tmp[1];

$ch = $ch + 1;
$it_num = $lt.'-'.$ch;
un grand merci d'avance

Posté : 15 juil. 2005, 11:22
par ouckileou
que de bricolage !

pourquoi as-tu besoin de faire ceci ?
normalement avec un identifiant unique pour tes enregistrements, et un code produit ça devrait aller non ? je ne comprend pas ce système de double identifiant, dont l'un est basé sur le MAX, ce qui veux dire qu'a priori il suit l'auto_increment :roll:
affiche ce que tu récupères/modifies ça te donnera peut-être une idée
$ch = $it_num_tmp[1];
echo '$ch récupéré = '.$ch.'<br>';
$ch = $ch + 1; 
echo '$ch modifié = '.$ch;

Posté : 15 juil. 2005, 11:22
par Cyrano
Il y a une ligne bizarre dans ton code:
$it_num = $lt.'-'.$ch;
Si c'est une soustration que tu voulais faire, c'est loupé, parce que ça, c'est une concaténation, donc, prenons des valeurs arbitraires, si $lt vaut "ceci" et $ch vaut "cela", alors $it_num vaut "ceci-cela".
Pour faire une soustraction, ce devrait être comme ça :
$it_num = $lt - $ch;

Posté : 15 juil. 2005, 11:27
par ruly
Il y a une ligne bizarre dans ton code:
$it_num = $lt.'-'.$ch;
Si c'est une soustration que tu voulais faire, c'est loupé, parce que ça, c'est une concaténation, donc, prenons des valeurs arbitraires, si $lt vaut "ceci" et $ch vaut "cela", alors $it_num vaut "ceci-cela".
Pour faire une soustraction, ce devrait être comme ça :
$it_num = $lt - $ch;
non ca c pour qu'il me refasse l'affichage sous la forme IT-num

@ ouckileou:

en fait ouais je devrais utilise mon id de la base autoincrementer pour le faire mais je voyais pas comment l'utiliser. c pour ca ke j'utilisais la variable.

pour faire un sorte de code produit IT-1 ou IT-32 mais il s'arrete a 10 et ne veut plus s'incrementer.

Posté : 15 juil. 2005, 11:27
par ouckileou
je pense que c'est bien une concaténation qu'il veut faire, il reconstruit son identifiant sous la forme "IT-nouveau nombre" ;)

petite précision :
ça bloque à IT-9 et tu ne passes pas à 10
ou ça bloque à IT-10 et tu ne passes pas à 11

Posté : 15 juil. 2005, 11:30
par ouckileou
en fait ouais je devrais utilise mon id de la base autoincrementer pour le faire mais je voyais pas comment l'utiliser. c pour ca ke j'utilisais la variable.

pour faire un sorte de code produit IT-1 ou IT-32 mais il s'arrete a 10 et ne veut plus s'incrementer.
tu pourrais récupérer après un Insert l'identifiant attribué grâce à mysql_insert_id() en PHP

ou simplement ajouter le "IT-" à l'identifiant principal lors de tes manipulations de produits

mais je ne vois pas bien l'intérêt en fait, pourquoi ne pas utiliser simplement cet identifiant, plutôt que d'en faire un autre simplement en rajoutant "IT-"
ça te complique la vie non ?

Posté : 15 juil. 2005, 11:31
par ruly
je pense que c'est bien une concaténation qu'il veut faire, il reconstruit son identifiant sous la forme "IT-nouveau nombre" ;)

petite précision :
ça bloque à IT-9 et tu ne passes pas à 10
ou ça bloque à IT-10 et tu ne passes pas à 11
en fait kan j'affiche ma varical $ch avant ca me marrke 9 et apres le +1 10 donc je crois ki block a 9 et ne veut vraiement plus aller a 10 ou 11, etc... je comprend pas pourkoi

Posté : 15 juil. 2005, 11:32
par ouckileou
quel est le type du champ de ta table qui contient cet identifiant ?

Posté : 15 juil. 2005, 11:33
par ruly
quel est le type du champ de ta table qui contient cet identifiant ?
c un varchar(20)

Posté : 15 juil. 2005, 11:38
par ouckileou
alors je ne vois pas ce qui peut poser problème à la vue de ce code

affiche les erreurs MySQL lorsque tu insert le nouvel identifiant généré et regarde ce que ça donne

ça se trouve le problème vient d'ailleurs, une condition qui s'active lorsque tu arrives à 10

Posté : 15 juil. 2005, 11:41
par ruly
alors je ne vois pas ce qui peut poser problème à la vue de ce code

affiche les erreurs MySQL lorsque tu insert le nouvel identifiant généré et regarde ce que ça donne

ça se trouve le problème vient d'ailleurs, une condition qui s'active lorsque tu arrives à 10
Je fais comment pour afficher les erruer si yen a pas??? il m'insere tjrs sans broncher

Posté : 15 juil. 2005, 11:44
par ruly
et ca ne peux pas venir de mon

Code : Tout sélectionner

$it_num = mysql_result($req_it,($cols_it-1),"it_num");
car si je change mon -1 en -2 pour 11 mais pas apres faut que j'increment a -3 pour le 12.

#-o

Posté : 15 juil. 2005, 11:44
par ouckileou
ben pour afficher les erreurs c'est avec mysql_error() donc apparament tu sais faire

si tu les affiches lors d'une insert et qu'il n'y en a pas...

montre nous le code complet alors, jusqu'au INSERT

Posté : 15 juil. 2005, 11:46
par ouckileou
et ca ne peux pas venir de mon

Code : Tout sélectionner

$it_num = mysql_result($req_it,($cols_it-1),"it_num");
car si je change mon -1 en -2 pour 11 mais pas apres faut que j'increment a -3 pour le 12.

#-o
ah ben oui j'avais pas vu

en deuxième paramètre tu spécifies un numéro de colonne : pourquoi -1 ?
et pourquoi -2 pour 11 ?

là je ne te suis plus, ton identifiant est bien toujours dans la même colonne non ?

Posté : 15 juil. 2005, 11:48
par ruly
et ca ne peux pas venir de mon

Code : Tout sélectionner

$it_num = mysql_result($req_it,($cols_it-1),"it_num");
car si je change mon -1 en -2 pour 11 mais pas apres faut que j'increment a -3 pour le 12.

#-o
ah ben oui j'avais pas vu ?

en deuxième paramètre tu spécifies un numéro de colonne : pourquoi -1 ?
et pourquoi -2 pour 11 ?

là je ne te suis plus, ton identifiant est bien toujours dans la même colonne non ?
oui oui bien sur.... mais j'ai essayer telement de choses que je vous ai mis la derniere version lol¨

j'ai mis mon $cols_i au debut tout seul mais yavait une erreur

mysql_result(): Unable to jump to row 12 on MySQL result index 9 in c:\program files\easyphp1-7\www\leopard\it\inc\model\model_insert.php on line 64

Notice: Undefined offset: 1 in c:\program files\easyphp1-7\www\leopard\it\inc\model\model_insert.php on line 67