En primer lugar, totalmente de acuerdo con Xavy_S, que no te dejes liar con la postura talibán de "tablas no". Una cosa es utilizar las tablas para "maquetar" el diseño de la página y otra usarlas en su ámbito semántico correcto y por lo que entiendo de tu ejemplo, es un uso totalmente aceptable.
Y eso de que las tablas y los CSS no se llevan bien, tampoco es demasiado correcto, si lo haces bien el resultado será optimo. Si no quieres complicarte la vida y quieres resultados "de la leche" yo usaría un framework tipo bootstrap (o cualquier otro, hay muchos), echa un vistazo a:
http://twitter.github.io/bootstrap/base-css.html#tablesMas cosas:
La cabecera de la tabla (títulos de la primera fila) es recomendable incluirla en un bloque separado tal que:
<table>
<thead>
<tr>
<th>título columna 1</th>
<th>título columna 2</th>
<th>título columna 3</th>
</tr>
<tbody>
<tr>
<td>celda 1 de resultado 1</th>
<td>celda 2 de resultado 1</th>
<td>celda 3 de resultado 1</th>
</tr>
<tr>
<td>celda 1 de resultado 1</th>
<td>celda 2 de resultado 1</th>
<td>celda 3 de resultado 1</th>
</tr>
</tbody>
</table>
En tercer lugar, en tu código tienes un bucle tal que:
while ($data = mysql_fetch_array ($res)) {
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
...
}
Osea, por cada tupla resultado de la consulta SQL generas una página completa ? no se si entiendo lo que quieres hacer, pero lo normal sería:
<html>
<head>
...
</head>
<body>
...
<table>
<thead>
<tr>
<th>título columna 1</th>
<th>título columna 2</th>
<th>título columna 3</th>
</tr>
<tbody>
<?php
// ... conexión con la base de datos, definición de consulta...
while ($data = mysql_fetch_array ($res)) {
echo '
<tr>
<td>' . $data[0] . '</th>
<td>' . $data[1] . '</th>
<td>' . $data[2] . '</th>
</tr>';
?>
</tbody>
</table>
...
</body>
</html>
Es decir, el bucle recorre las tuplas y "escribe" filas de la tabla, no una página completa con una tabla completa
Como mínimo si lo que hay en el resultado de $data[i] es texto cuyo origen no es "confiable" (osea, un usuario añade un registro y pone como valor <etiqueta>aaa</etiqueta> yo lo parsearía con htmlspecialchars().
Ojo con los parámetros de la consulta que recibas (si es que especificas filtros) para evitar SQL injection y similares.
...es posible que se me haya colado algún bug de sintaxis o similar (está escrito todo de memoria)
Te recomiendo aparte acostumbrarte a conocer la semantica de los tags, el uso de <b></b> para negrita es está volviendo obsoleto, es mejor usar <strong></strong> si pretendes dar "importancia" a la palabra. Si solo quieres estilo visual, olvida el <b> o <strong> y dale estilo a la celda vía CSS, osea:
En php / html
...
<td class="rojo">celda1</td>
...
En css
td.rojo
{
color: red;
}
Ya por último yo usaría codificación utf-8 (define el charset utf-8 en el head de la página) y olvídate de andar usando País en lugar de País.
En fin, me he liado de más, pero son una buena ristra de consejos que me hubiera gustado saber en su día, espero que te sean de utilidad.