Tomar datos de Base de datos y mostrarlos en la web [Ayuda]

Desde la web, logro meter los datos en la table de la base de datos

mysql_query ("INSERT INTO `database`.`CLASIFICACION` (`INICIALES`,`SCORE`) VALUES ('$_POST','$_POST') ");
?>

Pero tras meter varios datos, quiero poder verlos en la web. Estoy bloqueado, lo único que tengo es esto y lógicamente no me sale.

$resultado = mysql_query("SELECT * FROM CLASIFICACION") or die(mysql_error());

echo $resultado;
He probado con esta otra que he visto por el foro, pero tampoco:

<body>

<table>
<tr>
<td>Id</td>
<td>Iniciales</td>
<td>Score</td>
</tr>

<?php
include "host.php";
mysql_connect($host, $db_user, $db_pass) or die (mysql_error());

$result = mysql_db_query($database, "SELECT * FROM CLASIFICACION") or die (mysql_error());

if (mysql_num_rows($result)) {
echo "Enlaces del menu:</p>";
while ($qry = mysql_fetch_array($result)) {
echo "<tr><td>$qry</td><td>$qry</td><td>$qry</td></tr>"; }
}
?>
</table>

</body>

Lo unico que consigo que salga en la web es esto:

Enlaces del menu:
Id Iniciales Score
Hola:

Según yo, esta bien... Intenta esto:

<body>

<table>
<tr>
<td>Id</td>
<td>Iniciales</td>
<td>Score</td>
</tr>

<?php
include "host.php"; 
mysql_connect($host, $db_user, $db_pass) or die (mysql_error()); 

$result = mysql_db_query($database, "SELECT * FROM CLASIFICACION") or die (mysql_error()); 

