PHP - Crear fila dinamicamente

 
Vista:
sin imagen de perfil
Val: 34
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Crear fila dinamicamente

Publicado por Juan-Carlos (19 intervenciones) el 18/05/2022 22:06:57
Necesito ayuda, porque me he embotado y no doy con ello... Gracias anticipadas.

Hago una consulta para que me muestre los registros de una base de datos mysql en una tabla html. Lo que necesito es que cada 8 registros se cree una nueva fila.

Esta parte la he conseguido, pero resulta que me muestra 8 veces el mimo dato, es decir me repite 8 veces el registro primero ($row_EXTRAE_ARCHIVOS['Nombre_identificacion'] .... Os pongo el código que tengo:

CONSULTA
1
2
3
4
5
6
7
8
<?php
 
mysqli_select_db($conexion,$database_db);
$query_EXTRAE_ARCHIVOS = "SELECT * FROM expedientes WHERE Id_expediente = '$Id_expediente' ORDER BY Id_archivo DESC";
$EXTRAE_ARCHIVOS = mysqli_query($conexion,$query_EXTRAE_ARCHIVOS);
$row_EXTRAE_ARCHIVOS = mysqli_fetch_assoc($EXTRAE_ARCHIVOS);
$totalRows_EXTRAE_ARCHIVOS = mysqli_num_rows($EXTRAE_ARCHIVOS);
mysqli_free_result($EXTRAE_ARCHIVOS);?>

CÓDIGO TABLA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<table class="Programas" align="left" cellspacing="5" cellpadding="5">
 
 
 
 
<tr>
 
<?php
 
//Meter un bucle para cuando llegue a 8 repeticiones, introduzca <tr>
if ($totalRows_EXTRAE_ARCHIVOS > 0) {
    $contador = 0;
    // while ($row = mysqli_fetch_assoc($result)) {
    foreach ($row_EXTRAE_ARCHIVOS as $row) {
 
?>
 
 
					  <td bgcolor="#0077CA" onMouseOver="cambiacolor_over(this)" onMouseOut="cambiacolor_out(this)" class="textocontenidos" style="text-align:center; padding-top:10px; padding-bottom:10px; padding-left:10px; padding-right:10px;">
 
 
 
 
<font color="#FFFFFF"><?php echo $row_EXTRAE_ARCHIVOS['Nombre_identificacion'] ?></font>
 
<HR>
 
 
 
 
 
 
 
        			</td>
 
 
<?php
        $contador++;
        if ($contador % 8 == 0) { // 8 es el número de columnas
            echo '</tr><tr>';
        }
    }
    // }
}else{
 
    echo 'No hay datos';
 
}
echo "</tr>";
 
 
?>
 
 
 
</table>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

Crear fila dinamicamente

Publicado por Ivan (118 intervenciones) el 18/05/2022 22:54:36
Hola,

veo varios errores ...

En la consulta a la DB sólo te extrae 1 registro, concretamente el que coincide con '$Id_expediente';
Si quieres extraer todos los registros haz:

1
2
$query = "SELECT * FROM expedientes ORDER BY Id_archivo DESC";
$registros = mysqli_query($conexion,$query) or die(mysqli_error($conexion);

Ahora para extraer los registros linea a linea con todos los campos de cada linea debes iterar con un bucle así (hay otras formas también)

1
2
3
4
while($row = mysqli_fetch_assoc($registros)) {
    echo "Campo1: " . $row["campo1"] . " - Campo2: " . $row["campo2"] . "<br>"; // etc.
    // Dentro de este bucle pones tu contador y construyes tu tabla
  }

En tu código has estado mezclando variables ...
Las importantes son $query (consulta select), $registros (resultado de la consulta), $row (cada fila de datos de la consulta)

Y si quieres saber el nº de filas totales mysqli_num_rows($registros);

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 34
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Crear fila dinamicamente

Publicado por Juan Carlos (19 intervenciones) el 19/05/2022 00:40:28
Gracias por la respuesta.

Hay varios registros que se debería mostrar con ese Id_expediente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear fila dinamicamente

Publicado por Juan-Carlos (19 intervenciones) el 19/05/2022 13:22:04
A lo mejor no me he explicado bien. Lo que pretendo es que si hay 32 registros me los muestre en 4 filas y 8 columnas.

Es decir que en cada fila haya 8 registros y cuando llegue al registro 8 de la primera fila se muestren los otros 8 en una segunda fila y así sucesivamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Crear fila dinamicamente

Publicado por Ivan (118 intervenciones) el 20/05/2022 10:08:54
Hola,

en un momento te pongo un ejemplo completo

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Crear fila dinamicamente

Publicado por Ivan (118 intervenciones) el 20/05/2022 11:01:43
Hola,

esto es un ejemplo completo de funcionamiento:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE html>
<html>
<style>
  table, th, td {
    border: 1px solid black;
    border-collapse: collapse;
  }
</style>
<body>
<?php
 
$conexion = mysqli_connect(_HOST, _USER, _PASSWORD, _NAME); // Conexión a la DB
$query = "SELECT * FROM _MY_TABLA";
$data = mysqli_query($conexion, $query) or die(mysqli_error($conexion));
 
// Valores máximos deseados
$maxTabla = 5;
$maxFila = 4;
$maxCol = 8;
?>
 
<h2>Ejemplo de lectura Mysql y resultado en tabla dinámica PHP</h2>
<p>Obtenidos <?php echo mysqli_num_rows($data) ?> registros en Mysql: Mostrando las primeras <?php echo $maxTabla ?> tablas en <?php echo $maxFila ?> filas y <?php echo $maxCol ?> campos</p>
 
<?php
$tabla = 0;
$fila = 0;
// Si mostramos más filas de las que existen ajustamos
if ($maxFila > mysqli_num_rows($data)) $maxFila = mysqli_num_rows($data);
while ($rows = mysqli_fetch_assoc($data)) {
  $col = 0;
  if ($fila == 0) echo "<table>\n";
  foreach($rows as $key => $value) {
    if ($col == 0) echo "<tr>";
    if ($fila == 0 && $col < $maxCol) echo "<th>$key</th>";
    if ($fila > 0 && $col < $maxCol) echo "<td>$value</td>";
    if ($col > $maxCol) break;
    $col++;
  }
  $fila++;
  echo "</tr>\n";
  if ($fila >= $maxFila) {
    $tabla++;
    $fila = 0;
    echo "</table>\n<p><hr></p>\n";
  }
  if ($tabla >= $maxTabla) break;
}
?>
</body>
</html>

Este código es un ejemplo del funcionamiento agrupándolo todo en un único archivo HTML, no es perfecto, pues si se trunca la última tabla no se cierra correctamente con </table>, pero bueno ... no tengo más tiempo ...

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear fila dinamicamente

Publicado por Juan-carlos (19 intervenciones) el 20/05/2022 18:50:34
Ivan, muchas gracias por tu respuesta y por tu tiempo. No es exactamente lo que quería.

Tengo una tabla llamada "expedientes administrativos" y otra tabla llamada "archivos expedientes".

Mi idea era que al entrar en el detalle de cada expediente, me muestre sus archivos para poder añadir más, ver los existentes y modificarlos mediante la siguiente consulta:

1
SELECT * FROM archivos_expedientes WHERE Id_expediente = '$Id_expediente' ORDER BY Id_archivo DESC

Yo como lo tengo ahora me funciona correctamente, pero estéticamente se quedaría mejor añadiendo una columna a la derecha hasta un máximo de 8 y al llegar a la 8 empiece una nueva fila.

Adjunto un pantallazo de como lo tengo actualmente
PANTALLAZO

Y un pantallazo de como me gustaría que apareciese
PANTALLAZO2

Le daré una vuelta con lo que me has mandado a ver si soy capaz de medio adaptarlo. Reitero mi agradecimiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Crear fila dinamicamente

Publicado por Juan-carlos (19 intervenciones) el 20/05/2022 19:28:25
Mira Ivan, este el código que utilizaba yo anteriormente, pero le estoy actualizando las consultas a mysqli y no atino con ello... Seguro que para ti es fácil. Gracias!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<!doctype html>
<html>
<head>
 
<title></title>
</head>
 
<body>
 
 
 
 
		  <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td width="63" style="text-align:left; vertical-align:top; padding-top:10px;"><img src="../imagenes/archivos_del_registro.png" width="64" height="64" /></td>
 
			  <td class="Estilo9" style="text-align:left; padding-bottom:5px; padding-top:10px;">
 
 
 
 
 
 
 
 
 
 
 
<?php
// EXTRAIGO ARCHIVOS ASOCIADOS A ESTE EXPEDIENTE
$Id_expediente = $row_EXTRAE_REGISTROS['Id_expediente'];
 
mysql_select_db($database_CONEXION_BASE_DE_DATOS, $CONEXION_BASE_DE_DATOS);
$query_EXTRAE_ARCHIVOS = "SELECT * FROM archivos_expedientes WHERE Id_expediente = '$Id_expediente' ORDER BY Id_archivo DESC";
$EXTRAE_ARCHIVOS = mysql_query($query_EXTRAE_ARCHIVOS, $CONEXION_BASE_DE_DATOS) or die(mysql_error());
$row_EXTRAE_ARCHIVOS = mysql_fetch_assoc($EXTRAE_ARCHIVOS);
$totalRows_EXTRAE_ARCHIVOS = mysql_num_rows($EXTRAE_ARCHIVOS);
?>
 
			  <?php if($totalRows_EXTRAE_ARCHIVOS > 0)
							 {
							 ?>
 
 
 
<table class="Programas" align="left" cellspacing="5" cellpadding="5">
                    <?php
  $BRepeat1__index = 0;
  if (isset($pageNum_EXTRAE_ARCHIVOS)) $BRepeat1__index = $pageNum_EXTRAE_ARCHIVOS;
  $startRow = 0;
  $endRow = $BRepeat1__index;
  $numberColumns = 8;
  $numberRows = 1000;
  do{
    $startRow = $endRow + 1;
    $endRow += $numberColumns;
  ?>
                    <tr>
                      <?php do{ // fx ?>
 
 
					  <td bgcolor="#0077CA" onMouseOver="cambiacolor_over(this)" onMouseOut="cambiacolor_out(this)" class="textocontenidos" style="text-align:center; padding-top:10px; padding-bottom:10px; padding-left:10px; padding-right:10px;">
 
<a href="#" title="Ver documento o archivo" target="_blank"><font color="#FFFFFF"><?php echo $row_EXTRAE_ARCHIVOS['Nombre_identificacion'] ?></font></a>
 
<HR>
 
<a href="#" title="Ver documento o archivo" target="_blank"><img src="../imagenes/ver_archivo.png" border="0" /></a>&nbsp; &nbsp;
 
 
 
 
 
 
 <a href="#arriba" title="Actualizar documento o archivo" onClick="TINY.box.show({iframe:'#',boxid:'frameless',width:750,height:530,fixed:false,maskid:'bluemask',maskopacity:40,closejs:function(){closeJS()}})">
 <img src="../imagenes/actualizar_archivo.png" border="0" /></a>
 
&nbsp;
 
 
 
 
 
 <a href="#arriba" title="Eliminar documento o archivo" onClick="TINY.box.show({iframe:'#',boxid:'frameless',width:750,height:530,fixed:false,maskid:'bluemask',maskopacity:40,closejs:function(){closeJS()}})">
 <img src="../imagenes/quitar_archivo.png" border="0" /></a>
 
 
 
                    <?php
      $startRow++;
    } while(($startRow <= $endRow) && ($row_EXTRAE_ARCHIVOS = mysql_fetch_assoc($EXTRAE_ARCHIVOS)));
    ?>                    </tr>
                    <?php } while(($numberRows-- != 1) && ($row_EXTRAE_ARCHIVOS = mysql_fetch_assoc($EXTRAE_ARCHIVOS))); ?>
    </table>
 
 
                          <?php
							 }
							 else
							 {
							 ?>
 
<div style="text-align:center;"><img src="../imagenes/info.png" width="14" height="14" /> No hay documentos o archivos asociados al N&ordm; de expte.</div>
 
					<?php
	 				}
 					?>
 
 
 
 
 
			  </td>
 
		    </tr>
          </table>
 
 
 
 
 
          </td>
        </tr>
        <tr>
          <td style="text-align:center; padding-left:10px; padding-right:10px;">&nbsp;</td>
        </tr>
      </table>
 
 
 
 
 
</body>
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar