Bonjour,
j'ai crée deux contraintes dans ma table "client".
Je voudrais afficher une erreur via fichier XML selon le champ qui est en double. J'avais opté pour la solution "détection erreur mysql" pour afficher mon erreur.
Voici ma table:
Voici ce que j'avais fait pour une seule contrainte dans mon code php:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE CLIENT ( client_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, client_login VARCHAR(30) NOT NULL, client_nom VARCHAR(30) NOT NULL, client_mail VARCHAR(40), client_passwd CHAR(40), -- mot de passe en SHA1 client_date_creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(client_id), UNIQUE(client_login), UNIQUE(client_mail) ) TYPE=INNODB CHARACTER SET latin1 COLLATE latin1_swedish_ci;
Bien entendu, vous l'avez deviné, l'erreur est la même si deux mêmes login ou deux mêmes email.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 $sql = "INSERT INTO CLIENT (client_nom , client_login, client_passwd, client_mail ) VALUES ('" . echapSQL($valeurForm['client_nom']) . "', '" . echapSQL($valeurForm['client_login']) . "', '" . echapSQL(sha1($valeurForm['client_passwd'])) . "', '" . echapSQL($valeurForm['client_mail']) . "')"; $result = mysql_query($sql); // Si pas de résultat on affiche une erreur, sinon on redirige vers page d'amin if (!$result) { if(mysql_errno() == 1062) // si doublon { $valeurForm['client_login'] = '';// on efface le champ inciminé $erreur = texteXml('//erreur/sql/message[@nom="doublon_client"]', 'xml/erreur.xml'); } else // sinon autre erreur $erreur = texteXml('//erreur/sql/message[@nom="requete"]', 'xml/erreur.xml'); } else header('location:admin.php?gestion=clients');
Connaissez vous une solution, en utilisant toujours le code d'erreur, pour voir quel champ est la cause de l'erreur ?
Merci d'avance.
EDIT:
J'ai trouvé cette solution mais pourriez vous me dire si c'est correct SVP ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 $sql = "INSERT INTO CLIENT (client_nom , client_login, client_passwd, client_mail ) VALUES ('" . echapSQL($valeurForm['client_nom']) . "', '" . echapSQL($valeurForm['client_login']) . "', '" . echapSQL(sha1($valeurForm['client_passwd'])) . "', '" . echapSQL($valeurForm['client_mail']) . "')"; $result = mysql_query($sql); // Si pas de résultat on affiche une erreur, sinon on redirige vers page d'amin if (!$result) { if(mysql_errno() == 1062) // si doublon { if ( preg_match('/client_login/', mysql_error() ) == 1 ) { $valeurForm['client_login'] = ''; $erreur = texteXml('//erreur/sql/message[@nom="doublon_login_client"]', 'xml/erreur.xml'); } elseif ( preg_match('/client_mail/', mysql_error() ) == 1 ) { $valeurForm['client_mail'] = ''; $erreur = texteXml('//erreur/sql/message[@nom="doublon_mail_client"]', 'xml/erreur.xml'); } } else // sinon autre erreur $erreur = texteXml('//erreur/sql/message[@nom="requete"]', 'xml/erreur.xml'); } else header('location:admin.php?gestion=clients');
Partager