PHP - Evitar repetir líneas de tabla html sobre un tabla de mysql en php

 
Vista:
Imágen de perfil de jose
Val: 184
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar repetir líneas de tabla html sobre un tabla de mysql en php

Publicado por jose (71 intervenciones) el 24/02/2021 10:12:08
Intento hacer un código en donde pueda crear una tabla en html de forma que automáticamente cree líneas de la tabla hasta el final del campo. Lo he intentado con un for pero no hay forma

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
<caption>GASTOS POR CATEGORIAS</caption>
<tbody>
<?php
    $query = "select * from viaje WHERE viaje_nombre= '".$Reg."'";
    $result = mysqli_query($conn,$query);
 
 
    while($row=$result->fetch_assoc()){
        $tipo = $row['tipo'];
 
    ?>
  <tr>
    <th><?php $tipo ?></th>
    <!-- TOTAL -->
 <td><?php $query="SELECT CONCAT(SUM(cantidad), ' €') '".$tipo."' FROM viaje WHERE tipo = '".$tipo."' and viaje_nombre= '".$Reg."'";
    $result = mysqli_query($conn,$query);
 
//Si no hay gasto poner '0 €'
if (!empty($tipo)){
     echo $tipo; ?></td>
<?php } else {
    echo '0 €';  ?></td>
<?php } ?>
 </tr>
<?php } //FIN FOR ?>
 
</tbody>
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 joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar repetir líneas de tabla html sobre un tabla de mysql en php

Publicado por joel (1269 intervenciones) el 24/02/2021 12:53:01
Hola Jose, creo que falta la parte del código donde empieza el for... puede ser? no lo se ver...
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: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar repetir líneas de tabla html sobre un tabla de mysql en php

Publicado por Jefferson (203 intervenciones) el 24/02/2021 13:15:17
Hola amigo Jose y saludos Joel ->(gran aporte este forero)

Hay errores por todos lados, no entiendo eso
no veo la tabla, solo un elemento de grupo que es el tbody y este no acepta el atributo th

Aparte al th no le envía nada a pintar <th><?php $tipo ?></th>


Esta otra consulta aparte de mal escrita (después del concat debe haber una coma y la variable $tipo no se que hace ahi???)
No hace nada de nada, pues de ella no se extrae nada
y por ultimo mata a la primera porque se llaman iguales

1
?php $query="SELECT CONCAT(SUM(cantidad), ' €') '".$tipo."' FROM viaje WHERE tipo = '".$tipo."' and viaje_nombre= '".$Reg."'";

Si especificas mejor, seguro estoy que cualquier amigo del foro te colabora.

Saludos amigos
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 jose
Val: 184
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar repetir líneas de tabla html sobre un tabla de mysql en php

Publicado por jose (71 intervenciones) el 24/02/2021 13:28:37
Hola Joel, Jefferson,

Muchas gracias por contestar, es cierto faltaban cosas. Lo que intentaba era colocar lo necesario, en vez de colocar lo básico como los tags de html.

He realizado cambios en el código. Lo que intento es guardar en un array de nombre "$valoresTipo[$i]" los valores del campo de nombre "tipo" de una tabla llamada "viaje".

Como veis en el código hago un consulta query con DISTINCTROW y saco el número de líneas "$count" que utlilizo para el bucle for.