if (mysql_num_rows($result)) { 
echo "Enlaces del menu:</p>"; 
while ($qry = mysql_fetch_array($result)) {
  print_r( $qry );
//echo "<tr><td>$qry[id]</td><td>$qry[iniciales]</td><td>$qry[score]</td></tr>"; } 
}
?>
</table>

</body>

y dime si aparece lo mismo.
Gracias ya hace tiempo que lo conseguí. Aprovecho para preguntar lo que intento ahora.

Quiero hacer una base de datos de puntuaciones, de forma que ordene los datos de mayor a menor puntuación, algo similar a las clasificaciones deportivas.

El caso es que me gustaría saber si existe la forma de crear un campo que asigne el 1º a la puntuación más alta en ese momento, el 2º a la segunda, etc... y que si entra una nueva puntuación más alta que las demás, el 1º pase a esa puntuación y las demás bajen una puntuación.

Lo quiero poder mostrar en una web con PHP.

Gracias.


---------------------

Por otro lado, el curso de CCTW habla de MySQL pero resulta que ahora ya no se usa, o al menos se desaconseja su uso. Por lo que veo llego tarde, pero no conozco los cambios respecto al otro. ¿Me podrías ayudar? Basicamente te muestro lo que tengo hecho en MySQL y si no te importa, me copias debajo como quedaría para MYSQLi. Si ves que falta alguna informacion pidemela y la pongo también

Para subir datos desde la web a la base de datos uso esto:

<?
mysql_query ("INTO/REPLACE `database`.`TABLA` (`Nombre`,`Apellidos`) VALUES ('$_POST','$_POST') ");
?>

Para consultar los datos de la tabla y pasarlos a la web uso esto:

<?
$tabla="TABLA";
$result = mysql_query("select * from $tabla order by NOMBRE DESC");

while($fila = mysql_fetch_row($result)){
echo "<tr><td>$fila[1]</td><td>$fila[2]</td></tr>";}

mysql_close();

?>
Quiero hacer una base de datos de puntuaciones, de forma que ordene los datos de mayor a menor puntuación, algo similar a las clasificaciones deportivas...

Eso sería fácil. Si ya tienes la base de datos lista con algo similar a:

CREATE TABLE puntuaciones (
  puntuacion_id INT(11) NOT NULL UNSIGNED AUTO_INCREMENT,
  # Otras columnas
  puntuacion FLOAT # En realidad no recuerdo como se definen los float :P. Puede ser otro tipo de dato.
);

tendrías que extraer los datos así:

$con = mysql_connect(...);
mysql_select_db(...);
$query = "SELECT * FROM puntuaciones ORDER BY puntuacion ASC"; // Le dices que seleccione todo de Mayor a Menor (ASC).
$result = mysql_query( $query );

// Aquí muestras los resultados si es que hubieron.
$cardinal = 1;
while( $fila = mysql_fetch_row( $result ) ) {
  echo "<tr><td>$fila[puntuacion_id]</td><td>$cardinalº</td></tr>";
  $cardinal++; // Aumentas el valor para que el siguienta sea 2º, 3º, etc.
}

Por otro lado, el curso de CCTW habla de MySQL pero resulta que ahora ya no se usa, o al menos se desaconseja su uso. Por lo que veo llego tarde, pero no conozco los cambios respecto al otro. ¿Me podrías ayudar? Basicamente te muestro lo que tengo hecho en MySQL y si no te importa, me copias debajo como quedaría para MYSQLi. Si ves que falta alguna informacion pidemela y la pongo también

Esto es algo un poco más complejo si es que no sabes PHP orientado a objetos. Lo que harías sería esto:

MySQLi
<?php
  // Todos los parámetros que se pasan son opcionales, pero te aconsejo que le pases el host, usuario, contraseña y base de datos,
  // así no tendrás que especificarlos nuevamente.
  $mysqli = new mysqli( 'localhost', 'root', 'contraseña', 'base_datos', '3306', 'socket' );
  if( $mysqli->connect_errno ) {
    echo 'No se pudo conectar a la base de datos: ' . $mysqli->connect_error;
    exit;
  }

  $query = 'SELECT * FROM ...';
  if( $result = $mysqli->query( $query ) ) {
    // $result->fetch_object() devolverá un objeto, así: $row = $result->fetch_object; $row->Nombre; $row->Apellidos (cada propiedad será un nombre de columna)
    // $result->fetch_assoc() devolverá un array asociativo (mapa clave valor): $row['Nombre'], $row['Apellidos']
    // $result->fetch_row() devuelve un array numerado: $row[0] (sería el nombre o la primera columna), $row[1], etc.
    while( $row = $result->fetch_object() ) {
      echo "<tr><td>$row->Nombre</td><td>$row->Apellidos</td></tr>";
    }
  }

  $mysqli->close();

Para insertar es lo mismo, solo que con la consulta INSERT|UPDATE|DELETE y tendrás que preguntar cuantas filas fueron modificadas para saber si tuvo éxito o no.

Saludos.
CAMPO RANKING
Gracias, estoy intentando lo de hacer el ranking y me da error el insertar el código que me comentas. Estoy insertando esto:

CREATE TABLE PUNTUACIONES (puntuacion_id INT(11) NOT NULL UNSIGNED AUTO_INCREMENT,);

Y me da este error:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNSIGNED AUTO_INCREMENT,)' at line 1


De todas formas, si lo he entendido bien, lo que indica tu codigo es crear un campo INT que vaya autoincrementandose con cada nuevo valor. Pero luego como sabe la tabla que celda será el 1º y cual la 2º? Porque no siempre cada nueva puntuación insertada será mayor que las demás, igual alguién inserta una puntuación y entra en 4º posición por ejemplo.

MYSQLi
Respecto a MySQLi, entiendo que tengo que cambiar todas las páginas para que no me salga error, ¿no? Vamos que si todo lo hago en MySQL y hago una consulta con los comandos de MySQLi, me dará error. Voy a repasar lo que has puesto a ver si soy capaz de pasar todo el codigo a MySQLi sin muchos problemas.


ESTILOS DE LA TABLA
Una ultima cosa, a la hora de hacer tablas, uso lo que se explica en el curso, pero solo se explica como asignar un color a las tablas. Yo quisiera que un campo tuviera un color y otro campo otro, y aparte poder cambiar el color y tamaño del texto de la tabla. ¿Como puedo lograrlo en PHP?

Mi idea sería hacer algo más o menos así:

