incrementation d'un champs

Eléphant du PHP | 181 Messages

15 juil. 2005, 11:17

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 juil. 2005, 11:22

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;
Modifié en dernier par ouckileou le 15 juil. 2005, 11:23, modifié 1 fois.

Mammouth du PHP | 19672 Messages

15 juil. 2005, 11:22

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;
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 181 Messages

15 juil. 2005, 11:27

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.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 juil. 2005, 11:27

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 juil. 2005, 11:30

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 ?

Eléphant du PHP | 181 Messages

15 juil. 2005, 11:31

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 juil. 2005, 11:32

quel est le type du champ de ta table qui contient cet identifiant ?

Eléphant du PHP | 181 Messages

15 juil. 2005, 11:33

quel est le type du champ de ta table qui contient cet identifiant ?
c un varchar(20)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 juil. 2005, 11:38

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

Eléphant du PHP | 181 Messages

15 juil. 2005, 11:41

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

Eléphant du PHP | 181 Messages

15 juil. 2005, 11:44

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 juil. 2005, 11:44

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

15 juil. 2005, 11:46

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 ?

Eléphant du PHP | 181 Messages

15 juil. 2005, 11:48

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