Incrémentation d'une variable en php

amine_marc Messages postés 256 Date d'inscription   Statut Membre Dernière intervention   -  
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai un pb d'incrémentation d'une variable $code_elv lorsqu'elle sera "elv10", elle peut pas ainsi s'incrémenter, je sais pas pourquoi?! j'ai utliser une fct pour ce but la, ça marche bien jusqu'à elv10 comme je viens de dire, voici le code:

<?php
.....
function select_dern_cd_el($table_cib,$dern_ergs)
{
$req0="SELECT MAX($dern_ergs) FROM $table_cib";
$req1=mysql_query($req0) or die (mysql_error());
$MAX_ID=mysql_fetch_array($req1);
$string_a_separer=$MAX_ID[0];

if(empty($string_a_separer))
{ $string_a_separer="elv0";
list($cont1,$cont2)=explode("v",$string_a_separer);
}
else {
list($cont1,$cont2)=explode("v",$string_a_separer); }

$enregis_incremente0=$cont2+1;
$enregis_incremente="elv".$enregis_incremente0;
return $enregis_incremente;
}
.....
$rq5=mysql_query("INSERT INTO eleve VALUES ('$nom_elv','$prenom_elv','$code_elv')") or die (mysql_error());
.....
?>

le résultat est l'insertion des dix premiers enregistrement, et l'affichage du msg: "Duplicata du champ 'elv10' pour la clef 'PRIMARY' ".
veuillez me dire où est le pb exactement?! et merci d'avance.
A voir également:

3 réponses

Overlock Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   6
 
0
amine_marc Messages postés 256 Date d'inscription   Statut Membre Dernière intervention   2
 
merci pr la réponse, mais c pas ça que je veux faire exactement. En effet, j'essaie de selectionner le dernier code_elv enregistré dans le tableau eleve pour l'incrémenter...
tout marche bien sauf si l'on arrive à l'enregistrement code_elv="elv10", on peut pas avancer car le message "Duplicata du champ 'elv10' pour la clef 'PRIMARY' " s'affiche qui veut dire qu'il y a une occurrence de la clé primaire elv10...
j'espere que ça soit bien claire pour vous, et j'espere aussi résoudre ce pb qui me bloque à avancer dans la création de mon site.
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Salut,

Pour le numéro de l'élève, pourquoi ne pas utiliser une colonne "id", en auto-incrémentation ? C'est très utilisé. Tu n'aurais pas besoin de récupérer le dernier ID, l'incrémenter puis le retourner grâce à une fonction afin de l'utiliser dans ta requête d'insertion.
0
amine_marc Messages postés 256 Date d'inscription   Statut Membre Dernière intervention   2
 
parce que j'ai plusieurs identifiants, je veux différencier entre eux;
0
amine_marc Messages postés 256 Date d'inscription   Statut Membre Dernière intervention   2
 
pas de réponse?!
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
« parce que j'ai plusieurs identifiants, je veux différencier entre eux »
Justement, un ID en auto-incrémentation, c'est unique, donc chaque élève aura son ID sous forme de numéro.
0
amine_marc Messages postés 256 Date d'inscription   Statut Membre Dernière intervention   2
 
d'accord, j'accepte. Mais je veux savoir seulement pourquoi ma fct ne sert pas à dépasser dix enregistrements, veuillez me répondre si vous avez une réponse, et merci d'avance.
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
C'est parce que le trie fonctionne de cette manière :
1
10
11
12
13
2
20
21
22
23
3
30
etc
Du coup, elv9 est considéré comme supérieur à elv10
0
amine_marc Messages postés 256 Date d'inscription   Statut Membre Dernière intervention   2
 
j'ai trouvé une solution à mon pb, je pense que ça marche bien! voici le code de la fct:
<?php

function select_dern_cd_el($table_cib,$dern_ergs) //fct 2
{
$req0="SELECT $dern_ergs FROM $table_cib";
$req1=mysql_query($req0) or die (mysql_error());

$compteur=0;
while($donnees=mysql_fetch_array($req1)){
$compteur++; }

$ii=$compteur+1;
$enregis_incremente="elv".$ii;
return $enregis_incremente;
}
?>
merci bcp pour tous les gens qui m'ont aidé à résoudre ce pb.
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Le problème se posera quand tu supprimeras un élève.

- Imagine que tu aies 5 élèves, dont le dernier porte « elv5 » comme code.
Après ta boucle, $compteur vaudra 5.
Tu l'incrémentes, il vaut 6, donc tu peux créer l'élève « elv6 ».

- Maintenant, l'élève « elv3 » a été renvoyé après avoir insulté son professeur d'informatique.
Ta table ne compte donc plus que les élèves elv1, elv2, elv4, elv5
Il y a donc 4 élèves, et c'est le nombre que tu obtiendras après ta boucle.
Tu incrémentes encore $compteurs, et tu obtiens 5.
$erengis_incremente vaudra donc « elv5 » : mais cet élève existe déjà
0
amine_marc Messages postés 256 Date d'inscription   Statut Membre Dernière intervention   2
 
oui c'est vrai, ça c'est un problème! dommage!!!! alors je pense que je dois utiliser l'identifiant auto-incrémenté, mais je sais pas comment le faire?!
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
C'est simple, il suffit d'ajouter une colonne « id », souvent en début de table de type numérique (INT), avec l'option auto_incrementation, unsigned (car les négatifs sont inutils) et en clé primaire.
0