Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/03/2011, 15h09   #1
Invité de passage
 
Romain Tiennot
Inscription : novembre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Romain Tiennot

Informations forums :
Inscription : novembre 2010
Messages : 10
Points : 0
Points : 0
Par défaut Verification doublon avant validation du formulaire

Bonjour,
Je début en BDD et je rencontre un soucis au sujet de la verification d'un doublon afin de valider un formulaire.
Le formulaire comporte deux champs : "Nom" et "Prenom".
Une fois le formulaire "Valider", il verifie que le "Nom" et Prenom" n'existe pas de facon binaire. Si les deux valeurs se retrouve à 1, il ne valide pas le formulaire :

Donc quand je valide il se produit la chose suivante :

***Formulaire***
Nom = Toto
Prenom = Jean-Pierre
***Verification après validation***
"Toto" existe-t-il dans la collone nom ? "NON" donc "0"
"Jean-Pierre" existe-t-il dans la collone prenom ? "NON" donc "0"
Je valide le formulaire


***Formulaire***
Nom = Toto
Prenom = Olivier
***Verification après validation***
"Toto" existe-t-il dans la collone nom ? "OUI" donc "1"
"Olivier" existe-t-il dans la collone prenom ? "NON" donc "0"
Je valide le formulaire


***Formulaire***
Nom = Dupuis
Prenom = Jean-Pierre
***Verification après validation***
"Dupuis" existe-t-il dans la collone nom ? "NON" donc "0"
"Jean-Pierre" existe-t-il dans la collone prenom ? "OUI" donc "1"
Je valide le formulaire

Et le probleme est ICI :

***Formulaire***
Nom = Dupuis
Prenom = Olivier
***Verification après validation***
"Dupuis" existe-t-il dans la collone nom ? "OUI" donc "1"
"Olivier" existe-t-il dans la collone prenom ? "OUI" donc "1"
Je valide le formulaire

Effectivement, il existe bien un "Dupuis" et un "Olivier" dans la collone "Nom" et "Prenom" de la base de donnée mais le "Dupuis" correspond à "Dupuis Jean-Pierre" et "Olivier" à "Toto Olivier".

Ma solution pour résoudre ceci est que si l'on obtient "1" pour le nom et "1" pour le prenom, c'est de verifier que l'ID du "Nom" et du "Prenom" ne soit pas identique. Dans le cas contraire, effectivement, il y a un doublon !

J'espere avoir été claire...

Voici un schema de la base :
Code :
1
2
3
4
5
6
7
8
9
10
11
|  idClient  |  nomClient  |  prenomClient  ||  Binaire Nom  |  Binaire Prenom|
|_________|__________|_____________||____________|_____________|
|      1      |    Toto      |   Jean-Pierre    ||           0       |         0          |
|_________|__________|_____________||___________________________
|      2       |   Toto       |    Olivier         ||          1       |            0        |
|_________|__________|_____________||___________________________
|      3       |   Dupuis    |   Jean-Pierre    ||          0       |             1      |
|_________|__________|_____________||__________________________
|     4        |     Dupuis   |    Olivier        ||          1            |          1     |
|_________|__________|_____________||___________________________

Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
 
$vernom = "SELECT * FROM client WHERE nomClient='$nomClient'";
$verprenom = "SELECT * FROM client WHERE prenomClient='$prenomClient'";
$nom=mysql_query($vernom);
$prenom=mysql_query($verprenom);
if  ((mysql_num_rows($nom) != 0) && (mysql_num_rows($prenom) != 0))
     {
echo "<H1>Attention, une fiche client existe deja avec le même nom et prenom.</H1>";
}else{
echo "<H1>Je rentre les informations dans la base."</H1>
En attente d'un retour.

Cordialement
aikiox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 15h15   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
fais un seule requête qui vérifie le nom et le prénom en même temps...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 04/03/2011, 15h17   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Hello

Je pense que tu dois implémenter cette sécurité à deux niveaux:
- au niveau de la bdd en mettant une clé unique sur les deux champs concernés (attention, c'est le couple qui est unique)
- au niveau de PHP avant de faire la requête, tu fais un rapide select de ces deux champs pour vérifier qu'ils n'existent pas

Le comportement de ton script doit donc être:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
function exist ($prenomClient, $nomClient) {
	$query = "SELECT `nomClient`,`prenomClient` FROM `client` WHERE `nomClient`='$nomClient' AND `prenomClient`='$prenomClient'";
	if ($results = mysql_query($query)) {
		return mysql_num_rows($results);
	}
	else {
		die('QUERY ERROR');
	}
}
 
// EG
if (!exist('Roland','Dupont'))
{
  // Faire l'insert
}
Pour simplifier j'ai mis ça dans une fonction, adapte la en fonction de tes besoins.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/03/2011, 15h24   #4
Invité de passage
 
Romain Tiennot
Inscription : novembre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Romain Tiennot

Informations forums :
Inscription : novembre 2010
Messages : 10
Points : 0
Points : 0
Merci pour vos réponses.
Pour la clé unique, j'ai un "idClient" qui s’incrémente automatiquement a chaque ajout dans la base. C'est ce que tu as voulu dire?

Ensuite, je vais essayé ton code.


Cordialement
aikiox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 15h37   #5
Invité de passage
 
Romain Tiennot
Inscription : novembre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Romain Tiennot

Informations forums :
Inscription : novembre 2010
Messages : 10
Points : 0
Points : 0
Helas, je peux créer deux "Jean-Pierre", "Toto" et je n'ai pas d'erreur...
Je creuse.
aikiox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 15h52   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
commence par créer l'index unique pour les deux champs, mais n'oublie pas que les homonymes existes...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 16h08   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Citation:
Pour la clé unique, j'ai un "idClient" qui s’incrémente automatiquement a chaque ajout dans la base. C'est ce que tu as voulu dire?
Non pas du tout. idClient c'est ta clé primaire.

Fais:
Code :
1
2
 
ALTER TABLE `client`ADD UNIQUE INDEX (`nomClient`,`prenomClient`);
pour ajouter l'index unique sur le couple nom / prénom (attention aux homonymes comme l'a justement rappellé stealth35)
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/03/2011, 16h24   #8
Invité de passage
 
Romain Tiennot
Inscription : novembre 2010
Messages : 10
Détails du profil
Informations personnelles :
Nom : Romain Tiennot

Informations forums :
Inscription : novembre 2010
Messages : 10
Points : 0
Points : 0
Problème résolu !!!

En revanche, j'ai effectué la commande suivante :

Code :
ALTER TABLE `client`ADD UNIQUE INDEX (`nomClient`,`prenomClient`);
Mais je ne connais pas du tout son utilité. Peux-tu m'expliquer simplement son utilité ?

Merci encore.
aikiox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 16h57   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 014
Points : 5 014
Cette commande SQL permet de mettre un index unique sur le couple nom/prénom de ta table client. Cela empêche les doublons au niveau des insertions: si on tente d'en insérer un, ça échoue et une erreur sera levée par mysql.

ça ne te fera pas de mal de lire ça
http://dev.mysql.com/doc/refman/5.0/...l-indexes.html
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h55.


 
 
 
 
Partenaires

Hébergement Web