|
|
|
|
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 ? |
oui mais je suis obligé d'insérer plusieurs fois le meme nom d'article car un article peut avoir plusieurs pages |
help please |
y'a vraiment personne qui a une solution la dessus |
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. |
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 ? |
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 |
tjs personne pour m'aider |
explique toi un peu mieux stp, je me ferais une joie de t'aider... ;-) |
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 |
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é. |
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 |
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'];
}
} |
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> |
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. |
ok je v voir |
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 |
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 ^^ ) |