2010-11-09 6 views
0

Une fonction personnalisée php renvoie un jeu d'enregistrements à partir d'une requête mysql.Remplissage d'enregistrements au format Html Table

J'ai besoin de remplir une table à deux colonnes ayant une quantité égale ou équilibrée entre deux.

Je sais que nous pouvons diviser par le nombre de colonnes le nombre de lignes, puis utiliser une boucle pour peupler chaque td en conséquence.

Des suggestions ou un moyen pratique d'afficher des ensembles d'enregistrements sur des tables organisées en fonction de leur taille?

Ne pas utiliser de modèles pour le moment.

Fondamentalement besoin de contrôler l'étiquette TD d'écho ou non et rempli.

Exemple de code:

$col_num = 2; //Number of colums to parse data onto. 

$count_r = mysql_num_rows($result)/$col_num; 

echo '<table style="width:400px;border:3px solid green;"><tr><td>'; 

$ui=1; 

while($row = mysql_fetch_array($result)) 
{        
    if($ui<$count_r) 
     { 

      echo '<input disabled type="checkbox" value="$row[id]"'; $this->ischecked($uid,$row[id]); echo "/>".$row['name'].'<br>'."\r\n"; 

     } 
    $ui++; 
} 

//FIRST COLUMN SET 

echo '</td>'; 

echo '<td>'; 

//SECOND COLUMN SET 


echo '</td></tr></table>'; 
+0

Est-ce important si les enregistrements sont répertoriés dans l'ordre? –

+0

De préférence. Merci – Codex73

Répondre

1

Si cela ne vous dérange pas de l'ordre de vos dossiers, vous pouvez simplement faire (en supposant que vous avez obtenu vos résultats dans un tableau appelé $result) les éléments suivants:

... 
echo "<table>"; 
for($i=0;$i<count($result);$i+=2): 
    echo "<tr>"; 
     echo "<td>{$result[$i]['field']}</td>"; 
     echo "<td>{$result[$i+1]['field']}</td>"; 
    echo "</tr>"; 
endfor; 
echo "</table>"; 

Je ne sais pas si c'est la meilleure façon de le faire, mais c'est comme ça que je le ferais dans votre cas. Gardez à l'esprit que je ne vérifie pas s'il y a des résultats réels, nous supposons que c'est le cas. Pour vérifier si $results est défini, vous pouvez utiliser une instruction if en vérifiant son nombre par exemple.

Remarque Remplacer for($i=0;$i<count($result);$i+=2): avec for($i=0;$i<count($result);$i+=2){ et endfor; avec } un code traditionnel formaté.

+0

Merci. L'exemple m'a ouvert un peu la tête et j'ai pu compléter la fonction. – Codex73

1

Je recommande d'utiliser une liste non ordonnée - <ul> et d'appliquer l'attribut CSS float à ses éléments de liste (<li>). De cette façon, vous ne devrez pas vous soucier de compter le nombre d'enregistrements.

Il suffit de sortir chaque enregistrement dans un <li> et de les définir tous sur float: left;.

Contraindre ensuite la hauteur du <ul> afin qu'il soit suffisamment court pour forcer le <li> à flotter vers une nouvelle colonne. Comme @Steve l'a fait remarquer, vous devrez également définir la largeur <li> comme étant constante afin que les colonnes soient cohérentes. Et faire la largeur de votre <ul> plus de deux fois et moins de trois fois plus grande que la largeur <li>.

Un moyen de base pour ce faire serait d'appeler mysql_num_rows() sur votre requête. Multipliez le résultat par la hauteur de chaque <li>, puis divisez par deux, et ce sera la hauteur de votre <ul>. Cela fera chaque colonne de hauteur égale.

Vous pourrait faire aussi avec <div> s (un <div> pour chaque élément, le tout enveloppé dans un seul <div> global).Mais l'utilisation d'une liste est la manière préférée d'afficher une liste d'informations en HTML (sauf si l'information est de nature tabulaire et nécessite plusieurs colonnes par champ, ce qui n'est pas et ne l'est pas).

Si vous avez besoin d'une aide plus détaillée, il y a un great Opera Web Standards article à ce sujet.

+0

N'oubliez pas de définir la largeur de vos 'LI's pour maintenir la largeur de colonne standard. Sinon, ils ne s'adapteront qu'au texte, ils n'auront donc pas tous la même taille. – Ben

+0

@Steve: Oui, définitivement. J'ai oublié de mentionner cela. –

+0

Cela n'a pas fonctionné. Je vais continuer à jouer avec. – Codex73