<table bgcolor="#000000">
<tr><td bgcolor="#009900" align="right">
<font color="#FFFF00">Green Bay</font></td>
<td><font color="#FFFFFF">13</font></td></tr>
<tr><td bgcolor="#0000FF" align="right">
<font color="#DDDDDD" >New England</font></td>
<td><font color="#FFFFFF">27</font></td>
</tr>
</table>

EDITO: He logrado cambiar tipo y color de letra de cada campo, lo cual es genial, y tambien color de celdas, pero esto ultimo afecta a todas las celdas por igual, no a un campo solo.

Con esto creo la tabla
$result = mysql_query("select * from $tabla order by PUNTOS DESC");
echo "<table width=\"92%\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"celeste\" style=\"border:10px ridge blue\">";

Y con esto pongo color al texto de cada campo lo cual es fenomenal pues mas de lo que yo quería. También puedo dar color a las celdas si asigno un color a una celda lo toman todas las de la tabla. Me faltarian las siguientes cosas:

Dar un color distinto a las celdas de cada columna.
Dar un color a todas las celdas de una misma fila
Cambiar tipo de letra de todas las celdas de una misma fila

Esto me permitiria poder dar relevancia al primero de la clasificacion, poniendole otro color a su texto y a las celdas de la primera fila

echo "<tr width=\"140\" bgcolor=\"#FFFFFF\"><td width=\"40\"><b><font face=\"Arial\" size=\"3\" color=\"#FF0000\">$registro[1]</font></b></td><td width=\"40\"><b><font face=\"Arial\" size=\"5\" color=\"#AAA000\">$registro[2]</td><td>$registro[3]</td><td>$registro[4]</td></tr>";


Creo que estoy siendo super pesado eh! Y Jorgens sin aparecer!
Y me da este error:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNSIGNED AUTO_INCREMENT,)' at line 1

Eso es porque te sobra una coma:

CREATE TABLE PUNTUACIONES (puntuacion_id INT(11) NOT NULL UNSIGNED AUTO_INCREMENT[COLOR="#FF0000"],[/COLOR]);

Pero luego como sabe la tabla que celda será el 1º y cual la 2º?

La tabla no hará el trabajo por si sola, pues de hecho, lo que quieres tiene que ver con la presentación nada más y por ende se lograría a través de la lógica de los scripts al momento de extraer datos. Con la tabla que intentas crear no lo podrás hacer, porque existe un único valor y no habría forma de saberlo, por eso necesitas otra columna que lleve la puntuación:

puntuaciones (puntuación máxima: 15)
puntuacion_id | puntuacion
1 | 5
2 | 3
3 | 10
4 | 15
5 | 8

Y así sucesivamente. En este caso no se esta puntuando nada porque no hay una relación con ningún otro dato.

Suponiendo que quisieras puntuar una categoría, entonces necesitarías 2 tablas:

CREATE TABLE categoria (
  categoria_id INT(11) NOT NULL UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  categoria_nombre VARCHAR(200) NOT NULL
) ENGINE=InnoDB CHARSET=utf8;

CREATE TABLE puntuacion (
  puntuacion_id INT(11) NOT NULL UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  puntos INT(2) NOT NULL,
  categoria_id INT(11) NOT NULL UNSIGNED
) ENGINE=InnoDB CHARSET=utf8;

ALTER TABLE puntuacion ADD CONSTRAINT fk_puntuacion_ref_categoria FOREIGN KEY (categoria_id) REFERENCES categoria (categoria_id) ON DELETE CASCADE ON UPDATE CASCADE;

Esa sería una estructura para las tablas. Luego, para insertar los datos en la categoría:

INSERT INTO categoria (categoria_nombre) VALUES ('categoria1'); # y así sucesivamente

Ahora, para insertar los datos en la tabla puntuacion, primero necesitas saber el ID de la categoría que quieres puntuar:

SELECT categoria_id FROM categoria WHERE categoria_nombre = 'categoria1'; # devolverá el ID de la misma
INSERT INTO puntuacion (puntos, categoria_id) VALUES (5, id_devuelto_consulta_anterior);

