Rechercher : dans
Par :

[supprimer les doublons en php]

Dernière réponse le 31 mai 2005 à 14:33:17 antic80, le 25 mai 2005 à 15:08:05 
 Signaler ce message aux modérateurs

Bonjour

comment supprimer les doublons dans une liste déroulante php

Meilleures réponses pour « [supprimer les doublons en php] » dans :
MySQL - Supprimer des doublons dans une table VoirPour supprimer des doublons au niveau d'une table donnée définie comme suit : CREATE TABLE IF NOT EXISTS TabTest ( cle_prim integer(4) NOT NULL auto_increment, x integer, y integer, z integer, ...
Supprimer les doublons dans une colonne Excel VoirPour extraire les doublons dans une colonne Excel : Cliquer sur le menu "Données" "Filtrer" "Filtre élaboré" Dans ce menu, sélectionner la colonne où se trouvent les doublons Cocher la case "Extraire sans doublon" La seule chose est que...
Supprimer les accents avec PHP VoirPour un tas de raisons, il est parfois utile de convertir un texte accentué en un texte sans accents. Voici une fonction permettant de transformer très simplement la quasi-totalité des accents en leur équivalent non-accentués : function...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
Javascript - Les tableaux VoirIntroduction à la notion de tableau Les variables de Javascript ne permettent de stocker qu'une seule donnée à la fois. Or, étant donné qu'il est souvent utile de manipuler de nombreuses données, le concept de variable se révéle parfois...

1

mamiemando, le 25 mai 2005 à 15:30:58

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 ?

Répondre à mamiemando

2

antic, le 25 mai 2005 à 15:33:24

Oui mais je suis obligé d'insérer plusieurs fois le meme nom d'article car un article peut avoir plusieurs pages

Répondre à antic

3

antic80, le 25 mai 2005 à 15:46:10

Help please

Répondre à antic80

4

antic80, le 25 mai 2005 à 16:32:17

Y'a vraiment personne qui a une solution la dessus

Répondre à antic80

5

karine, le 25 mai 2005 à 16:42:32

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.

Répondre à karine

6

antic80, le 25 mai 2005 à 16:49:16

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é

Répondre à antic80

7

karine, le 25 mai 2005 à 16:51:30

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 ?

Répondre à karine

8

antic80, le 25 mai 2005 à 16:55:50

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

Répondre à antic80

9

antic80, le 27 mai 2005 à 16:51:40

Tjs personne pour m'aider

Répondre à antic80

10

romain, le 27 mai 2005 à 17:01:20

Explique toi un peu mieux stp, je me ferais une joie de t'aider... ;-)

Répondre à romain

11

tony, le 27 mai 2005 à 17:17:44

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

Répondre à tony

12

Nashouille, le 30 mai 2005 à 15:03:47

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é.

Répondre à Nashouille

13

antic80, le 30 mai 2005 à 15:14:49

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

Répondre à antic80

14

Nashouille, le 30 mai 2005 à 15:36:06

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'];
	}
}

Répondre à Nashouille

15

antic80, le 30 mai 2005 à 15:56:49

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>

Répondre à antic80

16

Nashouille, le 30 mai 2005 à 16:16:16

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.

Répondre à Nashouille

17

antic80, le 30 mai 2005 à 16:20:55

Ok je v voir

Répondre à antic80

18

antic80, le 30 mai 2005 à 16:33:16

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

Répondre à antic80

19

Nashouille, le 30 mai 2005 à 16:40:58

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 ^^ )

Répondre à Nashouille
Collection CommentÇaMarche.net