PHP - Enviar tabla por correo

 
Vista:
sin imagen de perfil

Enviar tabla por correo

Publicado por mj (10 intervenciones) el 08/07/2021 17:08:30
Buenas tardes,

Tengo el siguiente problema:

Tengo una tabla creada en con php la cual tiene un input por fila en el que el usuario introduce una cantidad segun la necesidad de ese cliente y quiero enviar todos los registros por correo. Resumido, es como una lista de necesidades de productos de un cliente.

Mi problema es que me muestra correctamente la tabla en pantalla con los campos para introducir la cantidad de cada fila, pero a la hora de enviar el corre, solo me manda la primera de las filas de la tabla. Aparte si relleno el input de cualquier otra fila, me manda esa cantidad aun que no pertenezca a la primera fila.

Adjunto el codigo que tengo por ahora de la parte html y la parte php en la que crea la tabla y en la que manda el correo.

Aqui cargo el codigo html y la 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!DOCTYPE html>
<html lang="es">
	<body>
		<div class="row">
			<div class="col-md-2 nopadding">
				<div class="sidebar-nav">
					<div class="navbar navbar-default" role="navigation">
						<div class="navbar-header">
							<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
								<span class="sr-only">Toggle navigation</span>
								<span class="icon-bar"></span>
								<span class="icon-bar"></span>
								<span class="icon-bar"></span>
							</button>
							<p class="nav navbar-nav">
								<a class="navbar-brand izqmargin" href="../menuadmin.php"><?php echo ucfirst($_SESSION['nom']) . ' ' . ucfirst($_SESSION['ape']); ?></a>
								<div class="opcionescuenta">
									<a href="../logout.php" role="button" class="btn btn-default btn-xs">Cerrar sesi&oacute;n</a>
								</div>
							</p>
						</div>
					</div>
				</div>
			</div>
			<div class="col-md-10 nopadding">
				<div class="col-md-12 top-buffer">
					<div class="jumbotron col-md-11">
						<div class="text-center">
							<h3><?php echo $row_Recordset1['cli_id']; ?> - <?php echo utf8_encode($row_Recordset1['cli_nombre']); ?> <?php if($row_Recordset1['baja']=='B') echo '<font color="#e74c3c"><b>BAJA</b></font>'; ?></h3>
                            <h3><?php echo'   <td style="vertical-align:middle">'; echo utf8_encode($row_Recordset3['desc_alm']); echo'</td>'; ?></h3>
                        </div>
                        <br>
						<div class="row">
							<?php if ($totalRows_Recordset3 == 0) {
								echo "<div align='center'><p class='alert alert-info'>No tienes depositos en este cliente.</p></div>";
								echo "<br>";
							}
							else {
								  echo' <table class="table table-bordered" style="text-align:center" id="tabladeposito" name="tabladeposito">';
									  echo'  <thead><tr style="color:white">';
                                      echo'    <td  bgcolor="#2c3e50" style="vertical-align:middle" width="20%"><b>REFERENCIA</b></td>';
                                      echo'    <td  bgcolor="#2c3e50" style="vertical-align:middle" width="10%"><b>MARCA</b></td>';
                                      echo'    <td  bgcolor="#2c3e50" style="vertical-align:middle" width="50%"><b>DESCRIPCION</b></td>';
                                      echo'    <td  bgcolor="#2c3e50" style="vertical-align:middle" width="10%"><b>STOCK</b></td>';
                                      echo'    <td  bgcolor="#2c3e50" style="vertical-align:middle" width="10%"><b>COMPRADOS</b></td>';
                                      echo'    <td  bgcolor="#2c3e50" style="vertical-align:middle" width="10%"><b>PEDIDO</b></td>';
										echo'  <td style="vertical-align:middle" width="5%" colspan="2"></td>';
									 echo'   </tr></thead>';
									  do {
										echo'  <tr>';
										 echo'   <tbody><td style="vertical-align:middle" bgcolor="#ffffff">'; echo ($row_Recordset3['ref']); echo'</td>';
                                         echo'   <td style="vertical-align:middle" bgcolor="#ffffff">'; echo ($row_Recordset3['division']); echo'</td>';
                                         echo'   <td style="vertical-align:middle" bgcolor="#ffffff">'; echo ($row_Recordset3['descripcion']); echo'</td>';
										 echo'   <td style="vertical-align:middle" bgcolor="#ffffff">'; echo ($row_Recordset3['stock']); echo'</td>';
										 echo'   <td style="vertical-align:middle" bgcolor="#ffffff">'; echo ($row_Recordset3['comprado']); echo'</td>';
                                         echo'   <td style="vertical-align:middle" bgcolor="#ffffff">';?>  <form method="post"> <input type="number" id="cantidad" name="cantidad[]" size="2" min="0">  <br /><?php echo'</td></tr>';
 
 
 
 
										} while ($row_Recordset3 = mysqli_fetch_assoc($Recordset3));
										}
									echo'</table><input type="submit" style="background:#1C3C50" name="boton" id="boton" class="btn btn-default" value="Enviar correo">';
							?>
 
						</div>
						<div align="center">
							<a href="depositosadmin.php?id=<?php echo $_GET['id'];?>&rep=<?php echo $_GET['rep']; ?>">
								<img class="text-center" src="../botones/atras.png" class="img-responsive" width="300" alt="Atr&aacute;s">
							</a>
						</div>
					</div>
				</div>
			</div>
		</div>
	</body>