Para leer los datos cuando hay tablas cruzadas se utiliza JOIN. Join sirve para entrelazar los datos y, dependiendo del tipo de Join, se devolverán los datos repetidos o no:

SELECT * FROM puntuacion
LEFT JOIN categoria
USING (categoria_id);

Para seleccionar la puntuación de una categoría específica es similar a lo anterior, solo tendrías que añadir un WHERE:

SELECT * FROM puntuacion
LEFT JOIN categoria
USING (categoria_id)
WHERE cateogira_nombre = 'categoria_tanto';

Y por último, para ordenar las categorías de forma ascendente (o descendente; como quieras :P):

SELECT * FROM puntuacion
LEFT JOIN categoria
USING (categoria_id)
ORDER BY puntos ASC|DESC; # Elige ASC para ascendente o DESC para lo contrario y elimina el |

Respecto a MySQLi, entiendo que tengo que cambiar todas las páginas para que no me salga error, ¿no? Vamos que si todo lo hago en MySQL y hago una consulta con los comandos de MySQLi, me dará error. Voy a repasar lo que has puesto a ver si soy capaz de pasar todo el codigo a MySQLi sin muchos problemas.

Si no había error antes, entonces debería funcionar igual, pero como dice el manual de PHP, la extensión MySQL esta desaconsejada.

Una ultima cosa, a la hora de hacer tablas, uso lo que se explica en el curso, pero solo se explica como asignar un color a las tablas. Yo quisiera que un campo tuviera un color y otro campo otro, y aparte poder cambiar el color y tamaño del texto de la tabla. ¿Como puedo lograrlo en PHP?

Lo que siempre se recomienda es no poner código CSS (<div style=""></div> o <font></font> ni <color></color>) o estilos directamente en HTML porque después es MUY difícil de modificar. Vamos por pasos:

Yo quisiera que un campo tuviera un color y otro campo otro

Eso es fácil de hacer con CSS (si es que quieres modificar las filas, no las columnas). Dale una clase a tu(s) tablas:

<table class='mi-tabla'></table>

Luego, en una hoja de estilos, escribe esto:

table.mi-tabla tr:nth-child(odd) { /* tr:nth-child(odd) es para las tablas impares (odd) */
  background-color: #fff; /* color de fondo blanco */
  color: lightSkyBlue; /* Color de letra celeste (algún tono de celeste :P) */
}

table.mi-tabla tr:nth-child(even) { /* esto es para las tablas pares (even)
  /* tus estilos */
}

Para cambiar el tamaño de la letra es simple. Utilizando la misma clase anterior:

table.mi-tabla {
  font-size: 1.3em; /* tamaño de letra; en lugar de em (tamaño relativo a la letra 'm') puede ser px (pixeles), % (porcentaje), ex (tamaño relativo a la letra 'x'), pt (puntos o points, que se utilizan más que nada en las plantillas de impresión) o cm (centímetros) */
}

Eso es todo creo :P.

Saludos.
Muchas gracias! Acabo de llegar y me pongo manos a la obra ahora mismo con todo lo que me has escrito. Te iré comentando a lo largo de la tarde como me va.

Mientras me voy poniendo con todo, te hago una pregunta sobre la posibilidad de asignar un ranking a las puntuaciones y una puntuación a cada posición en la tabla... ¿se podria hacer directamente desde PHP sin necesidad de crear ningun campo en la tabla? Me refiero que a de alguna manera con PHP pueda indicar que la celda que se ponga en primera posicion reciba el numero 1, la siguiente el 2, etc... y luego pasarlo todo a otra tabla.

¿Es eso posible?

Me pongo con lo que me has dicho!
Bueno, lo primero que puedo decir es que todos los codigos de MYSQL me estan dando error. Puedo hacer lo que dices de forma gráfica, pero si lo intento insertando código siempre me da error. Estoy usando el el PHPMyAdmin de CCTW.

Lo estoy haciendo de forma gráfica y por ahora las tablas se están creando. Me surge una duda, ENGINE=InnoDB que quiere decir? Que lo diferencia del resto de Engines?
Bien, tengo las tablas que mas has dicho creadas, los campos, todo creado.

Llego hasta este punto de tu explicación:

SELECT categoria_id FROM categoria WHERE categoria_nombre = 'categoria1';
INSERT INTO puntuacion (puntos, categoria_id) VALUES (5, id_devuelto_consulta_anterior);

Al ejecutar en la base de datos esto:

SELECT categoria_id FROM categoria WHERE categoria_nombre = 'categoria1';

Me da como resultado '1' de la Categoria_id

Excelente, pero... no se como seguir, o no lo entiendo, teniendo en cuenta que las puntuaciones las introduce la gente a través de un formulario en la web, esta línea de código:

INSERT INTO puntuacion (puntos, categoria_id) VALUES (5, id_devuelto_consulta_anterior);

¿Iria en el formulario?


Mientras me respondes me pongo con los estilos de la tabla, a ver si eso lo entiendo mejor!
Bien, probado lo de las tablas. Vuelvo a fallar, y seguro que es en una tonteria.

Escribo:

<table class='mitabla'></table>

fuera del codigo PHP y no tiene efecto el CSS
Si lo escribo dentro del codigo PHP me da error

Entiendo que tengo que escribirlo fuera del codigo PHP y que dentro del codigo PHP debo de poner en algun sitio algo que haga referencia a "mitabla", ¿Voy bien?

Es quizás --> echo "<mitabla>";

¿?

Lo dudo porque al hacerlo he formado un estropicio, pero imagino que ando cerca... creo.
Me surge una duda, ENGINE=InnoDB que quiere decir? Que lo diferencia del resto de Engines?

Los motores funcionan de distinta forma dependiendo para lo que se les use. InnoDB es el único motor de MySQL que reconoce las claves foráneas o extranjeras (FOREIGN KEY), pues el resto de los motores simplemente las ignorarán. De manera muy sencilla, las claves (primary key y foreign key) sirven para relacionar las distintas tablas en el modelo relacional. Idealmente deberías aprender a manejar bien una base de datos antes de utilizarla (los administradores de base de datos ganan bastante dinero, así que espcialízate si te interesa).

Mientras me voy poniendo con todo, te hago una pregunta sobre la posibilidad de asignar un ranking a las puntuaciones y una puntuación a cada posición en la tabla... ¿se podria hacer directamente desde PHP sin necesidad de crear ningun campo en la tabla? Me refiero que a de alguna manera con PHP pueda indicar que la celda que se ponga en primera posicion reciba el numero 1, la siguiente el 2, etc... y luego pasarlo todo a otra tabla.

Eso es sencillo. No te quiero hacer el trabajo, así que te diré que debes crear un contador mientras recorres las filas extraídas de la base de datos y mostrar el valor del contador dentro de un <td></td>. Pista suficiente creo :P. Obviamente si pasa mucho tiempo y no lo puedes resolver te ayudo :).

Bien, tengo las tablas que mas has dicho creadas, los campos, todo creado.

Llego hasta este punto de tu explicación...

Ok... primero tienes que entender lo que quieres hacer. Lo primero que aprendí cuando quise programar fue a resolver algoritmos. Un algoritmo se podría definir como el proceso desglosado para llegar a la solución de un problema. Una frase muy común entre los programadores es "divide y vencerás"; esto significa que, luego de plantear el problema, tienes que dividirlo en partes lo más pequeñas posibles.

En tu caso, el problema es: quiero hacer un sistema de puntuaciones.

¿Cómo funcionaría?

1.- Se muestra al usuario una imagen y al lado un campo de texto y un botón para enviar la puntuación al servidor.
2.- Una vez enviada la puntuación al servidor hay que:
2.1.- Revisar que la puntuación sea válida. Esto significa verificar que el texto ingresado sea un número entre la puntuación mas baja y la más alta, ¿no?

Ahora sigue tú... intenta encontrar los pasos que siguen y quizás entiendas lo que quise decir anteriormente. Utiliza las herramientas que tengas (una de las mejores que tienes en un buscador como Google).

Escribo:

<table class='mitabla'></table>

fuera del codigo PHP y no tiene efecto el CSS
Si lo escribo dentro del codigo PHP me da error

Entiendo que tengo que escribirlo fuera del codigo PHP y que dentro del codigo PHP debo de poner en algun sitio algo que haga referencia a "mitabla", ¿Voy bien?

Es quizás --> echo "<mitabla>";

No necesariamente debe estar fuera del código PHP, lo importante es que la tabla envuelva sus respectivos tr y td, de lo contrario no funciona:

echo "<table class='mitabla'><tr><td></td><td></td>ETC.</tr></table>";

Y luego en el CSS debes escribir los estilos que quieras como te dije antes :P.

Avísame si no entiendes algo :P.
Vamos por parte, sobre el ranking, si tu mismo me dices que es mucho mas facil hacerlo por PHP... entonces mejor hacerlo por PHP y nos olvidamos de intentar hacerlo mediante tablas, ¿no es mejor? Partimos de que mi experiencia en estos campos es nula. Lo unico que he hecho ha sido seguir el curso de CCTW y tu mismo puedes ver que es muy basico para MySQL, tan basico que realmente ni lo comentan jejeje.

Entonces, ahora lo que tengo que hacer es segun lo que pones en negrita: debes crear un contador mientras recorres las filas extraídas de la base de datos y mostrar el valor del contador dentro de un <td></td>

Bien, crear un contador mientras recorro las filas extraidas de la base de datos. Entiendo la idea al 100% ¿Como hacerlo? Ni idea, el curso de CCTW no explicaba esto asi que buscare un poco por google y luego te cuento jejeje

Luego, cuando logre dar con eso, tendre que lograr que lo muestre el contador dentro de un <td>><td>
Bien, esto creo que cuando logre hacer el contador, por ensayo y error lo lograre hacer.

Sobre el CSS, ahora mismo me pongo a ello pues creo que es lo unico que por ahora tengo claro :D

Gracias! Me estas salvando el pellejo! :D
Bueno, lo del contador aún no he podido buscarlo por google, pero tengo una buena noticia, y es que lo de CSS ya lo empiezo a controlar. La buena noticia es esa, que puedo editar la tabla desde el CSS, dejando el código PHP mucho más limpio.

La mala noticia que el código que pusiste lo coloco en el CSS y no ocurre nada. Al menos he logrado cambiar los estilos de las columnas, me faltan los de las filas.

Te dejo la dirección para que veas como quedó

http://bicheando.comocreartuweb.es/clasificacion3.php

Desde ahí además puedes ver el estilo.css

Lo que no puedes ver, el PHP, te lo dejo aquí:

while ($registro = mysql_fetch_row($result))
echo "<table class='mitabla'><tr class='mitabla1'><td class='mitabla2'>$registro[1]</td><td class='mitabla2'>$registro[2]</td><td class='mitabla3'>$registro[3]</td><td class='mitabla4'>$registro[4]</td></tr></table>";


Muchas gracias por la paciencia que estás teniendo!
Un contador no es más que una variable cuyo valor aumenta de uno en uno (o más):

$contador = 0;

while( true ) {
  // El orden sí alterará el resultado:
  echo "<td>$contador</td>";
  $contador++;
}

En cuanto al estilo, no es necesario dar una clase (class="clase") a cada elemento dentro de la tabla. Con la clase que le das a la tabla (table class="mitabla") es suficiente. Lo de las filas no funciona porque esta mal puesto. Tu tienes esto:

td.mitabla1 tr:nth-child(odd) {background:Blue;
 border: 1px gold;
 color:Blue;
 font:bold 18px Arial;
 width:25%;
 border:1px solid Gold;
}

y deberías tener esto:

table.mitabla tr:nth-child(odd) {
 background:Blue;
 border: 1px gold;
 color:Blue;
 font:bold 18px Arial;
 width:25%;
 border:1px solid Gold;
}

En el primer ejemplo, tu le dices al navegador: "toma todas las columnas (td) que sean de la clase mitabla1 y aplica a todas las filas (tr) impares contenidas (dentro del td class='mitabla1') el siguiente estilo"; mientras que en el ejemplo que yo te doy le dices al navegador: "toma la tabla que sea de la clase 'mitabla' y aplica el siguiente estilo a todas las filas (tr) impares (odd)", de esta forma podrías definir 10 tablas con una clase mitabla y todas ellas tendrían el mismo estilo.

¿Se entiende :P?
Gracias, la paciencia que estás teniendo conmigo es digna de los más grandes.

Entiendo lo que me dices, pero no me sale lo que me dices que tendría que salir. Puedes comprobarlo tu mismo. Tengo en estilo.css justo lo que tu me dices, y todas las celdas se me han puesto del mismo color. Tu mismo puedes comprobarlo pinchando en el enlace que puse antes.

Como curiosidad (lo he descubierto por ensayo y error)...
Si pongo table.mitabla td:nth-child(odd) se pintan de azul solo las columnas impares.
Si pongo table.mitabla td:nth-child(even) se pintan de azul las columnas pares

Si pongo table.mitabla tr:nth-child(odd) se pintan de azul todas las filas y todas las columnas, sin distinción.
Mientras que si pongo table.mitabla tr:nth-child(even) el CSS no afecta a ninguna celda.

¿Que estoy haciendo mal?


---

Estoy usando el contador que me indicas que funciona, pero no se para, no cuenta las filas de la tabla, sino que empieza a sumar números hasta el infinito. Voy a buscar por google a ver si logro ver como contar las filas de la tabla para que se pare.

Por otra parte, sería muy distinto a lo del contador hacer un campo en PHP que a la primera fila le asigne 25 puntos, a la segunda 18 puntos, etc...? Porque en verdad, dar un 1 al primero o un 2 al segundo, me viene bien, pero dar 25 puntos al primero o 18 al segundo tambien me solucionaria lo que quiero, que al fin y al cabo es hacer una clasificacion por puntos en funcion de quien tenga mejor puntuacion.

EDIT: He encontrado algunas cosas más complejas que no las llego a entender del todo. Como estoy algo bloqueado voy a buscar un curso de PHP y voy a empezar a estudiarlo.
Bueno gracias a muchos cabezazos he logrado cambiar el estilo de cada fila.

La clave estaba (o al menos yo lo he logrado así) en sustituir el

while ($registro = mysql_fetch_row($result)) --> Que me da todos los datos y no he sido capaz de asignar un estilo por fila, sino solo por columnas

por

$registro = mysql_fetch_row($result)

Donde tan solo obtengo los datos de la primera fila.
Luego con una segunda variable obtengo la segunda fila, luego la tercera, etc... pudiendo asignar estilos a cada variable. Luego al final añado un while ($registro = mysql_fetch_row($result)) como al inicio y ya me salen el resto de datos todos iguales.

Supongo que para alguien experto en PHP será demasiado código y demasiado complicarse la vida para algo tan sencillo, pero es la única forma que he encontrado, y al menos sirve
Ahora a por los contadores para dar siempre 25 puntos al que consiga ponerse primero en la tabla, a ver que chapuza logro hacer.
¿Que navegador utilizas? Si utilizas Internet Explorer 8 o inferior, entonces ese es un problema porque nth-child(even|odd) es de la versión 3 de CSS y este navegador no soporta CSS3. Para remediarlo tendrías que utilizar un plugin de Javascript.

Si pongo table.mitabla td:nth-child(odd) se pintan de azul solo las columnas impares.
Si pongo table.mitabla td:nth-child(even) se pintan de azul las columnas pares

Si pongo table.mitabla tr:nth-child(odd) se pintan de azul todas las filas y todas las columnas, sin distinción.
Mientras que si pongo table.mitabla tr:nth-child(even) el CSS no afecta a ninguna celda.

Claro, ese el comportamiento esperado, no esta mal. Lo que pasa es que debes elegir pintar las filas (tr) o las columnas (td) y no ambas. En este enlace puedes ver el código y el resultado.

while ($registro = mysql_fetch_row($result)) --> Que me da todos los datos y no he sido capaz de asignar un estilo por fila, sino solo por columnas

por

$registro = mysql_fetch_row($result)

Donde tan solo obtengo los datos de la primera fila.
Luego con una segunda variable obtengo la segunda fila, luego la tercera, etc... pudiendo asignar estilos a cada variable. Luego al final añado un while ($registro = mysql_fetch_row($result)) como al inicio y ya me salen el resto de datos todos iguales.

Si lo haces así, entonces, ¿que pasaría si tuvieras 1000 (mil) registros en la base de datos?
Hola! ahora te respondo! Lo primero decirte que uso la ultima versión de Chrome, y cuando tengo dudas, uso la ultima version de Firefox! Nunca uso IE!
skaparate escribió:Si lo haces así, entonces, ¿que pasaría si tuvieras 1000 (mil) registros en la base de datos?

Hola de nuevo! En realidad no es lo que dije, me equivoqué al escribirlo.
Si que me permite asignar estilos a todas las filas que vayan saliendo. Sean 1000 o 2000 datos, da igual. Ahora el problema que tengo es el inverso, y es que no soy capaz de dar estilos a columnas con mi método.

En resumen, creo que mi error no es de CSS sino de la propia toma de los datos mediante PHP porque cuando puedo dar estilos a las columnas no puedo a las filas, y cuando puedo a las filas, no puedo a las columnas

skaparate escribió:Claro, ese el comportamiento esperado, no esta mal. Lo que pasa es que debes elegir pintar las filas (tr) o las columnas (td) y no ambas. En este enlace puedes ver el código y el resultado.


Estoy usando lo que comentas de poner solo uno de ellos, es de hecho como lo tengo ahora mismo en el CSS. Te he escrito un resumen de todo lo que ocurre, pero no lo pongo todo a la vez, sino que he ido poniendo uno, luego otro, viendo como reaccionaban, y al final no pintaban lo que debían pintar. Te recomiendo que lo mires, y me dices como tendría que ponerlo y lo hacemos sobre la marcha, verás que no sirve.
Ah por cierto ahora lo que tengo conseguido es esto (aunque ahora no entiendo porque cada texto de cada celda está descentrado)



Frente a este que es justo el contrario:





¡Que locura!
Bueno, ya he logrado tocar estilos de filas y columnas, por fiiiin!

Ahora me queda el contador para hacer el ranking y darle 25 puntos al primero, 18 al segundo, etc...!
skaparate escribió:Un contador no es más que una variable cuyo valor aumenta de uno en uno (o más):

$contador = 0;

while( true ) {
  // El orden sí alterará el resultado:
  echo "<td>$contador</td>";
  $contador++;
}

Estoy bloqueado.

Pongo lo que comentas y no lo consigo hacer parar.

Además, tengo otro problema, como consigo ponerlo en una columna a la derecha de las demás?
Jajajaja... lo que pasa es que los bucles while o for (o foreach) se ejecutan mientras se cumpla la condición:

for(valor_inicial; condicion; modificar_valor) { hacer lo que esta entre los corchetes }
while(condicion === true) { hacer lo que esta dentro del bucle }

Ahora, foreach es algo más complejo y es útil para recorrer arreglos (o arrays):

$array = array( 'a', 'b', 'c', 'd' );

foreach( $array as $value ) {
  echo $value . '<br />'; // Mostraría a, b, c, d hacia abajo.
}

Lo que quise decir con el código, era que mostraras el contador mientras recorres los elementos extraídos de la base de datos, pues lo único que me pediste era que un número apareciera por cada fila, no la puntuación; no es lo mismo:

// luego de conectarte a la base de datos:

$result = mysql_query( 'consulta' );
$contador = 1;

while( $row = mysql_fetch_row( $conexion ) ) {
  echo "<td>$contador</td>";
  $contador++;
}

Esa era la idea :P.

Comienza por algo más básico... comienza por aprender a resolver algoritmos. Luego aprende lo más básico de PHP, aunque quizás te sirva aprender con un lenguaje más estructurado como C/C++, Java, Visual Basic, etc. La diferencia entre ellos y PHP, es que en este último, una variable puede contener cualquier tipo de dato, mientras en los demás las variables solo son de un único tipo (int, boolean, string, array, map, etc.).

Saludos.