Valeurs déjà présentes dans un champ UNIQUE

Petit nouveau ! | 3 Messages

09 sept. 2010, 18:26

Bonjour à tous
Si je tente un INSERT ou un UPDATE avec une/des valeurs déjà présentent dans des champs avec l'option UNIQUE l'action est normalement refusée.
Est-ce qu'il est possible de connaître en retour de ma requête la/les valeurs déjà présentes que j'ai tenté de dupliquer ?
Voici la requête que j'utilise sur une table de test :

Code : Tout sélectionner

function ajouter($uid, $heure) { $rs = mysql_query("INSERT INTO `_test` (uid, sap) VALUES ('$uid', '$heure')") ; if ( $rs == true ) { return $rs; } else { return ------"; } }
Merci de votre aide.

Petit nouveau ! | 3 Messages

09 sept. 2010, 19:16

Bon j'ai cherché et trouvé cette solution qui fonctionne :

Code : Tout sélectionner

function ajouter($uid, $heure) { $rs = mysql_query("INSERT INTO `_test` (uid, sap) VALUES ('$uid', '$heure')") ; if ( $rs == true ) { return $rs; } else { $sap = mysql_query(" SELECT `sap` FROM `_test` WHERE `sap` = '$heure' "); return "RDV sap de ".$heure." est pris"; } }
Est-ce que ça vous paraît correct ?

Mammouth du PHP | 19672 Messages

09 sept. 2010, 19:23

C'est en amont que je ferais autrement : lors de la validation des données et avant toute tentative d'insertion, je récupèrerais la liste des valeurs de la colonne UNIQUE. Ensuite, je teste la présente de la valeur saisie par l'utilisateur avec un bête in_array() : si je ne le trouve pas, je peux lancer l'insertion, sinon, je retourne un message d'erreur à l'utilisateur.

Accessoirement, j'ajouterais que je ferais même ça plus tôt encore : au moment de la construction du formulaire. J'encore en JSON la liste des valeurs et je mets ça dans une variable JavaScript qui me permet de tester à la volée avant même l'envoi du formulaire au serveur.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

09 sept. 2010, 20:04

Merci pour ta réponse.

A priori je ne peux pas faire ce que tu dis (hors mis le fais que j'utilise mal javascript :wink: )
Voici pourquoi.

Techniquement, il s'agit d'un formulaire en flash gérer avec amfphp pour les insert le update et le toutim !

Pour le formulaire, il s'agit de Rendez-vous d'entretiens dans un séminaire.
J'ai la bagatelle de dix sujets d'entretiens avec pour chacun d'eux 8 plages horaires différentes.
Chaque RDV est absolument unique.
L'utilisateur doit pouvoir voir les RDV déjà pris (case à coché selected et enabled) et voir ses propre RDV pour modification (case selected)... et bien sûr ne pas choisir deux fois le même horaire... ça commence à faire pas mal :mrgreen:

Je vérifie donc au moment de l'insert ou de l'update, car le temps que l'utilisateur remplisse son formulaire, il se pourrait qu'un autre utilisateur est pris le même RDV #-o

Mammouth du PHP | 19672 Messages

09 sept. 2010, 20:28

Même en flash avec AMFPHP, et d'autant plus même : tu récupères la liste et tu la transmets via AMFPHP à ton code AS qui pourra réagir immédiatement si l'horaire choisi est déjà bloqué. Il faudra quand même de toutes façons une validation pour le cas où deux personnes choisissent simultanément un même horaire libre : là, ce sera pour le premier servi, mais le sachant, tu pourras même adapter le message.

Enfin bon, tu demandais un avis, je t'ai donné le mien, mais ton système semble fonctionner donc après, c'est à toi de voir ce qui est le plus efficace sans que ça n'alourdisse trop le système global. Ceci étant sur un plan plus général, il vaudrait mieux éviter de baser un fonctionnement quelconque sur des retours d'erreurs et se baser plutôt sur des données connues.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: