par
Ajoloca » 03 déc. 2006, 23:48
Il y a un problème avec ton code Ajoloca : il ne tient pas compte du nombre de cellules et dans l'exemple, la dernière ligne n'a qu'une seule cellule au lieu de 2 : le code n'est pas conforme et par conséquent encore moins valide.
Tu as oublié :
- Pas de doctype
- <table border="1">,
- dans chaque <td valign="top">.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="Bluefish 1.0.7"/>
<meta name="author" content="José LOPEZ"/>
<meta name="date" content="2006-12-04T07:31:42+0100"/>
<meta name="copyright" content=""/>
<meta name="keywords" content=""/>
<meta name="description" content=""/>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/>
<meta http-equiv="content-style-type" content="text/css"/>
<meta http-equiv="expires" content="0"/>
<!--<meta http-equiv="refresh" content="5; URL=http://"/>-->
<title>Prenoms</title>
<style type="text/css">
td {
border : solid 1px;
vertical-align: top;
}
</style>
</head>
<body>
<?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 = 0;
// 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>';
// Boucle sur les enregistrements trouvés
while($row = mysql_fetch_assoc($result)){
// Récupération de l'initial du prénom en cours
$initialeActuelle = strtoupper(substr($row['prenom'], 0, 1));
// Si changement d'initiale
if($initialeActuelle != $derniereInitiale){
//Si Pas le premier pénom
if($i != 0){
if($lettres % $nbCols == 0){// Si on doit changer de ligne
echo '</td></tr><tr><td>';
}
else { // On doit changer de colonne
echo '</td><td>';
}
}
// Incrémentation du nombre de lettres (pour gérer le nombre de colonnes)
$lettres++;
// 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 dernière colonne remplie
echo '</td>';
// On rempli toutes les colonnes de la ligne avec un espace insecable
while(($lettres) % $nbCols != 0){
echo '<td> </td>';
// Le nombre de lettres doit être incrémenté
// Il détermine le point d'arrêt
$lettres++;
}
?>
<!-- Fermeture de la table -->
</tr></table>
</body>
</html>
C'est mieux ?
[quote="Cyrano"]Il y a un problème avec ton code [b]Ajoloca[/b] : il ne tient pas compte du nombre de cellules et dans l'exemple, la dernière ligne n'a qu'une seule cellule au lieu de 2 : le code n'est pas conforme et par conséquent encore moins valide.[/quote]
Tu as oublié :
- Pas de doctype
- <table border="1">,
- dans chaque <td valign="top">.
[php]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="Bluefish 1.0.7"/>
<meta name="author" content="José LOPEZ"/>
<meta name="date" content="2006-12-04T07:31:42+0100"/>
<meta name="copyright" content=""/>
<meta name="keywords" content=""/>
<meta name="description" content=""/>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/>
<meta http-equiv="content-style-type" content="text/css"/>
<meta http-equiv="expires" content="0"/>
<!--<meta http-equiv="refresh" content="5; URL=http://"/>-->
<title>Prenoms</title>
<style type="text/css">
td {
border : solid 1px;
vertical-align: top;
}
</style>
</head>
<body>
<?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 = 0;
// 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>';
// Boucle sur les enregistrements trouvés
while($row = mysql_fetch_assoc($result)){
// Récupération de l'initial du prénom en cours
$initialeActuelle = strtoupper(substr($row['prenom'], 0, 1));
// Si changement d'initiale
if($initialeActuelle != $derniereInitiale){
//Si Pas le premier pénom
if($i != 0){
if($lettres % $nbCols == 0){// Si on doit changer de ligne
echo '</td></tr><tr><td>';
}
else { // On doit changer de colonne
echo '</td><td>';
}
}
// Incrémentation du nombre de lettres (pour gérer le nombre de colonnes)
$lettres++;
// 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 dernière colonne remplie
echo '</td>';
// On rempli toutes les colonnes de la ligne avec un espace insecable
while(($lettres) % $nbCols != 0){
echo '<td> </td>';
// Le nombre de lettres doit être incrémenté
// Il détermine le point d'arrêt
$lettres++;
}
?>
<!-- Fermeture de la table -->
</tr></table>
</body>
</html>[/php]
C'est mieux ?