[supprimer les doublons en php]

Résolu/Fermé
antic80 - 25 mai 2005 à 15:08
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 - 31 mai 2005 à 14:33
bonjour

comment supprimer les doublons dans une liste déroulante php
A voir également:

27 réponses

Salut !

Tu peux peut-etre mettre tes valeurs dans un tableau d'abord puis enlever les doublons avec ça :
http://www.nexen.net/docs/php/annotee/function.array-unique.php

Puis mettre le tout dans ta liste déroulante.
2
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
31 mai 2005 à 14:33
voila c bon tout est reglo

un grand merci a Nashouille
1
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
25 mai 2005 à 15:30
A part écrire un petit code javascript ou php je vois pas de méthode simple. Un truc du genre (en pseudo code) :

for(i=0;i<taille_liste;i++){
for (j=i;j<taille_liste;){
if(element[i]==element[j]) retirer element[j];
else j++;
}
}

Mais il serait plus simple d'empêcher l'insertion de doublons non ?
0
oui mais je suis obligé d'insérer plusieurs fois le meme nom d'article car un article peut avoir plusieurs pages
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
help please
0
y'a vraiment personne qui a une solution la dessus
0
oui mais je vois pas comment car ds ma base sql j'ai plusieurs fois le meme article avec des pages différentes donc si je supprime les doublons au niveau du nom de l'article je n'aurais plus qu'une seule page a affiché
0
Quand est-ce qu'il y a des doublons que tu veux supprimer alors ?

un truc du genre article1/page1 s'il est deux fois dans la liste ?
0
dans ma base j'ai :

article 1 page1
article 1 page 2
article 1 page 3
article 2 page 1
article 2 page 2

dans ma liste je veux

article 1 page 1
page 2
page 3
article 2 page 1
page 2
0
tjs personne pour m'aider
0
explique toi un peu mieux stp, je me ferais une joie de t'aider... ;-)
0
En BD Oracle ça marcherai

BREAK ON "article";
SELECT article AS "article", page
FROM table
GROUP BY article , page
ORDER BY lien ;

Apres en mysql jsuis pas sur que l'instruction break on existe

bon courage
0
Je ne suis pas sur de bien répondr eà la question, quelle est la forme du stockage des articles/pages.
l'idéal serait d'utiliser un tableau à 2 dimensions: $tab[article][page]
for($i=0;$i<$tab.size();$i++) //j'ai pas fait de php depuis longtemps je suis pas //sur du tout pour la taille ^^
{	
	echo $tab[$i];
	for($j=0; $j<$tab[$i].size(); $i++)
	{
		echo $tab[$i][$j]."<br>";
	}
}

Mais cela ne fonctionne que dans l'hypothèse où le tableau est remplit dans l'ordre ou tu nous l'as affiché.
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
30 mai 2005 à 15:14
en fait j'ai commencer ce projet y'a quelques semaines

je rentre mes données de la maniere suivante

je rentre les articles de la rubrique dossiers spéciaux puis ceux de la rubrique courrier puis ceux de la rubrique fiche.

je fais ca chaque semaine

les articles sont tous ds la meme table de la maniére suivante

titre de l'article | page de l'article | logiciel

donc dans ma table article tu peux voir

titre de l'article | page de l'article | logiciel

comment faire du vélo | page 1|
comment faire du vélo | page 2|

et moi ds ma liste j'aimerai afficher

