[supprimer les doublons en php]
Résolu/Fermé
antic80
-
25 mai 2005 à 15:08
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 - 31 mai 2005 à 14:33
antic80 Messages postés 4785 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 - 31 mai 2005 à 14:33
A voir également:
- [supprimer les doublons en php]
- Supprimer les doublons excel - Guide
- Supprimer une page word - Guide
- Supprimer compte instagram - Guide
- Supprimer les doublons photos gratuit - Télécharger - Nettoyage
- Doublons photos - Guide
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.
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.
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
31 mai 2005 à 14:33
31 mai 2005 à 14:33
voila c bon tout est reglo
un grand merci a Nashouille
un grand merci a Nashouille
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
25 mai 2005 à 15:30
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 ?
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 ?
oui mais je suis obligé d'insérer plusieurs fois le meme nom d'article car un article peut avoir plusieurs pages
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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é
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 ?
un truc du genre article1/page1 s'il est deux fois dans la liste ?
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
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
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
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
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]
Mais cela ne fonctionne que dans l'hypothèse où le tableau est remplit dans l'ordre ou tu nous l'as affiché.
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é.
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
30 mai 2005 à 15:14
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
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
J'ai pas de serveur web sous la main pour tester désolé.
Ca ça donne quoi?
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']; } }
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
30 mai 2005 à 15:56
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>
<!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>
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 :
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.
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.
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
30 mai 2005 à 16:20
30 mai 2005 à 16:20
ok je v voir
antic80
Messages postés
4785
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 159
30 mai 2005 à 16:33
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
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
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 ^^ )
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 ^^ )