Incrémentation d'une variable en php

Fermé
amine_marc Messages postés 256 Date d'inscription dimanche 21 février 2010 Statut Membre Dernière intervention 11 avril 2016 - 14 mai 2011 à 17:42
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 - 17 mai 2011 à 17:14
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 samedi 14 mai 2011 Statut Membre Dernière intervention 10 mars 2014 6
14 mai 2011 à 21:18
0
amine_marc Messages postés 256 Date d'inscription dimanche 21 février 2010 Statut Membre Dernière intervention 11 avril 2016 2
14 mai 2011 à 22:14
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 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
14 mai 2011 à 22:17
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 dimanche 21 février 2010 Statut Membre Dernière intervention 11 avril 2016 2
14 mai 2011 à 22:22
parce que j'ai plusieurs identifiants, je veux différencier entre eux;
0
amine_marc Messages postés 256 Date d'inscription dimanche 21 février 2010 Statut Membre Dernière intervention 11 avril 2016 2
15 mai 2011 à 13:05
pas de réponse?!
0
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
15 mai 2011 à 13:07
« 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 dimanche 21 février 2010 Statut Membre Dernière intervention 11 avril 2016 2
15 mai 2011 à 13:10
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 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
15 mai 2011 à 14:33
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 dimanche 21 février 2010 Statut Membre Dernière intervention 11 avril 2016 2
16 mai 2011 à 21:35
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 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
16 mai 2011 à 21:51
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 dimanche 21 février 2010 Statut Membre Dernière intervention 11 avril 2016 2
16 mai 2011 à 23:28
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 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
17 mai 2011 à 17:14
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