Foros del Web » Programando para Internet » PHP »

Presentar en 2 columnas

Estas en el tema de Presentar en 2 columnas en el foro de PHP en Foros del Web. Hola, recojo los datos de una db y los quiero presentar en dos columnas de una tabla. Tendria que poner el codigo de la categoria ...
  #1 (permalink)  
Antiguo 28/05/2003, 03:38
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
Pregunta Presentar en 2 columnas

Hola,
recojo los datos de una db y los quiero presentar en dos columnas de una tabla. Tendria que poner el codigo de la categoria y debajo el nombre de la categoria. Luego saltar de columna y hacer lo mismo.
Lo unico que consigo es poner uno debajo del otro. Lo he intentado con for y con if y no doy con la solucion.
Código PHP:
    <?php
        $host
="localhost";
        
$dbusername="root";
        
$dbpassword="";
        
$database="botiga";
        
$x=mysql_connect($host,$dbusername,$dbpassword);
        
$x2=mysql_select_db($database);
        if (empty(
$cerca))
        {
        
$fer "select * from categoria";
        
$resp mysql_query($fer);
        echo 
"<table width=400 border=1 cellpadding=3 cellspacing=1>";
        while (
$row mysql_fetch_array($resp))
        {
        
$i=0;
        if (
$i<2)
        {
        echo 
"<tr>";
        echo 
"<td>";
        echo 
$row["id_categoria"];
        echo 
"</td>";
        echo 
"</tr>";
        echo 
"<tr>";
        echo 
"<td>";
        echo 
$row["categoria"];
        echo 
"</td>";
        echo 
"</tr>";
        }
        }
        echo 
"</table>";
        }
    
?>
Alguien tiene una solucion?\

Un saludo
  #2 (permalink)  
Antiguo 28/05/2003, 03:43
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Hay que fomentar la lectura de las FAQs: http://www.forosdelweb.com/showthrea...669#post240669

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 28/05/2003, 04:00
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
Gracias josemi.
Voy a echar un vistazo.

Un saludo
  #4 (permalink)  
Antiguo 28/05/2003, 04:02
 
Fecha de Ingreso: julio-2002
Mensajes: 32
Antigüedad: 21 años, 9 meses
Puntos: 0
Si lo que quieres es que te salgan $row["id_categoria"] y $row["categoria"] una al lado de la otra el problema lo tienes en la definicion de la tabla, te sobra una definicion de fila <tr></tr>.
La estructura seria la siguiente :

echo "<tr>";

echo "<td>";

echo $row["id_categoria"];

echo "</td>";

echo "<td>";

echo $row["categoria"];

echo "</td>";

echo "</tr>";

Espero que te funcione si es esto lo que quieres...
  #5 (permalink)  
Antiguo 28/05/2003, 04:23
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
Graicas Darthxavi,
esto funciona perfectamente si solo quieres una columna. El problema surge cuando necesitas mas de una.

Un saludo.
  #6 (permalink)  
Antiguo 28/05/2003, 04:38
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
El código de las FAQ solucionará tu problema
__________________
M a l d i t o F r i k i
  #7 (permalink)  
