Classement alphabétique

Eléphant du PHP | 136 Messages

03 déc. 2006, 20:22

je ne l'affiche pas et passe à la lettre suivante
Bisvan :)

ViPHP
ViPHP | 1961 Messages

03 déc. 2006, 20:26

Re,

Ma question était : la colonne doit rester vide ou pas ?

LETTRE A | LETTRE B
aaaaaaaa
aaaaaaa

LETTRE C | LETTRE D
ccccccc

ou bien

LETTRE A | LETTRE c
aaaaaaaa ccccc
aaaaaaa

LETTRE D | LETTRE E
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 136 Messages

03 déc. 2006, 20:39

oui, on passe à l'autre lettre dispo
ex si b, c et d aucuns prénoms :

LETTRE A | LETTRE F
prénom |prénom
prénom |prénom
Bisvan :)

Mammouth du PHP | 19672 Messages

03 déc. 2006, 21:19

Moins facile à comprendre, mais bon, j'espère qu'avec les commentaires tu t'y retrouveras :
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Lister des prénoms sur deux colonnes</title>
<style type="text/css">
/* <![CDATA[ */
td {
    width: 120px;
    vertical-align: top;
    border: 1px solid #000;
}
/* ]]> */
</style>
</head>
<body>
<?php
/* La liste des prénoms */
$prenoms = array("Alphonse", "Anatole", "Benoît", "Benjamin", "Bernard", "Damien", "Etienne", "Eusèbe", "François", "Frédéric");
/* On compte les prénoms */
$nb = count($prenoms);
/* On crée un point de repère vide au départ */
$lettre = "";
/* Création d'un repère pour savoir si on est dans la première ou la seconde colonne */
$col = 0;
?>
<table summary="">
  <tr>
    <td>
<?php
/* On boucle sur la liste des prénoms */
for($i = 0; $i < $nb; $i++)
{
    /* Récupération de la première lettre du prénom en cours */
    $prem_lettre = substr($prenoms[$i], 0, 1);
    /* Si la première lettre est différente du pointeur : */
    if($lettre != $prem_lettre)
    {
        /* Si on change de lettre, on change de colonne sauf pour le tout premier prénom */
        $col = ($col == 2 || $col == 0) ? 1 : 2;
        if($i != 0)
        {
?>
    </td>
<?php
        }
        /* Si on passe dans la colonne 1, on change de ligne sauf pour le tout premier prénom */
        if($col == 1 && $i != 0)
        {
?>
  </tr>
  <tr>
<?php
        }
        /* À l'exception du premier prénom, on ouvre la colonne suivante */
        if($i != 0)
        {
?>
    <td>
<?php
        }
        /* On affiche la ligne indiquant la lettre */
        echo("        <strong>Lettre ". $prem_lettre ."</strong><br />\n");
        /* On assigne la valeur de cette première lettre au point de repère */
        $lettre = $prem_lettre;
    }
    /* On affiche le prénom */
    echo("        ". $prenoms[$i] ."<br />\n");
}
/* Si la dernière colonne avec des prénoms est la colonne 1, on complète le tableau avec une cellule vide */
if($col == 1)
{
?>
    </td>
    <td>&nbsp;
<?php
}
?>
    </td>
  </tr>
</table>
</body>
</html>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 136 Messages

03 déc. 2006, 21:27

jm'en vais analyser tout ça :lol:

merci beaucoup pour ton aide :)
Bisvan :)

ViPHP
ViPHP | 1961 Messages

03 déc. 2006, 22:06

Une autre version
<?php
// On suppose que les accès à la base et la requête sont faits

/*
* Nombre de colonnes par ligne.
*
* Si on désire un autre nombre de colonnes dans la ligne
* Il suffit de modifier la valeur de cette variable
* sans toucher au reste du code
*/
$nbCols = 2;

// Lettres au départ. On considère que minimum un prénom
$lettres = 1;

// Permet de sortir du traitement le premier prénom
$i = 0; 
$derniereInitiale = ''; // Première intiale = chaîne vide
// construction du tableau
echo '<table><tr><td valign = "top">';
// Boucle sur les enregistrements trouvés
while($row = mysql_fetch_assoc($result)){
	// Récupération de l'initial du prénom en cours
   $initialeActuelle = substr($row['prenom'], 0, 1);
   // Si changement d'initiale
   if($initialeActuelle != $derniereInitiale){
   	//Si Pas le premier pénom
   	if($i != 0){
      	if($lettres % $nbCols){// Si on doit changer de ligne
      		echo '</td></tr><tr><td valign = "top">';
      	}
      	else { // On doit changer de colonne
      		echo '</td><td valign = "top">';
      	}
      }
      // Mémorisation de la nouvelle initiale
      $derniereInitiale = $initialeActuelle;
      // Affichage de la première 
      echo '<b>LETTRE ' . $derniereInitiale . '</b><br />';
   }
   // C'est plus le premier prénom
   $i = 1;
   Affichage du prénom
   echo $row['prenom'] . '<br />';
}
// Fermeture de la table
echo '</td></tr></table>';
?> 
M'sieu Albat,
Cyrano triche, il profite que je dinne pour me devancer et en plus il n'as pas fait sa punition :-*
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 136 Messages

