MySQL : Vérifier si un enregistrement existe...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : MySQL : Vérifier si un enregistrement existe...

Re: MySQL : Vérifier si un enregistrement existe...

par StudsMaster » 24 juin 2012, 19:00

Non car la catégorie n'est pas définie par l'utilisateur lol. Seul le titre l'est :)

C'est bon ca fonctionne :
	mysql_connect($Serveur_db, $User_db, $Passe_db);
	mysql_select_db("$Base_name");
		$donnees = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS verif_exist FROM CATALOGUE_Produits WHERE TITRE='$Titre'"));
		$donnees_verif = @mysql_query("SELECT CATEGORIE from CATALOGUE_Produits where TITRE='Baguette'"); if (@mysql_num_rows($donnees_verif)!=0){$Aff_cat = @mysql_fetch_row($donnees_verif);}
		$file_name = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS verif_exist FROM CATALOGUE_Produits WHERE IMAGE='$File_name'"));
	mysql_close();
Et j'affiche donc la table avec la variable : "$Aff_cat[0]".

Re: MySQL : Vérifier si un enregistrement existe...

par moogli » 24 juin 2012, 18:58

Tout est possible tout est réalisable :)

Utilisé la fonction count() SQL pour savoir s'il existe plusieurs fois se titre.
Une simple requête fournit la catégorie.

Ta base est toujours mal faite.
Tu peux te retrouver avec une cat1, une CAT1 ou même une cAt1 et ça va être le merdier dans ta base.
D'où une table catégorie ;)


@+

Re: MySQL : Vérifier si un enregistrement existe...

par StudsMaster » 24 juin 2012, 18:01

Bonsoir,
Voici donc la nouvelle structure de ma table SQL :
CREATE TABLE `CATALOGUE_Produits` (
  `CATEGORIE` text collate latin1_german2_ci NOT NULL,
  `TITRE` text collate latin1_german2_ci NOT NULL,
  `IMAGE` text collate latin1_german2_ci NOT NULL,
  `DESCRIPTION` text collate latin1_german2_ci NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci;
Donc j'aimerai en fin de compte que si un TITRE existe déja, un message d'erreur s'affiche indiquant le nom de la catégorie associée.

En clair, si ma table est ainsi constituée des données suivantes :
  • (CATEGORIE, TITRE, IMAGE, DESCRIPTION) VALUES('CAT1','T1','picture1.jpg','Objet numero 1')
  • (CATEGORIE, TITRE, IMAGE, DESCRIPTION) VALUES('CAT2','T2','picture2.jpg','Objet numero 2')
Maintenant je fait une requête SQL tel que :
  • (CATEGORIE, TITRE, IMAGE, DESCRIPTION) VALUES('CAT3','T1','picture8.jpg','Objet numero 7')
Alors, un message d'erreur s'affiche: Erreur, le titre "T1" existe déja dans la catégorie "CAT1".

C'est jouable ?

Re: MySQL : Vérifier si un enregistrement existe...

par moogli » 24 juin 2012, 17:53

Salut,

Oui cela s'appel normaliser la base.

D'ailleurs la catégorie c'est une table à part, et tu met dans la table produit la clef primaire de la table catégorie pour faire la "jointure".


@+

Re: MySQL : Vérifier si un enregistrement existe...

par xTG » 24 juin 2012, 17:52

En effet ta conception est mauvaise.
Il faudrait une table catégorie et une table produit. :D

Re: MySQL : Vérifier si un enregistrement existe...

par StudsMaster » 24 juin 2012, 15:30

Je viens de penser a quelque chose de tout bête... Mais sans doute mieux... Plutot que de créer 5 tables (exemple), j'ai autant en créer une seule et unique avec un colonne supplémentaire "CATEGORIE". En fin de compte, chaque table est une table de produits.

Je m'explique. J'ai un catalogue de produits. Plusieurs catégorie de produits. A l'heure actuelle, j'ai créer autant de tables que de catégorie de produits, avec dedans les colones: TITRE, IMAGE, DESCRIPTION.

Ne serais-ce pas plus simple si je créé uniquement une seule table (PRODUITS) et que je mettrai les colones suivantes : CATEGORIE, TITRE, IMAGE, DESCRIPTION. Au moins, si un enregistrement existe déja, ca serait plus facile a faire remonter le nom de la catégorie dans laquelle le TITRE existe, non ?

Fab.

Re: MySQL : Vérifier si un enregistrement existe...

par StudsMaster » 24 juin 2012, 13:18

Bonjour,
Effectivement, toute les tables que je souhaites scrutter comtent un champs "TITRE". Exemple:
J'ai 5 tables :
Table_1, Table_2, Table_3, Table_4 et Table_5

Simplifions la chose... Chaque table comporte 1 enregistrements, dont le titre est le même que sa table ( TITRE(Table_1)=Table_1 , TITRE(Table_2)=Table_2 , ...).

Maintenant, avec mon formulaire, je souhaites créer une nouvelle entrée dans TABLE_1. Je met en titre "TABLE_3". Alors, un message d'erreur s'affiche disant que la valeur "TABLE_3" existe déja, dans la table "TABLE_3".

Voila en fin de compte ce que je souhaites faire. Vous comprennez mieux ?

Fab.

Re: MySQL : Vérifier si un enregistrement existe...

par xTG » 24 juin 2012, 13:07

Tu peux travailler sur la table de schéma de MySQL pour récupérer la liste des tables il me semble.
Mais le souci de cette automatisation c'est de savoir si toutes ces tables possèdent un champ titre ou non...
Bref ce serait de mon point de vue développer un gros code qu'il serait plus simple de maintenir avec une requête faite manuellement.

Tu peux utiliser l'union pour rajouter l'information du nom de table. Cela donnera donc une requête du type :
SELECT count(id) AS nb, 'table1' AS nom_table FROM table1 WHERE titre = 'monTitre'
UNION
SELECT count(id) AS nb, 'table2' AS nom_table FROM table2 WHERE titre = 'monTitre'
Cela te renverra par contre plusieurs résultats, un par table.

MySQL : Vérifier si un enregistrement existe...

par StudsMaster » 24 juin 2012, 11:55

Bonjour à tous,
En farfouillant sur le net, j'ai pu constituer une reqête PHP visant à vérifier qu'une valeur n'existait déja pas dans une table SQL. Tel que :
	
	mysql_connect($Serveur_db, $User_db, $Passe_db);
	mysql_select_db("$Base_name");

	$file_name = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS verif_exist FROM TABLES WHERE TITRE='$File_name'"));
	mysql_close();

	if($file_name['verif_exist'] > 0) {echo("ERREUR, CA EXISTE");$Envoi = 0;}
J'ai bien compris le système de cette requête visant en fin de compte a compter le nombre de fois ou l'enregistrement "$File_name" (Une variable de mon formulaire), et si le nombre est supérieur a "0", donc existe déja, alors je bloque l'envoi de ma requête et en informe l'utilisateur.

Cependant, j'aimerai:
  • 1. Rendre d'une part plus souple cette requête, en l'élargissant a toute ma base de donnée: J'ai bien compris que je pouvais mettre plusieurs tables séparées par des virgules a la place de TABLES, cependant, j'ai une vingtaine de tables a scruter... Ça risque de faire une belle liste lol. J'ai essayé de mettre un "*", mais ca fonctionne pas... Une idée ?
  • 2. En théorie, si l'enregistrement existe déja, il existera en un seul exemplaire. Cependant, est-ce possible dans mon message d'erreur d'afficher dans quelle table il existe déja ?
Merci par avance de votre aide,
Fab.