1
2
3
4
5
6
$query = "select DISTINCTROW tipo from viaje WHERE viaje_nombre= '".$Reg."'";
$result = mysqli_query($conn,$query);
//$row=$result->fetch_assoc();
$count = mysqli_num_rows($result);
//Bucle for para rellenar a array @valoresTipo
for ($i = 0; $i <= $count; $i++) {

Sin embargo apesar de que se crean tres líneas en la tabla html, no ocurre lo mismo con el array, apareciendo sólo el primer valor, y la query
1
SELECT CONCAT(SUM(cantidad), ' €') '".$valoresTipo[$i]."' FROM viaje WHERE tipo = '".$valoresTipo[$i]."' and viaje_nombre= '".$Reg."'";

Os dejo el código desde el div donde está la tabla en cuestión. Muchas gracias de antemano.

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
<div id="categorias">
          <table>
		  <caption>GASTOS POR CATEGORIAS</caption>
            <tbody>
			<?php
				$query = "select DISTINCTROW tipo from viaje WHERE viaje_nombre= '".$Reg."'";
				$result = mysqli_query($conn,$query);
				//$row=$result->fetch_assoc();
				$count = mysqli_num_rows($result);
				//Bucle for para rellenar a array @valoresTipo
				for ($i = 0; $i <= $count; $i++) {
					$valorTipo = mysqli_fetch_array($result);
					$valoresTipo[$i] = $valorTipo["tipo"];
					echo $valoresTipo[$i];
				?>
 
					 <tr>
						<th><?php echo $valoresTipo[$i]; ?></th>
					 <td><?php $query="SELECT CONCAT(SUM(cantidad), ' €') '".$valoresTipo[$i]."' FROM viaje WHERE tipo = '".$valoresTipo[$i]."' and viaje_nombre= '".$Reg."'";
						$result = mysqli_query($conn,$query);
						$row=mysqli_fetch_assoc($result);
						//Si no hay gasto poner '0 €'
						if (!empty($row[$valoresTipo[$i]])){
							echo $row[$valoresTipo[$i]]; ?></td>
					<?php } else {
							echo '0 €';  ?></td>
					<?php } ?>
					 </tr>
			<?php } //FIN FOR ?>
 
              </tbody>
 
      </table>
</div>
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: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar repetir líneas de tabla html sobre un tabla de mysql en php

Publicado por Jefferson (203 intervenciones) el 24/02/2021 15:09:21
Hagamos algo amigo

Dime exactamente que deseas hacer, primero que todo de donde viene $Reg (POST, GET, VARIABLE AL INICIO)

y que necesitas :

Ejemplo quieres buscar en la tabla viajes todos los viajes a Madrid y que sume todos los gastos que ahí ocurrieron?
y que te los pinte en una tabla ?

Si me ayudas a descifrar te ayudo a codificar

Saludos
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 jose
Val: 184
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar repetir líneas de tabla html sobre un tabla de mysql en php

Publicado por jose (71 intervenciones) el 24/02/2021 16:49:04
Hola Jefferson,

La tabla con los datos de la tabla funciona correctamente.

Lo que quiero es crear una tabla como esta

1
2
3
| Comida       | 260 € |
| Combustible  | 160 € |
| Alojamiento  | 360 € |

Los nombres de "Comida, Combustible, Alojamiento" se recoge del código:

1
2
3
4
5
6
7
8
9
10
<?php
$query = "select DISTINCTROW tipo from viaje WHERE viaje_nombre= '".$Reg."'";
$result = mysqli_query($conn,$query);
//$row=$result->fetch_assoc();
$count = mysqli_num_rows($result);
//Bucle for para rellenar a array @valoresTipo
for ($i = 0; $i <= $count; $i++) {
    $valorTipo = mysqli_fetch_array($result);
    $valoresTipo[$i] = $valorTipo["tipo"];
?>

"tipo" es el campo de la tabla viaje que tiene las categorías y que con el código de arriba se guarda en el array $valoresTipo[].

Con un bucle for pretendo que recorra los valores del array y los utilice para calcular el SUM donde tipo sea igual a $valoresTipo[],

""SELECT CONCAT(SUM(cantidad), ' €') '".$valoresTipo[$i]."' FROM viaje WHERE tipo = '".$valoresTipo[$i]."' and viaje_nombre= '".$Reg."'"

El problema es que a pesar que el array guarda todos los campos.

El bucle crea las celdas y añade tanto el valor del primer valor del array y su sum,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for ($i = 0; $i <= $count; $i++) {
        $valorTipo = mysqli_fetch_array($result);
        $valoresTipo[$i] = $valorTipo["tipo"];
        echo $valoresTipo[$i];
    ?>
 
    <tr>
 
         <th><?php echo $valoresTipo[$i]; ?></th>
 
         <td><?php $query="SELECT CONCAT(SUM(cantidad), ' €') '".$valoresTipo[$i]."' FROM viaje WHERE tipo = '".$valoresTipo[$i]."' and viaje_nombre= '".$Reg."'";
            $result = mysqli_query($conn,$query);
            $row=mysqli_fetch_assoc($result);
            //Si no hay gasto poner '0 €'
            if (!empty($row[$valoresTipo[$i]])){
                echo $row[$valoresTipo[$i]]; ?></td>
        <?php } else {
                echo '0 €';  ?></td>
        <?php } ?>
     </tr>
<?php } //FIN FOR ?>

Esto lo tengo implementado en el siguiente código sin un for, pero el código resulta muy repetitivo y obliga a realizar cambios de código caso de añadir otro valor al campo "tipo", expongo el código para que sirva de ejemplo de lo que quiero hacer.

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
<div id="categorias">
          <table>
		  <caption>GASTOS POR CATEGORIAS</caption>
            <tbody>
 
              <tr>
				<th id="total">GASTO TOTAL</th>
				<!-- TOTAL -->
             <td id="total"><?php $query_TOTAL="SELECT CONCAT(SUM(cantidad), ' €') total FROM viaje WHERE viaje_nombre= '".$Reg."'";
            $result_TOTAL = mysqli_query($conn,$query_TOTAL);
            $row=mysqli_fetch_assoc($result_TOTAL);
			//Si no hay gasto poner '0 €'
			if (!empty($row['total'])){
				 echo $row['total']; ?></td>
			<?php } else {
				echo '0 €';  ?></td>
			<?php } ?>
			 </tr>
			 <tr>
                <th>Comida</th>
				<!-- COMPRAS -->
            <td><?php $query_COMIDA="SELECT CONCAT(SUM(cantidad), ' €') comida FROM viaje WHERE tipo = 'Comida' and viaje_nombre= '".$Reg."'";
            $result_COMIDA = mysqli_query($conn,$query_COMIDA);
            $row=mysqli_fetch_assoc($result_COMIDA);
			//Si no hay gasto poner '0 €'
			if (!empty($row['comida'])){
				 echo $row['comida']; ?></td>
			<?php } else {
				echo '0 €';  ?></td>
			<?php } ?>
			 <tr>
                <th>Combustible</th>
				<!-- COMBUSTIBLE -->
			<td><?php $query_COMBUSTIBLE="SELECT CONCAT(SUM(cantidad), ' €') combustible FROM viaje WHERE tipo = 'Combustible' and viaje_nombre= '".$Reg."'";
            $result_COMBUSTIBLE = mysqli_query($conn,$query_COMBUSTIBLE);
            $row=mysqli_fetch_assoc($result_COMBUSTIBLE);
			//Si no hay gasto poner '0 €'
			if (!empty($row['combustible'])){
				 echo $row['combustible']; ?></td>
			<?php } else {
				echo '0 €';  ?></td>
			<?php } ?>
				 </tr>
			 <tr>
				<th>Compras</th>
				<!-- COMPRAS -->
			<td><?php $query_COMPRAS="SELECT CONCAT(SUM(cantidad), ' €') compras FROM viaje WHERE tipo = 'Compra' and viaje_nombre= '".$Reg."'";
            $result_COMPRAS = mysqli_query($conn,$query_COMPRAS);
            $row=mysqli_fetch_assoc($result_COMPRAS);
			//Si no hay gasto poner '0 €'
			if (!empty($row['compras'])){
				 echo $row['compras']; ?></td>
			<?php } else {
				echo '0 €';  ?></td>
			<?php } ?>
				 </tr>
			 <tr>
                <th>Alojamiento</th>
					<!-- ALOJAMIENTOS -->
			<td><?php $query_ALOJAMIENTO="SELECT CONCAT(SUM(cantidad), ' €') alojamientos FROM viaje WHERE tipo = 'Alojamiento' and viaje_nombre= '".$Reg."'";
            $result_ALOJAMIENTO = mysqli_query($conn,$query_ALOJAMIENTO);
            $row=mysqli_fetch_assoc($result_ALOJAMIENTO);
			//Si no hay gasto poner '0 €'
			if (!empty($row['alojamientos'])){
				echo $row['alojamientos']; ?></td>
			<?php } else {
				echo '0 €';  ?></td>
			<?php } ?>
				 </tr>
</tbody>
 
      </table>
 
    </div> <!-- Fin DIV categorias -->

Como ves es repetitivo y hay muchas más categorías, caso de crear otra obliga a venir a esta página y crear otro tr,td. Lo que busco con un for es meter todas las características en un array, recogerlas con un for y utilizarla el array en una query para que dinamicamente aparezcan las celdas y valores.

Espero haberme explicado mejor.

Saludos, Muchas gracias de antemano
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: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar repetir líneas de tabla html sobre un tabla de mysql en php

Publicado por Jefferson (203 intervenciones) el 24/02/2021 18:24:11
Ahora quedé más enredado y sigo sin entender, justo estoy en la hora de almuerzo. Al volver te preparo algo que es lo que entiendo leyendo tu primer código y que creo es lo que buscas.
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: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar repetir líneas de tabla html sobre un tabla de mysql en php

Publicado por Jefferson (203 intervenciones) el 24/02/2021 19:25:57
De vuelta

Esto fue lo que entendí. Corrígeme si no estoy en lo correcto.


Para probar crea una tabla llamada viajes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TABLE `viajes` (
  `id` int(11) NOT NULL,
  `viaje_nombre` varchar(150) NOT NULL,
  `fecha` datetime NOT NULL,
  `tipo` varchar(150) NOT NULL,
  `cantidad` decimal(10,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
INSERT INTO `viajes` (`id`, `viaje_nombre`, `fecha`, `tipo`, `cantidad`) VALUES
(1, 'madrid', '2021-02-01 00:00:00', 'gasolina', '36.24'),
(2, 'madrid', '2021-02-01 00:00:00', 'comida', '12.40'),
(3, 'madrid', '2021-02-01 00:00:00', 'alojamiento', '14.24'),
(4, 'madrid', '2021-02-02 00:00:00', 'alojamiento', '13.68'),
(5, 'madrid', '2021-02-03 00:00:00', 'gasolina', '4.36'),
(6, 'madrid', '2021-02-03 00:00:00', 'peajes', '2.90'),
(7, 'madrid', '2021-02-04 00:00:00', 'comida', '11.80'),
(8, 'madrid', '2021-02-02 00:00:00', 'comida', '10.55'),
(9, 'barcelona', '2021-02-01 00:00:00', 'comida', '12.30'),
(10, 'barcelona', '2021-02-01 00:00:00', 'alojamiento', '12.30'),
(11, 'barcelona', '2021-02-01 00:00:00', 'peaje', '2.31'),
(12, 'barcelona', '2021-02-01 00:00:00', 'alojamiento', '16.55'),
(13, 'barcelona', '2021-02-03 00:00:00', 'alojamiento', '12.36'),
(14, 'barcelona', '2021-02-03 00:00:00', 'comida', '18.63');

Ahora crea un archivo php y copias este codigo
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
<?php
 $Reg='madrid';
 
 $conn = new mysqli("localhost", "root", "", "test");
 
 $query = "select * from viajes WHERE viaje_nombre= '".$Reg."' group by fecha";
 $result = mysqli_query($conn,$query);
 
 echo '
  <table>
    <thead>
      <tr>
        <th scope="col">id</th>
        <th scope="col">fecha</th>
        <th scope="col">nombre</th>
      </tr>
    </thead>
    <tbody>
 ';
 while($row=$result->fetch_assoc()){
     echo '
     <tr>
     <td>'.$row['id'].'</td>
     <td>'.$row['fecha'].'</td>
     <td>'.$row['viaje_nombre'].'</td>
     </tr>
     ';
 }
echo '
   <tbody>
 </table>
<br>
<table>
<caption>GASTOS POR CATEGORIAS</caption>
<thead>
  <tr>
    <th scope="col">tipo</th>
    <th scope="col">suma</th>
  </tr>
</thead>
<tbody>
';
$query = "select tipo,sum(cantidad) as suma from viajes WHERE viaje_nombre= '".$Reg."' group by tipo";
$result = mysqli_query($conn,$query);
while($row=$result->fetch_assoc()){
   echo '
   <tr>
   <td>'.$row['tipo'].'</td>
   <td>'.$row['suma'].'</td>
   </tr>
   ';
}
echo '
 <tbody>
</table>
';
?>

El resultado debería ser así:

table

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de jose
Val: 184
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Evitar repetir líneas de tabla html sobre un tabla de mysql en php

Publicado por jose (71 intervenciones) el 24/02/2021 19:33:18
Hola Jefferson,

Muchas gracias por el esfuerzo.

Finalmente encontré la forma de hacerlo. Mi error estaba en que utilizaba un solo FOR.

Aquí dejo el código

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
<div id="categorias">
          <table>
		  <caption>GASTOS POR CATEGORIAS</caption>
            <tbody>
			<?php
				$query = "select DISTINCTROW tipo from viaje WHERE viaje_nombre= '".$Reg."'";
				$result = mysqli_query($conn,$query);
				//$row=$result->fetch_assoc();
				$count = mysqli_num_rows($result);
				//Bucle for para rellenar a array @valoresTipo
				for ($i = 0; $i < $count; $i++) {
					$valorTipo = mysqli_fetch_array($result);
					$valoresTipo[$i] = $valorTipo["tipo"];
 
				}
				?>
 
					 <tr>
					<?php for ($i = 0; $i < $count; $i++) { ?>
						<th><?php
 
						echo $valoresTipo[$i]; ?></th>
					 <td><?php $query="SELECT CONCAT(SUM(cantidad), ' €') '".$valoresTipo[$i]."' FROM viaje WHERE tipo = '".$valoresTipo[$i]."' and viaje_nombre= '".$Reg."'";
						$result = mysqli_query($conn,$query);
						$row=mysqli_fetch_assoc($result);
						//Si no hay gasto poner '0 €'
						if (!empty($row[$valoresTipo[$i]])){
							echo $row[$valoresTipo[$i]]; ?></td>
					<?php } else {
							echo '0 €';  ?></td>
					<?php } ?>
					 </tr>
			<?php } //FIN FOR ?>
 
              </tbody>
 
      </table>
</div>
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