Antiguo 28/05/2003, 04:42
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Ahora me doy cuenta de que lo que quieres es meter dos filas, pasar de columna y meter otras dos filas. Debido a que con HTML solo puedes ir metiendo fila por fila, tienes que cambiar un poco la forma de pensar. Lo que tendrias es primero leer todos los registros que quieres meter en una "fila" (tus dos filas), meterlos en un array, despues generar el HTML de las dos filas. Seria algo asi:
Código PHP:
while ($row mysql_fetch_array($resp)) {
$reg[0]=$row;
if (
$row mysql_fetch_array($resp)) {
$reg[1]=$row;
} else {
$reg[1]['id_categoria']='&nbsp;'//para que no nos de problemas las celdas vacias
$reg[1]['categoria']='&nbsp;';
}
// mostramos el HTML
// la primera fila
echo '<tr><td>'.$reg[0]['id_categoria'].'</td>'//primer registro
echo '<td>'.$reg[1]['id_categoria'].'</td></tr>'//segundo registro
// la segunda fila
echo '<tr><td>'.$reg[0]['categoria'].'</td>'//primer registro
echo '<td>'.$reg[1]['categoria'].'</td></tr>'//segundo registro

Espero que te sirva.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 28/05/2003, 04:59
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
Cain la variable $row donde esta definida?
El codigo hace algo parecido a lo que yo quiero pero no es exacto. De todas formas no te marches muy lejos que creo que tengo algunas preguntillas sobre tu codigo. Estoy intentando aprender y quizas necesite algunas aclaraciones. Si no te molesta

Un saludo.

OK!
josemi has acerdo de lleno!
Ahora solo me falta entender lo que haces.
Te digo lo mismo que a Cain
Cita:
no te marches muy lejos que creo que tengo algunas preguntillas sobre tu codigo. Estoy intentando aprender y quizas necesite algunas aclaraciones. Si no te molesta
Un saludo
  #9 (permalink)  
Antiguo 28/05/2003, 05:00
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
for ($i=1; $row = mysql_fetch_row ($result); $i++) {

Esto crea un bucle que va recorriendo el array devuelto por mysql_fetch_row().
__________________
M a l d i t o F r i k i
  #10 (permalink)  
Antiguo 28/05/2003, 05:29
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
Ok pero cuando quieres dar el numero de resultados
Cita:
echo "<tr><td colspan=$columnes>$rows Resultados </td></tr>";
me aun no esta definida. Almenos eso me dice.

Por cierto creo que falta un ; en la linia
Cita:
echo "</tr>" # Cerramos la última línea </tr>
echo "</tr>" ; # Cerramos la última línea </tr>

Un saludo
  #11 (permalink)  
Antiguo 28/05/2003, 05:52
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Es verdad

Ahí me colé.

$rows = mysql_num_rows($result);
__________________
M a l d i t o F r i k i
  #12 (permalink)  
Antiguo 28/05/2003, 05:56
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
Ahora si funciona perfectamente.
$rows = mysql_num_rows($result); <-- devuelve el numero de filas? deduzco. Y supongo que podrias usar dos variables distintas!

Última edición por da2; 28/05/2003 a las 06:00
  #13 (permalink)  
Antiguo 28/05/2003, 06:10
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
$rows = mysql_num_rows($result); <-- Número de registros

for ($i=1; $row = mysql_fetch_row ($result); $i++) { <--- registro actual

Nota que $rows no es lo mismo que $row.
__________________
M a l d i t o F r i k i
  #14 (permalink)  
Antiguo 28/05/2003, 06:22
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
OK,no es lo mismo.
En el codigo de josemi lo que hace es almacenar las filas en doe arrays, no? Y luego llama cada elemento del array por su nombre?
Estoy muy verde.

Un saludo y gracies.
  #15 (permalink)  
Antiguo 28/05/2003, 08:30
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Eso parece, la idea es buena
__________________
M a l d i t o F r i k i
  #16 (permalink)  
Antiguo 28/05/2003, 08:36
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
Si no es pedir mucho, alguien podia comentar las 4 primeras lineas de codigo.

Gracias
  #17 (permalink)  
Antiguo 28/05/2003, 08:43
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Código PHP:
<?
while ($row mysql_fetch_array($resp)) { # Recorremos los registros devueltos por MySQL

$reg[0]=$row# $reg[0] contiene el primer registro (impares)

if ($row mysql_fetch_array($resp)) { # Recorremos el registro siguiente, si existe

$reg[1]=$row# $reg[1] contiene en segundo registro (pares)

} else { # ¿Que hacemos si no hay más registros?
// Lo creamos con espacios vacíos
$reg[1]['id_categoria']='&nbsp;'//para que no nos de problemas las celdas vacias

$reg[1]['categoria']='&nbsp;';

}
?>
__________________
M a l d i t o F r i k i
  #18 (permalink)  
Antiguo 28/05/2003, 08:56
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
ok, eso lo intuia. Pero yo cleia que con while recorria la bd linia por linia y solo cogia una linia hasta llegar al final del { } dle while.
  #19 (permalink)  
Antiguo 28/05/2003, 09:01
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Realmente lo que lee el registro y avanza al siguiente es la funcion mysql_fetch_array(). Cada vez que se ejecuta lee el registro en curso y avanza el puntero al siguiente. Como recomendacion, consigue un manual de php de www.php.net para consultar lo que hace cada una de las funciones.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #20 (permalink)  
Antiguo 28/05/2003, 09:08
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
Ahora esta mas claro. En el IF devuelve "true" y sigui con el segundo registro.
Por cierto
Cita:
..., ahora que mencionas lo de consultar mas el manual de php.net, hay algun manual que este todo en castellano. En la web de PHP en castellanhttp://www.php.net/manual/es/ esta traducido a medias.
ya lo he preguntado antes.

Muchisimas gracias por vuestra inestimable ayuda y paciencia.
  #21 (permalink)  
Antiguo 28/05/2003, 09:15
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Si, el segundo if es true si existe el siguiente registro par. Si por un casual, tu consulta devolviese un numero impar de registros, en la ultima iteracion del while solo habria un registro. El segundo if daria false y asignaria espacios a la segunda columna.

Sobre el manual en castellano, ese es el oficial, no creo que haya ninguno completamente traducido para la ultima version, no se si ha estado completo alguna vez. Este es el problema del Open Source, no puedes quejarte de estas cosas. Aun asi, creo que las paginas de las funciones son bastante sencillas de entender en ingles, aunque sea probando los codigos de ejemplo. Y si no, siempre puedes preguntar tus dudas en este soporte tecnico, digo, foro.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #22 (permalink)  
Antiguo 28/05/2003, 09:37
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
Muchas gracias por tu tiempo. He aprendido ma hoy con vosostros que con todo lo que tengo leido del tocho que es estoy leyendo.
Porcierto, el soporte tecnico funciona perfectamente. No hay quejas.
Los novatos como yo tenemos suerte de eso.

Un saludo
  #23 (permalink)  
Antiguo 28/05/2003, 10:08
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
El manual está medio traducido, pero casi todo lo "básico" está en español. Lo que falta por traducir suelen ser funciones para librerías "extrañas"
__________________
M a l d i t o F r i k i
  #24 (permalink)  
Antiguo 28/05/2003, 10:15
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años
Puntos: 0
Depende del nivel que tengas (el mio muy bajo) las funciones "extrañas" empiezan en la parte traducida. Pero aun asi parece que estan escritas en ingles o chino.
Espero que no os canseis de mi pq seguire atacando con pregunatas!!!

Un saludo
  #25 (permalink)  
Antiguo 03/12/2006, 13:54
Avatar de zvnko  
Fecha de Ingreso: abril-2004
Ubicación: coatzacoalcos
Mensajes: 42
Antigüedad: 20 años
Puntos: 1
una manera sencilla!

yo antes tenia un problema, para algunos que lean este post aqui tengo una solucion que yo veo sencilla ...

Primero hacemos una consulta:
Código PHP:
$sql=mysql_query("select * from tabla"); 
Sacamos el numero de registros que tenemos en la tabla:
Código PHP:
$num=mysql_num_rows($sql); 
Ahora vamos a desplegar los resultados, hacemos algo mas o menos asi:
Código PHP:
echo "<table border=0 cellspacing=0 cellpading=0>";
for(
$a=0;$a<$num;$a++){
$row=mysql_fetch_array($sql);
if(
$b==0){  /*como $b apenas inicia logicamente vale 0 e imprime <tr>*/
echo "</tr>";
}
echo 
"<td>$row[nombre_categoria]<br>$row[descripcion][</td>";
if(
$b==1){ /*cuando $b valga 1 cerrara la fila con un </tr>*/
echo "</tr>";
$b=0/*vuelve $b a cero para que inicie otra fila*/
}else{
$b=$b+1/* aumenta $b en 1 mientras sea menor a 1*/
}
}
echo 
"</table>"
Basta con modificar esta parte del codigo para ver cuantas registros por filas queremos mostrar:
Código PHP:
if($b==1){ 
Basta con cambiar el numero, por ejemplo si queremos q muestre 10 filas tendremos que poner 9 ya que la fila inicia cuanod $b vale 0
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:57.