03 déc. 2006, 22:23

Toc toc...mr ajoloca...votre script me change pas de placement,c ela reste une liste de haut en bas.

Pouvez vous me dire comment doit changer $i car je pige pas...c'est ptet là le soucis no ?
Bisvan :)

ViPHP
ViPHP | 1961 Messages

03 déc. 2006, 22:31

Re,

Il ne faut pas toucher à $i, c'est une variable pour la programmation.
Elle permet de sortir le premier prénom du reste du traitement.

Le script en l'état devrait afficher sur deu colonnes, si tu en veux 3 tu dois modifier la valeur de $nbCols comme ceci
$nbCols = 3; 
Je vais tester le script, mais il devrait fonctionner.

Je te tiens au courant.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 136 Messages

03 déc. 2006, 22:49

ok car j'ai testé mais je reste que sur une seule collonne...
et en cherchant le couac et bien...je reste quoit !
Bisvan :)

ViPHP
ViPHP | 1961 Messages

03 déc. 2006, 23:11

Re,

Il y avait 2 petites erreurs, voici un qui focntionne.

Dans ma table j'ai les enregistrements suivants

Code : Tout sélectionner

mysql> SELECT * FROM prenoms ORDER BY prenom; +-----------+ | prenom | +-----------+ | Alphonse | | Anatole | | Bernard | | Damien | | Emanuelle | | Eric | | Etienne | | Fabien | | Francis | +-----------+ 9 rows in set (0.00 sec)
Le code PHP
<?php
// Connexion à la base et extraction des données
$cnx = mysql_connect('localhost', '****', '****') or die ('ERR_CNX <br />' . mysql_error());
mysql_select_db('test', $cnx) or die('ERR_CHOIX_DB <br />' . mysql_error());
$qrySel = 'SELECT * FROM prenoms ORDER BY prenom';
$result = mysql_query($qrySel) or die('ERR_SQL : ' . $qrySel . '<br />' . mysql_error());

/*
* Nombre de colonnes par ligne.
*
* Si on désire un autre nombre de colonnes dans la ligne
* Il suffit de modifier la valeur de cette variable
* sans toucher au reste du code
*/
$nbCols = 2;

// Lettres au départ. On considère que minimum un prénom
$lettres = 1;

// Permet de sortir du traitement le premier prénom
$i = 0; 
$derniereInitiale = ''; // Première intiale = chaîne vide

// construction du tableau
echo '<table><tr><td valign = "top">';
// Boucle sur les enregistrements trouvés
while($row = mysql_fetch_assoc($result)){
	// Récupération de l'initial du prénom en cours
   $initialeActuelle = substr($row['prenom'], 0, 1);
   // Si changement d'initiale
   if($initialeActuelle != $derniereInitiale){
   	//Si Pas le premier pénom
   	$lettres++;
   	if($i != 0){
      	if($lettres % $nbCols == 0){// Si on doit changer de ligne
      		echo '</td></tr><tr><td valign = "top">';
      	}
      	else { // On doit changer de colonne
      		echo '</td><td valign = "top">';
      	}
      }
      // Mémorisation de la nouvelle initiale
      $derniereInitiale = $initialeActuelle;
      // Affichage de la première 
      echo '<b>LETTRE ' . $derniereInitiale . '</b><br />';
   }
   // C'est plus le premier prénom
   $i = 1;
   //Affichage du prénom
   echo $row['prenom'] . '<br />';
}
// Fermeture de la table
echo '</td></tr></table>';
?>
Et le résultat sur navigateur clique ici (Je n'arrive pas à garder les colonnes dans le post)
Modifié en dernier par Ajoloca le 03 déc. 2006, 23:19, modifié 1 fois.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 19672 Messages

03 déc. 2006, 23:17

Et le résultat sur navigateur clique ici (Je n'arrive pas à garder les colonnes dans le post)
Ho la belle 404 : pointer sur localhost, ça, c'est une idée :langue:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 136 Messages

03 déc. 2006, 23:19

:D huhuhuhuhu enfin je vais tester en local chez moi merci bcp :)

(j'aime bien ton localhost :P )
Bisvan :)

ViPHP
ViPHP | 3607 Messages

03 déc. 2006, 23:19

tu t'es encore trompé dans tes liens Ajoloca :wink:
http://www.joloca.eu/~jose/forum/ess2.php, c'est corrigé!

ViPHP
ViPHP | 1961 Messages

03 déc. 2006, 23:20

Oups...

C'est corrigé !

Merci Cyrano!
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 136 Messages

03 déc. 2006, 23:20

P.S : c'est quoi le dossier "jose"...j'ose ??? :?: 8)
Bisvan :)