begin process at 2010 02 09 13:49:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > RE-COMPTER L'AUTO-INCREMENT D'UNE TABLE (POUR LES FAINÉANTS ^^)

RE-COMPTER L'AUTO-INCREMENT D'UNE TABLE (POUR LES FAINÉANTS ^^)


 Information sur la source

Note :
Aucune note
Catégorie :Astuces Classé sous :auto-increment, tables, enregistrements, id Niveau :Débutant Date de création :06/03/2008 Date de mise à jour :16/03/2008 17:50:30 Vu :5 192

Auteur : titoo87

Ecrire un message privé
Site perso
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Voici un petit script à placer dans votre fichier fonctions.inc.php, et appeller la fonction dans vos pages pour recompter l'auto_increment d'une table.

NB : la connexion à la base de données n'est pas inclue dans cette fonction, mais il est possible de l'ajouter facilement.

Source

  • //////////////////////////////////////////////////////////////////////////////////////////////////
  • || ||
  • || Mettre à jour l'auto_increment d'une table ||
  • || en recomptant celui_ci pour chaque enregistrements ||
  • || @author : titoo87 ||
  • || @mail : titoo87@gmail.com ||
  • || ||
  • \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  • // Auto_increment
  • function mysql_update_ai($table, $champ, $debut){
  • // Gestion des erreurs
  • error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
  • // Vérification des informations
  • $table=str_replace("\"|'|<|>","",$table);
  • $champ=str_replace("\"|'|<|>","",$champ);
  • if(!preg_match("/[A-Za-z0-9]+/",$table)){ echo "Table incorrecte";}
  • else{
  • if(!isset($debut)||$debut==""){ echo "Erreur, début non précisé"; return false;}
  • else{
  • // Supression du champ d'auto_increment
  • mysql_query("ALTER TABLE ".$table." DROP ".$champ."") or die ("Impossible de mettre à jour l'auto_increment : table ou champ inexistant.");
  • // Ajout du champ d'auto_increment
  • mysql_query("ALTER TABLE ".$table." ADD ".$champ." INT AUTO_INCREMENT PRIMARY KEY FIRST;") or die ("Impossible de mettre à jour l'auto_increment");
  • // On retourne TRUE
  • return true;
  • }
  • }
  • }
//////////////////////////////////////////////////////////////////////////////////////////////////
||												||
|| Mettre à jour l'auto_increment d'une table							||
|| en recomptant celui_ci pour chaque enregistrements						||
|| @author : titoo87										||
|| @mail : titoo87@gmail.com									||
||												||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
// Auto_increment
function mysql_update_ai($table, $champ, $debut){
	
	// Gestion des erreurs
	error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
	
	// Vérification des informations
	$table=str_replace("\"|'|<|>","",$table);
	$champ=str_replace("\"|'|<|>","",$champ);
	
	if(!preg_match("/[A-Za-z0-9]+/",$table)){ echo "Table incorrecte";} 
	else{
		if(!isset($debut)||$debut==""){ echo "Erreur, début non précisé"; return false;} 
		else{
			// Supression du champ d'auto_increment
			mysql_query("ALTER TABLE ".$table." DROP ".$champ."") or die ("Impossible de mettre à jour l'auto_increment : table ou champ inexistant.");
					
			// Ajout du champ d'auto_increment
			mysql_query("ALTER TABLE ".$table." ADD ".$champ." INT AUTO_INCREMENT PRIMARY KEY FIRST;") or die ("Impossible de mettre à jour l'auto_increment");
					
			// On retourne TRUE
			return true;
		}
	}
}

 Conclusion

C'est assez pratique pour garder une table propre ^^


 Historique