</html>

Aqui la funcion de enviar correo
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
<?php
		mysqli_select_db($comercial, $database_comercial);
		$query_Recordset1 = "SELECT * FROM cliente INNER JOIN representante ON cliente.cli_rep=representante.id WHERE cliente.cli_id='".$_REQUEST['id']."'";
		$Recordset1 = mysqli_query($comercial, $query_Recordset1) or die(mysql_error());
		$row_Recordset1 = mysqli_fetch_assoc($Recordset1);
		$totalRows_Recordset1 = mysqli_num_rows($Recordset1);
 
 
		mysqli_select_db($comercial, $database_comercial);
		$query_Recordset3 = "SELECT * FROM `depositos` WHERE cliente='".$_REQUEST['id']."'";
		$Recordset3 = mysqli_query($comercial, $query_Recordset3) or die(mysql_error());
		$row_Recordset3 = mysqli_fetch_assoc($Recordset3);
		$totalRows_Recordset3 = mysqli_num_rows($Recordset3);
 
	if (isset($_POST['boton'])) {
 
		$productos = $_REQUEST['cantidad'];
 
		foreach($productos as $producto){
    	if($producto>=1){
		$email_from = "xxx@xxx.com";
		$email_to = "xxx@xxx.com";
		$subject = "";
 
		$body = "<html>";
		$body .= "<body>";
 
			$body .= "<div style='font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 16px;'>";
 
			$body .= "<table>".($row_Recordset3['ref'])."<br>\r\n</table>";
			$body .= "<b>Producto:</b> ".($row_Recordset3['ref'])." ".($row_Recordset3['division'])."<br>\r\n";
			$body .= "<b>Marca:</b> ".($row_Recordset3['division'])."<br>\r\n";
			$body .= "<b>Descripción:</b> ".($row_Recordset3['descripcion'])."<br>\r\n";
			$body .= "<b>Çantidad:</b> ".$producto."<br>\r\n";
 
			$body .= "</div>";
 
		$body .= "</body>";
		$body .= "</html>";
		$body = wordwrap($body,70);
		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 
 
 
		mail($email_to, utf8_decode($subject), utf8_decode($body), $headers);
 
 
 
 
			mysqli_select_db($comercial, $database_comercial);
			$query_Recordset4 = "SELECT id FROM representante ";
			$Recordset4 = mysqli_query($comercial, $query_Recordset4) or die(mysql_error());
			$row_Recordset4 = mysqli_fetch_assoc($Recordset4);
		}
 
	}
}
	$currentPage = $_SERVER["PHP_SELF"];
 
 
 
?>
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 Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Enviar tabla por correo

Publicado por Mauro (1036 intervenciones) el 12/07/2021 01:50:47
Hola mj:

Por lo que veo parece que estás creando el HTML del correo una vez por cada producto. Deberías dejar dentro del foreach sólo la parte que compete a cada registro es decir, la parte de <html> y <body> déjala por fuera de la repetición.

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
sin imagen de perfil

Enviar tabla por correo

Publicado por mj (10 intervenciones) el 12/07/2021 09:52:54
Hola Mauro!

Gracias por la contestacion, entiendo lo que quieres decirme, pero a la hora de ponerlo en practica no me hace lo que quiero.

He sacado las siguientes lineas del foreach:

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
$email_from = "xxx@xxx.com";
		$email_to = "xxx@xxx.com";
		$subject = "";
 
		$body = "<html>";
		$body .= "<body>";
 
			$body .= "<div style='font-family: Verdana, Arial, Helvetica, sans-serif;font-size: 16px;'>";
 
		$body .= "</body>";
		$body .= "</html>";
		$body = wordwrap($body,70);
		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 
 
 
		mail($email_to, utf8_decode($subject), utf8_decode($body), $headers);
 
 
 
 
			mysqli_select_db($comercial, $database_comercial);
			$query_Recordset4 = "SELECT id FROM representante ";
			$Recordset4 = mysqli_query($comercial, $query_Recordset4) or die(mysql_error());
			$row_Recordset4 = mysqli_fetch_assoc($Recordset4);

Por lo que solo tengo dentro del foreach lo siguiente:
1
2
3
4
5
$body .= "<table>".($row_Recordset3['ref'])."<br>\r\n</table>";
			$body .= "<b>Producto:</b> ".($row_Recordset3['ref'])." ".($row_Recordset3['division'])."<br>\r\n";
			$body .= "<b>Marca:</b> ".($row_Recordset3['division'])."<br>\r\n";
			$body .= "<b>Descripción:</b> ".($row_Recordset3['descripcion'])."<br>\r\n";
			$body .= "<b>Çantidad:</b> ".$producto."<br>\r\n";

Pero ahora no me manda el correo y me saca el siguiente error:

Warning: Invalid argument supplied for foreach() in xxx/xxx/xxx/home/html/visitas/depositosdetalleadmin.php on line 114


He probado mas opciones, pero no me manda el correo :S

Podrias decirme en que estoy fallando o como deberia hacerlo?

Muchas gracias por la paciencia!
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 Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Enviar tabla por correo

Publicado por Mauro (1036 intervenciones) el 13/07/2021 14:12:43
Hola mj! Ninguna molestia :)

¿Podrías publicar el código completo de cómo te ha quedado? ¿No deberías disponer los registros como filas de la tabla? ¿Por que la abres y cierras en una misma línea?
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