comment faire du vélo
....page 1
....page 2
0
J'ai pas de serveur web sous la main pour tester désolé.
Ca ça donne quoi?
$sql = 'SELECT * FROM fiche ORDER BY Titre;'; 
$query = mysql_query($sql) or die( 'Erreur' );
$nb = mysql_num_rows($query);
if ( !$nb[0] ) 
{
	echo 'Aucun article';
} 
else 
{$prec=0;
	while ( $list = mysql_fetch_array( $query ) ) {
	{
		if($prec != $list['Titre'])
			echo $list['Titre']."<BR>";
		
		echo $list['page']."<BR>";
		
		$prec = $list['Titre'];
	}
}
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
30 mai 2005 à 15:56
pour faire plus simple je t'envoie le code que j'ai deja fais peut etre sa sera plus facile pour toi

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<title>Document sans titre</title>

</head>

<body>
<table border="1" bgcolor="" width="100%">
<tr>
<td class="tableaugauche" >
<font face="@Arial Unicode MS" size="6"><b><div align="center">Mon encyclopédie Informatique</div></b></font>
</td>
</tr>
</table>



<table border="1" bgcolor="" width="100%">
<tr>
<td class="tableaugauche" width="">
<FORM ACTION="nouveau.php" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">
<SELECT NAME="Categorie" >
<OPTION value="1">Dossiers Spéciaux
<OPTION value="2">Courrier des lecteurs
<OPTION value="3">Fiches Techniques
</SELECT>
<INPUT TYPE="SUBMIT" VALUE="Envoyez">

</DIV>


</form>



<?php
// connexion à la base
$Host = "localhost";
$User = "root";
$Password = "antic";
$Database = "micro";

$idConnect = mysql_connect( $Host, $User, $Password)
or die( "Connexion impossible.");
$db = mysql_select_db( $Database, $idConnect)
or die( "Accès base impossible.");

if(isset($_POST['Categorie'])) $Categorie=$_POST['Categorie'];
else $Categorie="";

if(isset($_POST['Article']))
$tmp = $_POST['Article'];
else
$tmp = "";
$image = "";

// Requête SQL

$rqSql = "SELECT Id,Titre,Page,Logiciel FROM article where CodeCat=$Categorie";

// Exécution de la requête
$result = mysql_query( $rqSql, $idConnect) or die( "Pour obtenir la liste des articles veuillez sélectionner une catégorie");

$liste2="<select name='Article' style='font: 10pt arial;'>";
while ( $row = mysql_fetch_array( $result)){
$Id = $row["Id"];
$Titre= $row["Titre"];
$Page= $row["Page"];
if($Id == $tmp)
$image = $Page;
$Logiciel = $row["Logiciel"];
$liste2 .="<optgroup label=\"$Titre\">";
$liste2 .= "<option value='$Id'>...............$Page</option>";
$liste2 .="</optgroup >";
}

$liste2 .="</select>";
print '<form method="POST" action="encyc.php">';
print $liste2;

print '<INPUT TYPE="hidden" NAME="Categorie" VALUE="'.$Categorie.'">';
print '<INPUT TYPE="SUBMIT" NAME="envoie" VALUE="Affichez">';
print '</form>';



mysql_close( $idConnect);
?>

</td>
</tr>
</table>
<table border="1" width="100%">
<tr>
<td class="tableaugauche">
<?php
if( $image != "" )
{
echo "<IMG width='900px' SRC=\"".$image.".jpg\">";

}
else echo "pas d'image choisie...";
?>



</td>
</tr>
</table>
</body>
</html>
0
Donc ça ça affiche
article 1
.......page1
aticle 1
.....page2

Je voit pas grand chose à changer. Pour eviter les doublon sur le titre j'aurais fait :
$rqSql = "SELECT Id,Titre,Page,Logiciel FROM article where CodeCat=$Categorie ORDER BY Titre"; //on range dans l'ordre des articles

// Exécution de la requête
$result = mysql_query( $rqSql, $idConnect) or die( "Pour obtenir la liste des articles veuillez sélectionner une catégorie");
$prec=0;
$liste2="<select name='Article' style='font: 10pt arial;'>";
while ( $row = mysql_fetch_array( $result)){
$Id = $row["Id"];
$Titre= $row["Titre"];
$Page= $row["Page"];
if($Id == $tmp)
$image = $Page;
$Logiciel = $row["Logiciel"];
if($prec!=$Titre)      //On regarde si on a changé d'article
{  $liste2 .="<optgroup label=\"$Titre\">"; }
$liste2 .= "<option value='$Id'>...............$Page</option>";
if($prec!=$Titre)
{ $liste2 .="</optgroup >"; }
$prec=$Titre; //on change la valeur de l'article precedent pour le prochain tour
} 


En fait étant donné que les articles sont dans l'ordre, on a juste à savoir si l'article précédent est le meme que l'actuel, si l'article est le même on ne l'affiche pas autrement on l'affiche.
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
30 mai 2005 à 16:20
ok je v voir
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
30 mai 2005 à 16:33
y'a juste un problème le 1er titre ne s'affiche pas

pour le 1ere titre il me met juste les pages et ensuite il me met le nom de l'article suivant

a part ca l'affichage est parfais
0
Ah oui c'est peut-être $prec qui est mal initialisé, en le mttant à 0 il doit le prendre pour un int et la comparaison dans le if ne fonctionne pas.
Essaye de remplacer $prec=0 par $prec="" ou une chaine qui ne sera jamais jamais (genre mhqsoifhqspofihqsf risque fort de ne pas être le titre d'un article ^^ )
0