16 mars 2008 17:49:39 :
Prise en compte du commentaire de CODEFALSE
16 mars 2008 17:50:30 :
Prise en compte de la remarque de CODEFALSE (autant que j'ai pu...:s)

 Sources de la même categorie

Source avec une capture PAGINATION EN PHP par Orangina
Source avec Zip POO - DEBUGGER par DiGhan
Source avec Zip CRAWLER DE SITE EN PHP par Mcjo
DÉCOUPAGE D'UN TEXTE EN FONCTION DES SAUTS DE LIGNES par biloubil
RÉCUPÉRER LE CHEMIN RELATIF D'UN OBJET PAR RAPPORT À LA RACI... par FredPsy

 Sources en rapport avec celle ci

Source avec Zip FONCTION D'AFFICHAGE DE DONNÉES MYSQL par Snakegun
Source avec Zip Source avec une capture B0T, UNE SOURCE QUI VOUS PERMET DE VISUALISER LE CONTENU DE ... par Windows300
TROUVER LE PROCHAIN ID DE LIBRE. par SuperTonic
ENVOI MAIL AVEC TABLEAU RÉCAPILTULATIF DES OPTIMISATIONS FAI... par Epoc22
Source avec une capture GÉNÉRATEUR D'IDENTIFIANT UNIQUE (LETTRES & CHIFFRES) par Gallient

Commentaires et avis

Commentaire de yoman64 le 06/03/2008 10:47:37

Salut,
Bon... Aucune vérifications d'erreur, ensuite ton script risque très probablement de générer des erreurs si il essait d'attribuer une clée qui existe déja (un champs se trouvant plus loin ayant l'id que tu veux attribuer par exemple), si tu classait les champs par la colonne d'auto increment avant de les fetcher ça réduit le risque d'erreur

Ensuite... moi je fais ça en deux lignes

alter table `table` DROP `id`
alter table `table` ADD `id` INT AUTO_INCREMENT PRIMARY KEY FIRST


il y a peut être même une fonction mysql déja fait pour le faire, mais j'en doute.


Bref je veux pas te décourager, mais ton code est totalement à refaire !

Bonne chance

Commentaire de titoo87 le 06/03/2008 13:57:42

Salut !

En fait, je n'ai pas trouvé de solution pour le faire rapidement sur google (mots clés mal choisis certainement :p) donc je me suis dis que j'allais essayer de faire mon propre script... Raté... Mais maintenant j'ai la solution !! merci beaucoup !! Je vais adapter le script avec ta solution si tu est d'accord ;)

++

Commentaire de codefalse le 06/03/2008 15:36:34 administrateur CS

T'inquiète il dira pas non ;)

Par ailleurs, dans ta modification de scripts prends en compte :
_ Faire des entrées en POST au lieu de GET
_ Gestion de la sécurité (analyser les entrées $_GET (POST))
_ Gerer les erreurs de connexions, de selections et de requetes dans la base de donnée
_ Séparer le code HTML du code PHP
_ Eventuellement en faire une fonction plutut qu'un script style mysql_update_ai ();

Car dans l'état actuel des choses, ton code devrait être supprimé.
J'attends ta mise à jour ! :)

Commentaire de titoo87 le 06/03/2008 16:44:26

je travaille donc dessus ;) merci pour les conseils cela m'aide à progresser ;)

Commentaire de codefalse le 06/03/2008 16:51:52 administrateur CS

c'est le but ! :)

Commentaire de codefalse le 16/03/2008 21:56:32 administrateur CS

C'est une bonne chose ta mise à jour, ca montre ta motivation :)

Comme toujours, des remarques, afin de l'améliorer :

Le paramètre début dans la signature de ta fonction, tu devrait lui mettre un paramètre optionnel : 0, ainsi que le parametre champ à 'id' par exemple (le champ que tu utilise le plus pour l'ai), du coup cela donnerai
function mysql_update_ai($table, $champ = 'id', $debut = 0);

comme ca apres tu appelerai ta fonction avec mysql_update_ai ('visiteurs');

# error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
tu devrais laisser cette fonctionnalité au code appelant, ta fonction ne doit pas modifier le moteur interne de ton code. Ou au pire si c'est vraiment nécéssaire, tu restitue le niveau d'erreur à son état initial à la fin de la fonction. Mais c'est à déconseiller.

#  // Vérification des informations
# $table=str_replace("\"|'|<|>","",$table);
# $champ=str_replace("\"|'|<|>","",$champ);
#
# if(!preg_match("/[A-Za-z0-9]+/",$table)){ echo "Table incorrecte";}

Tu remplace des charactères incorrectes pour ensuite indiquer que ta table est incorrecte. Tu effectue des travaux inutilements du coup. Soit elle est correcte, soit elle ne l'est pas. De plus, [A-Za-z0-9] n'est pas complet, en effet tu peux avoir une table qui aie un underscore (_), donc tu invalide un table potentiellement valide. Par ailleur , je n'en suis pas sur, mais je crois que les accents marchent aussi, juste qu'ils sont déconseillés.

Du coup tu à deux possibilités : Soit te taper la doc pour trouver ce qui est autorisé et ce qui ne l'est pas.
Soit ne pas tester la validité de la table et tester le résultat de la requete mysql. Si ca passe pas, c'est peut-etre à cause d'une table erronée. (Outre le fait que ta table peux avoir des caractères invalides, elle peux aussi ne pas exister (une table "visiteurs" est valide, mais l'ai-je réellement dans ma base de donnée ?)). Donc au lieu d'ajouter une couche de validitée, peut-être juste envoyer la requete et regarder le résultat ?

Ensuite, tu effectue les deux requetes sans tenir du compte de ce que donne leur résultat, et tu retourne true.
Cela veut dire que meme si je n'instancie pas une connexion à une base de donnée, et donc que ton code ne fonctionnera pas, l'appel de ta fonction me retournera true. Je ne peux donc jamais savoir si ta fonction à bien marché ou pas. teste ta requete avec
if (mysql_query ('...') === false)
     return false;

if (mysql_query ('second query') === false)
     return false;

return true;
là ca passe mieux déjà ! :)

J'attends une éventuelle mise à jour de ton code. On arrive à quelque chose d'intéressant maintenant :)
Sans mise à jour, je lui mettrai 6.

Courage ! :)

