par
sadeq » 23 oct. 2006, 16:28
Il te suffit d'ajouter un index de type UNIQUE sur le champ que tu souhaites unique.
Par ailleurs, dans ton code tu fais une requête, et MySQL te renvoie un bundle de résultats...tu dois d'abord traiter ce pack.
La solution de
mere-teresa est la meilleure, car si on est développeur on n'est pas simplement programmeur surtout quand on développe autours d'une base de données.
Et pour bien expliquer les choses : SQL prévoit déjà la technique "index unique" pour fixer une contrainte d'unicité d'enregistrement dans une table, il suffit donc de déclarer ton champ comme éttant un index unique par SQL au niveau de la base.
Côté programmation, le programmeur lui ne se souci plus de comment tester l'unicité car en lançant une requête INSERT ou UPDATE c'est le SGBD qui s'occupe de ce test avant l'acceptation de la requête.
C'est ce qui correspond à ton besoin, tu dois alors te contenter de soumettre ton INSERT/UPDATE et s'il y a echec tu recevras du SGBD le message d'erreur équivalent.
Par contre si ton programme veut effectivement vérifier l'existance d'un enregistrement dans le cadre d'une recherche, là oui, tu doit utiliser une requête SELECT avec un WHERE (comme tu fais) et là les réponses des autres amis sont claires, ton code est mal écrit car il faut d'abord lire le résultat de mysql_query() avec un mysql_fetch... pour accèder à l'information qui peut exister ou pas.
Comme ça par exemple :
<?php
//résultat de la recherche
$produit = mysql_query("SELECT Nomproduits FROM produits WHERE Nomproduits='".trim($nom)."'");
//test si le nom est trouvé
if (($row = mysql_fetch_assoc($produit)) { //si au moins une ligne est retournée par le résultat $produit
echo ("Ce produit existe déjà dans la base de données");
exit;
}
?>
Ceci dit, même si tu optes pour la solution recherche avec SELECT, la proposition de
mere-teresa n'est pas optionnelle mais une obligation vis-à-vis des règles du modèle de données puisque tu le présente comme tel.
[quote="mere-teresa"][color=darkblue]Il te suffit d'ajouter un index de type UNIQUE sur le champ que tu souhaites unique.
Par ailleurs, dans ton code tu fais une requête, et MySQL te renvoie un bundle de résultats...tu dois d'abord traiter ce pack.[/color][/quote]
La solution de [b]mere-teresa[/b] est la meilleure, car si on est développeur on n'est pas simplement programmeur surtout quand on développe autours d'une base de données.
Et pour bien expliquer les choses : SQL prévoit déjà la technique "index unique" pour fixer une contrainte d'unicité d'enregistrement dans une table, il suffit donc de déclarer ton champ comme éttant un index unique par SQL au niveau de la base.
Côté programmation, le programmeur lui ne se souci plus de comment tester l'unicité car en lançant une requête INSERT ou UPDATE c'est le SGBD qui s'occupe de ce test avant l'acceptation de la requête.
C'est ce qui correspond à ton besoin, tu dois alors te contenter de soumettre ton INSERT/UPDATE et s'il y a echec tu recevras du SGBD le message d'erreur équivalent.
Par contre si ton programme veut effectivement vérifier l'existance d'un enregistrement dans le cadre d'une recherche, là oui, tu doit utiliser une requête SELECT avec un WHERE (comme tu fais) et là les réponses des autres amis sont claires, ton code est mal écrit car il faut d'abord lire le résultat de mysql_query() avec un mysql_fetch... pour accèder à l'information qui peut exister ou pas.
Comme ça par exemple :
[php]<?php
//résultat de la recherche
$produit = mysql_query("SELECT Nomproduits FROM produits WHERE Nomproduits='".trim($nom)."'");
//test si le nom est trouvé
if (($row = mysql_fetch_assoc($produit)) { //si au moins une ligne est retournée par le résultat $produit
echo ("Ce produit existe déjà dans la base de données");
exit;
}
?>[/php]
Ceci dit, même si tu optes pour la solution recherche avec SELECT, la proposition de [b]mere-teresa[/b] n'est pas optionnelle mais une obligation vis-à-vis des règles du modèle de données puisque tu le présente comme tel.