[RESOLU] Problème d'auto-incrémentation dans table SQL

Eléphant du PHP | 290 Messages

16 janv. 2014, 12:26

Bonjour,

Je travaille avec des formulaires et des bases de données.
J'ai un programme qui envoie les données d'un formulaire à une table
dans une base de données.
J'en ai un autre qui ressort les données de la table pour voir sur mon site
ce que j'ai dans ma table.
Le formulaire a l'air de fonctionner, une nouvelle ligne auto-incrémentée apparaît
dans phphmyadmin sur mon serveur mais la nouvelle ligne rentrée ne ressort pas
sur mon site via le programme écrit pour ressortir les données de la table.
Jusque là ça marchait.
Ce qui s'est passé, c'est que plusieurs lignes dans ma table ont été effacées (par moi-même)
et ça a mis du désordre dans mon auto-incrémentation, car toute nouvelle ligne rentrée
dans ma table n'a pas le numéro qui suit celui de la dernière ligne rentrée, mais celui de la dernière ligne effacée.

Ainsi, par exemple, je vais avoir:

table "machin"
1 ligne1
2 ligne2
3 ligne3
4 ligne4
5 ligne5
12 ligne6

La nouvelle ligne rentrée prendrait 12 comme numéro d'incrémentation et non 6
comme ça devrait être le cas.
Dans l'exemple ci-dessus, j'ai effacé les lignes 6, 7, 8, 9, 10 et 11.
Elles semblent effacées de la table mais toujours prises en compte dans l'attribution
des numéros.
Je crois que le problème serait résolu si j'avais la bonne incrémentation.

Le programme écrit pour ressortir les données de la table
me ressort les données des lignes 1,2,3,4 et 5.
Il n'apparaît donc plus toute nouvelle ligne entrée.

Merci à ceux qui peuvent m'aider :priere:

Niconicochan.

Eléphant du PHP | 290 Messages

16 janv. 2014, 12:42

En fait, la moitié de mon problème est résolu.
J'arrive à retrouver les données dans le programme qui ressort
ce qu'il y a dans la base de données car les nouvelles
données que j'ai rentré dernièrement ne répondaient pas à certains critères
que j'ai moi-même programmé.
Toutes mes excuses.

Par contre, j'ai toujours le problème dans mon auto-incrémentation des
lignes comptées dans l'auto-incrémentation.
Je passe donc toujours de la ligne 5 à la ligne 12 dans phpmyadmin.
Savez-vous pourquoi le numéro d'incrémentation d'une ligne effacée dans MySQL
est toujours compté?
Pourriez-vous me dire comment régler ce petit soucis? (il doit très certainement y avoir une solution).

Mammouth du PHP | 2278 Messages

16 janv. 2014, 13:15

Oui autoincrement procède ainsi.
Mais, comme on peut forcer la valeur d'un autoincrement, si tu tiens à avoir des numéros consécutifs, il faudrait gérer toi même une renumérotation, ou tenir à jour une table des id supprimés pour pouvoir t'en resservir.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Invité
Invité n'ayant pas de compte PHPfrance

16 janv. 2014, 18:50

Merci pour ta réponse.
Si l'auto-incrémentation prend donc aussi en compte les lignes effacées,
est-ce que le nombre de lignes que j'ai dans ma table, c'est uniquement
les lignes réellement présentes ou est-ce que les lignes effacées sont aussi comprises par le SGBD?
Il y a bien un nombre de lignes utilisables limité par table?
Si c'est bien le cas, ça veut dire que l'on finit tôt ou tard par remplir une table
étant donné qu'on ne peut jamais la vider?
Dans ce cas, ça veut dire que la seule solution qu'on a est d'augmenter le nombre
de lignes insérables par table?

Mammouth du PHP | 2278 Messages

16 janv. 2014, 20:03

Merci pour ta réponse.
Si l'auto-incrémentation prend donc aussi en compte les lignes effacées,
est-ce que le nombre de lignes que j'ai dans ma table, c'est uniquement
les lignes réellement présentes ou est-ce que les lignes effacées sont aussi comprises par le SGBD?
--> NOMBRE RÉEL.
Il y a bien un nombre de lignes utilisables limité par table?
-> La limltation dépenbd du type d'entier que tu choisis pour l'autoincrement (int : o -> 2.147.483.647, bigint : 9.223.372.036.854.775.807)
Si c'est bien le cas, ça veut dire que l'on finit tôt ou tard par remplir une table
étant donné qu'on ne peut jamais la vider?
-> Non, tu peux réutiliser les id disparus en forçant le numéro
au lieu de insert into tb set a='u';
tu écris
insert into tb set a ='u', id =xy;
mais ça suppose que tu aies repéré les id supprimés (ça pourrait se faire au fur à mesure des suppressions en stockant ces valeurs dans une table id_supprimés)
Dans ce cas, ça veut dire que la seule solution qu'on a est d'augmenter le nombre
de lignes insérables par table?
Il y a ces explications qui me semblent claires sur Alter table
http://www.mysqltutorial.org/mysql-reset-auto-increment
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Invité
Invité n'ayant pas de compte PHPfrance

17 janv. 2014, 10:57

Merci beaucoup.
Problème parfaitement résolu.
Merci pour tes explications et pour le lien qui m'auront été très utiles. :D

Je voudrais aussi poser deux questions pour me mettre "en conformité"
avec les règles du forum:

-Quand je clique sur répondre et que j'écris mon nom d'utilisateur dans le champ
approprié, il en ressort que je ne peux pas utiliser le nom que je viens d'écrire puisqu'il existe
déjà (ce qui est normal puisque c'est le miens et que je suis sur le forum), je l'efface donc
complètement pour pouvoir envoyer mon message et j'apparais alors
comme un invité. Comment faut-il s'y prendre?

-Deuxième chose, quand quelqu'un résout un problème que j'ai posé, je n'arrive pas à signaler
cette personne (j'ai pourtant bien lu les règles du forum).
L'icône en haut à droite n'est pas le triangle à l'envers avec le point d'exclamation?

Mammouth du PHP | 2278 Messages

17 janv. 2014, 11:38

Le triangle inversé sert à signaler un message à problème, dont ceux qui sont résolus et qui ne sont pas signalés comme tels. Ce sont les modérateurs qui interviennent alors.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Invité
Invité n'ayant pas de compte PHPfrance

17 janv. 2014, 12:48

Dans le cas présent, je veux signaler que Sirakawa vient de résoudre mon problème.
Comment dois-je m'y prendre pour cela?

Tu vois que mes messages sont signés "invité" au lieu de "niconicochan" car je laisse
le champ "Nom d'utilisateur" blanc dans ma réponse (si j'écris mon nom d'utilisateur,
on me demande d'en choisir un autre car mon nom d'utilisateur existe déjà sur le forum).
Comment dois-je m'y prendre pour régler ce deuxième petit soucis?

Mammouth du PHP | 2278 Messages

17 janv. 2014, 14:32

Tu te réinscris avec un nom bidon.
Quand tu arrives, il faut EN PREMIER cliquer sur Connexion (haut doit) et mettre ton login et ton mot de passe que tu as choisis la première fois. Et tu peux cocher:
me connecter automatiquement... (à gauche)
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Invité
Invité n'ayant pas de compte PHPfrance

17 janv. 2014, 15:54

Je te remercie.
Je pense ne pas me réinscrire, il faudrait que j'ouvre une nouvelle boîte
mail exprès juste pour cela.
Après tout, je pense que ça ne gêne personne.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 janv. 2014, 15:35

le "résolus" permet d'aider les gens à sélectionner les sujets, lorsqu'il cherche à résoudre leurs problème ils sont déjà plus certain d'avoir une réponse.

ah mais oui c'est vrai chercher sur un forum c'est de plus rare ...

demander de l'aide c'est aussi accepter d'en donner et marquer résolus c'est déjà un pas dans ce sens ;)


@+
Il en faut peu pour être heureux ......

Invité
Invité n'ayant pas de compte PHPfrance

20 janv. 2014, 11:11

Je comprends et accepte parfaitement le principe.
Le soucis que j'ai est que je ne sais pas comment faire pour marquer "résolu".

Si quelqu'un veut bien m'apprendre, ça me permettrait de savoir le faire pour
toutes les autres fois (j'ai lu les règles du forum mais je ne trouve pas l'icône).
J'ai donc besoin de votre aide pour en arriver à pouvoir le faire.
Dans le cas présent, je veux dire que Sirakawa a résolu mon problème.

J'ai aussi un autre soucis:
mes messages sont signés "invité" au lieu de "niconicochan" car je laisse
le champ "Nom d'utilisateur" blanc dans ma réponse (si j'écris mon nom d'utilisateur,
on me demande d'en choisir un autre car mon nom d'utilisateur existe déjà sur le forum).
Sirakawa me dit de me réinscrire avec un autre nom, et pour cela on me demande
une adresse e-mail. Est-ce que je dois ouvrir un compte supplémentaire pour les e-mail?
S'il faut faire comme ça je suis d'accord mais est-ce que quelqu'un pourrait me le confirmer?

Ce serait sympa si quelqu'un peut répondre à ces deux questions afin que je règle une fois
pour toutes ces petits soucis.
Je vous embête un peu mais c'est vraiment pour pouvoir m'adapter aux règles communes.

Mammouth du PHP | 2278 Messages

20 janv. 2014, 13:45

Je crois avoir identifié le problème:

Il faut EN PREMIER cliquer Connexion en haut à droite, et là l'identification se fait sans problème.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 290 Messages

20 janv. 2014, 16:30

Essai pour voir si c'est écrit "invité" ou "niconicochan"

Eléphant du PHP | 290 Messages

20 janv. 2014, 16:37

Merci moogli et sirakawa.
Ces deux soucis étant résolus, je vais repartir
en tenant compte des usages du forum désormais :D