Commentaire de yoman64 le 16/03/2008 23:41:14

Salut,

Pour complêter ce que disait codefalse, ne serait-il pas opportun d'échapper les chaines ? $table = mysql_real_escape_string($table);
idem pour champs par exemple. Ensuite évidement vérifier si les requêtes se déroule bien est essentiel avant de retourner true (évite les or die aussi, renvois une exception ou simplement false)

Sinon pour les charactères autorisés (je suis d'avis que d'échapper suffit, pas besoin de validé absolument puisque dans le pire des cas la requête va échouer tout simplement) eh bien ils semblents tous autorisés (sauf  ` ) Parce que je me suis créé une base appelé "'ÉÈÀWS!#$%?&*_a@ et ça a passé... lol

Commentaire de codefalse le 16/03/2008 23:43:42 administrateur CS

lol donc oué les accents passent, et pas que ca apparement ^^ :)

Merci Yoman64 pour l'infos ! :)

Commentaire de ronanry le 16/06/2008 19:36:23

petite question Yoman64...arrivais tu tjs a accéder à ta table après ? car j'ai lu je sais plus où que tu pouvais créer une table avec un "."(point) dans le nom mais qu'après tu ne pouvais plus y accéder...mais la création fonctionnait tt de meme...

Commentaire de db77 le 19/07/2008 11:23:14

Bonjour,
C'est bien de proposer ce genre de script mais je le trouve dangereux. En effet, le numéro auto-incrémenté est souvent utilisé comme clef dans une autre table, exemple :

Table catégorie (supposée avoir subi des suppressions)
Id - Libellé
17 - Informatique
22 - Electronique
31 - Papeterie
38 - Divers
Une table produits
id - id_cat - Libellé
1 - 17 - Disque dur
2 - 22 - Condensateur
3 - 31 - Post-It
4 - 17 - Lecteur disquettes
5 - 22 - Transistor
6 - 17 - Carte vidéo

Si après ton script on a :
Id - Libellé
1 - Informatique
2 - Electronique
3 - Papeterie
4 - Divers
Que deviennent les "liens" de la table Produits ?

Donc, à utiliser en connaissance de cause ;)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

recupération entre deux tables [ par coupeau ] bonjour, j'ai deux tables une ECOLE l'autre LOCALITE. Dans ECOLE j'ai un id_localite que j'ai d'ailleur aussi dans LOCALITE. Dans LOCALITE j'ai un cha Problèmes d'affichage [ par OriOn ] Bonjour, voilà j'ai un problème qui dure depuis déjà quelques jours et personnes n'a réussit à me le résoudre.J'ai une page sur mon site qui récupère Sélectionner les lignes différentes entre deux tables [ par Mikemadest ] Bonjour,J'ai cherché sans trouver de réponse à mon problème,ce qui m'amène à vous poser cette question !D'avance je m'excuse si j'ai raté la solution petit souci avec le nom des tables... [ par nikos283 ] Bonjour, j'ai deux table ayant un champ s'appellant pareil: "nom"voici ma requete:SELECT employes.nom, services.nom FROM employes, services WHERE empl Requete avec 2 tables [ par pointcom ] PointComHelloJ'ai 2 tables (1appli et 1 data)appli (id_appli,nom, desc,...)data(id_data,id_appli,message, ...)Je souhaite compter combien de appli.id_ relations entre 2 tables [ par yeble ] bonjourj'ai crée 2 tables (articles, marque)ARTICLESid_article (Clé unique primaire) nom_article prix_article marque_articleMARQUEid_marque (Clé uniqu Somme de deux tables [ par rampa99 ] Bonjour. J'ai deux tables nommées revues et livres. elles contiennent les champs suivant livres_id et livres_titre pour livres, et revues_id revues_ti PHP : travail sur 3 tables [ par vir76 ] Salut tout le monde,je dispose de 3 tables :-T_SOUSDIRECTION : ID_SOUSDIRECTION, ID_DIRECTION, SOUSDIRECTION_NOM- T_FOURSD : ID_SOUSDIRECTION, ID_FOUR plusieurs enregistrements à supprimer [ par knas74 ] nasje n'arrive pas à supprimer plusieurs enregistrements à la fois avec ce code :foreach ($id as $index) { $sql = "DELETE FROM table WHERE Id = ' php : instruction INSERT sur deux tables [ par vir76 ] Salut tout le monde, J'ai deux tables :t_direction : id_direction, direction_nomt_sousdirection : id_sousdirection, id_direction, sousdirection_nomJe


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,560 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales