doublons dans listes de choix

Eléphant du PHP | 289 Messages

01 août 2005, 15:38

Bonjour le forum,

j'ai une question pour vous.
j'ai une table de données qui se décompose de la maniere suivante:
N° equipement | slug | photo

a partir de cette table, j'ai la possibilité de faire évoluer ma liste de choix des slugs en fonction du n° choisi.

le PB est qu'il risque d'y avoir des doublons. ma question est la suivante:
comment faire pour eviter les doublons ;=) ?

merci de votre aide,
FAb

PS: ci-joint le code actuel:
<?php require_once('Connections/TCS.php'); ?>
<?php
mysql_select_db($database_TCS, $TCS);
$query_Recordset1 = "SELECT * FROM equipement ORDER BY numero ASC";
$Recordset1 = mysql_query($query_Recordset1, $TCS) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

$colname_Recordset2 = "1";
if (isset($_GET['num'])) {
  $colname_Recordset2 = (get_magic_quotes_gpc()) ? $_GET['num'] : addslashes($_GET['num']);
}
mysql_select_db($database_TCS, $TCS);
$query_Recordset2 = sprintf("SELECT slug.type, equipslug.ID FROM equipslug, slug WHERE equipslug.equipment = '%s' AND equipslug.slug=slug.ID", $colname_Recordset2);
$Recordset2 = mysql_query($query_Recordset2, $TCS) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);

$colname_Recordset3 = "1";
if (isset($_GET['num'])) {
  $colname_Recordset3 = (get_magic_quotes_gpc()) ? $_GET['num'] : addslashes($_GET['num']);
}
mysql_select_db($database_TCS, $TCS);
$query_Recordset3 = sprintf("SELECT equipement.numero   FROM equipslug, equipement WHERE equipslug.equipment = '%s' AND equipslug.equipment=equipement.ID", $colname_Recordset3);
$Recordset3 = mysql_query($query_Recordset3, $TCS) or die(mysql_error());
$row_Recordset3 = mysql_fetch_assoc($Recordset3);
$totalRows_Recordset3 = mysql_num_rows($Recordset3);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form name="form1" method="get" action="testliste.php">
  <p>
    <select name="num" id="num">
      <?php
do {  
?>
      <option value="<?php echo $row_Recordset1['ID']?>"><?php echo $row_Recordset1['numero']?></option>
      <?php
} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
  $rows = mysql_num_rows($Recordset1);
  if($rows > 0) {
      mysql_data_seek($Recordset1, 0);
	  $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  }
?>
    </select>
    <input type="submit" name="Submit" value="Envoyer">
</p>
</form>
<form name="form2" method="post" action="">
  <select name="select2">
    <?php
do {  
?>
    <option value="<?php echo $row_Recordset2['ID']?>"><?php echo $row_Recordset2['type']?></option>
    <?php
} while ($row_Recordset2 = mysql_fetch_assoc($Recordset2));
  $rows = mysql_num_rows($Recordset2);
  if($rows > 0) {
      mysql_data_seek($Recordset2, 0);
	  $row_Recordset2 = mysql_fetch_assoc($Recordset2);
  }
?>
  </select>  
  <input type="submit" name="Submit2" value="Envoyer">
  <?php echo $row_Recordset3['numero']; ?>
</form>
<p>&nbsp;</p>
</body>
</html>
<?php
mysql_free_result($Recordset1);
mysql_free_result($Recordset2);
mysql_free_result($Recordset3);
?>
je dois être la seule souris au monde qui ne fait pas peur aux néléphants ! :=)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 août 2005, 15:40

tu peux mettre la propriété UNIQUE sur le champ en question en base de données.
L'insertion d'une valeur déjà présente te renverra donc une erreur qu'il te suffira de récupérer/traiter

Tu peux aussi lors de l'insertion faire un

Code : Tout sélectionner

SELECT COUNT(*) AS nbValeurs FROM table WHERE champ ='valeurAinserer'
si le résultat est positif, la valeur est déjà présente, donc on ne l'insère pas

Mammouth du PHP | 19672 Messages

01 août 2005, 15:41

Salut,
en fait au lieu d'une grande tartine de code, il nous faudrait un exemple: si tu as la structure exacte de ta table et un jeu d'essai avec un exemple de ce que tu voudrais obtenir et ce que tu obtiens effectivement, ce sera mille fois plus rapide de te fournir une réponse efficace.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 289 Messages

01 août 2005, 15:48

bonjour tous les 2,

dsl pour la tartine mais j'avais un peu fain (ok, elle etait facile!!)

En fait, ma page comporte:
2 listes déroulantes.
dans la premiere liste, je choisis le numéro de l'équipement et dans la seconde le type de slug en fonction du numéro choisi.

pour cela, j'ai une table "equipslug" ou g tous mes enrgistrements. cette table me sert de base de données pour les phtos des equipments mais le souci est que chaque mois, je rejoute une photo par equipement et par slug.

je ne sais pas si c plus clair :oops: ?
FAb
je dois être la seule souris au monde qui ne fait pas peur aux néléphants ! :=)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 août 2005, 15:49

moi j'aimerais bien savoir ce qu'est un "slug" déjà :oops:

et ce que je t'ai donné comme principes ne t'aide pas ?

Eléphant du PHP | 289 Messages

01 août 2005, 15:54

un slug est un point de mesure sur un equipement

si g bien compris ce que tu me dis, ta fonction me permettra de ne pas insérer 2 fois le meme enregistrement. or dans mon cas, j'aurai le meme n° d'equipement, le meme slug mais une photo différentes.

Mon souci vient donc du fait que je prends en fait toutes les valeurs des slugs qui ont le meme n°d'équipement.
je dois être la seule souris au monde qui ne fait pas peur aux néléphants ! :=)

Mammouth du PHP | 19672 Messages

01 août 2005, 15:55

Quand je parle d'un jeu d'essai, je pense à quelque chose dans ce goût là :

Code : Tout sélectionner

+---------------------------------------------------+ | table xyz | +------------+-------------------+------------------+ | champ_id | champ_a | champ_b | +------------+-------------------+------------------+ | 1|valeur a 1 |valeur b 1 | | 2|valeur a 2 |valeur b 2 | | 3|valeur a 3 |valeur b 3 | | 4|valeur a 4 |valeur b 4 | | 5|valeur a 5 |valeur b 5 | | 6|valeur a 6 |valeur b 6 | +------------+-------------------+------------------+
À partir de là on peut beaucoup plus facilement visualiser ton problème pour autant que ce soit accompagné des exemples de ce que tu veux obtenir et de ce que tu obtiens d'erronné.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 août 2005, 16:01

si g bien compris ce que tu me dis, ta fonction me permettra de ne pas insérer 2 fois le meme enregistrement. or dans mon cas, j'aurai le meme n° d'equipement, le meme slug mais une photo différentes.
oui, mais c'est un exemple
le principe reste le même : tu comptes le nombre d'enregistrement qui ont les mêmes propriétés que l'insertion que tu souhaites faire

si tu en trouves, c'est qu'il va y avoir un doublon

à toi d'adapter avec tes valeurs, tes tables

Eléphant du PHP | 289 Messages

01 août 2005, 16:02

Code : Tout sélectionner

+--------------------------------------------------------+ | table equipslug | +------------+-------------------+-----------------------+ | champ_id | equipment | slug | Photo | +------------+-------------------+-----------------------+ | 1|valeur a 1 |valeur b 1 | a1 | | 2|valeur a 2 |valeur b 2 | b1 | | 3|valeur a 1 |valeur b 3 | a2 | | 4|valeur a 2 |valeur b 2 | b2 | | 5|valeur a 2 |valeur b 2 | b3 | | 6|valeur a 1 |valeur b 1 | a3 | +------------+-------------------+--------------+--------+
on voit donc bien qu'il y a 2 equimpents et entre 2 et 3 slug par equipement.
je dois être la seule souris au monde qui ne fait pas peur aux néléphants ! :=)

Mammouth du PHP | 19672 Messages

01 août 2005, 16:21

:roll: L'art de bien formuler une question : c'est vrai que si tout le monde comprenait ça, ce forum n'aurais quasiment plus de raison d'être.

Bon, ok, là, je vois un exemple de données. Maintenant, formule ta question : tu voudrais obtenir quoi au juste : actuellement comment formules-tu ta requête SQL et qu'obtiens-tu ? Là, ce sera facile.... même pour toi de trouver la réponse.

Jusqu'à présent, il faudrait qu'on décortique ton code pour comprendre à peu près comment ça fonctionne... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 289 Messages

01 août 2005, 16:42

je suis touta fait d'accord avec toi sur la clareté des questions mais des fois c pas facile a formuler 8)

Ma requete sur la seconde liste est du genre:
afficher tous les slugs ayant pour n° d'equipment "num"
$colname_Recordset2 = "1";
if (isset($_GET['num'])) {
  $colname_Recordset2 = (get_magic_quotes_gpc()) ? $_GET['num'] : addslashes($_GET['num']);
}
mysql_select_db($database_TCS, $TCS);
$query_Recordset2 = sprintf("SELECT slug.type, equipslug.ID FROM equipslug, slug WHERE equipslug.equipment = '%s' AND equipslug.slug=slug.ID", $colname_Recordset2);
$Recordset2 = mysql_query($query_Recordset2, $TCS) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
voila :=)
je dois être la seule souris au monde qui ne fait pas peur aux néléphants ! :=)

Mammouth du PHP | 19672 Messages

01 août 2005, 16:56

...des fois c pas facile a formuler ...
C'est précisément pour ça que tu ne trouves pas la réponse ;)

Autre chose, quand je vois ton code..... si tu apprenais à créer tes requêtes tout seul à la main au lieu d'essayer de corriger les requêtes méthode DreamWeaver, tu gagnerais pas mal de temps à terme.

Bon, ton code fait référence à un champ qui n'est pas dans la table montrée plus haut et à une table que tu ne montres pas non plus. C'est comme si tu me demandais comment réparer un carburateur en me montrant un tournevis et une fouchette : qu'est-ce que la fourchette fait dans le décor ??

Reprends ta copie et fais une question complète : les deux tables avec jeu d'essai (lignes exemples avec des données, même bidon on s'en tape) , ce que tu voudrais obtenir, par exemple telle ligne que tu précises, et ce que tu obtiens avec ta requête.

Et puis pour finir, voici comment simplifier et éclaircir un peu :
<?php
$colname_RS2 = "1";
if (isset($_GET['num']))
{
  $colname_RS2 = (get_magic_quotes_gpc()) ? $_GET['num'] : addslashes($_GET['num']);
}
mysql_select_db($database_TCS, $TCS);

$query_RS2 = "SELECT slug.type, equipslug.ID 
              FROM equipslug, slug 
              WHERE equipslug.equipment = '". $colname_RS2 ."' 
              AND equipslug.slug=slug.ID";

$RS2 = mysql_query($query_RS2, $TCS) or die(mysql_error());
$row_RS2 = mysql_fetch_assoc($RS2);
$totalRows_RS2 = mysql_num_rows($RS2);
?>
Note que je n'ai rien changé, juste modifié des noms de variable en remplaçant Recordset par RS partout, tout de suite on y voit plus clair et ensuite des retours de ligne pour la requête.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
pjl
ViPHP | 2119 Messages

01 août 2005, 17:05

Bonjour le forum,

j'ai une question pour vous.
j'ai une table de données qui se décompose de la maniere suivante:
N° equipement | slug | photo

a partir de cette table, j'ai la possibilité de faire évoluer ma liste de choix des slugs en fonction du n° choisi.

le PB est qu'il risque d'y avoir des doublons. ma question est la suivante:
comment faire pour eviter les doublons ;=) ?
PB de base de données, ca ?
Alors tu donnes la requete qui pose PB et pas la peine de donner le code PHP qui va avec.
C'est beaucoup plus clair et ca évite les embrouilles.

Pour ta réponse, regarde donc du coté des fonctions SQL comme DISTINCT et GROUP BY. Tu devrais trouver ta réponse.
Et on peut déplacer ce post dans base de données.
Il n'a rien à faire dans Débuter en PHP.

Eléphant du PHP | 289 Messages

01 août 2005, 17:07

copie corrigée:
<?php 
$colname_RS2 = "1"; 
if (isset($_GET['num'])) 
{ 
  $colname_RS2 = (get_magic_quotes_gpc()) ? $_GET['num'] : addslashes($_GET['num']); 
} 
mysql_select_db($database_TCS, $TCS); 

$query_RS2 = "SELECT *
              FROM equipslug
              WHERE equipment = '". $colname_RS2 ."'; 

$RS2 = mysql_query($query_RS2, $TCS) or die(mysql_error()); 
$row_RS2 = mysql_fetch_assoc($RS2); 
$totalRows_RS2 = mysql_num_rows($RS2); 
?> 
maintenant il n'y a plus que le trounevis. :wink:
je dois être la seule souris au monde qui ne fait pas peur aux néléphants ! :=)

Eléphant du PHP | 289 Messages

02 août 2005, 08:39

bonjour,

J'ai essayé d'utiliser la fonction DISTINCT mais ca ne filtre pas les doublons :(
voici comment je l'ai utilisée:
"SELECT DISTINCT * 
              FROM equipslug 
              WHERE equipment = '". $colname_RS2 ."
merci de votre aide,
FAb
je dois être la seule souris au monde qui ne fait pas peur aux néléphants ! :=)