PHP - Enviar consulta MYSQL a correo utilizando PHP

 
Vista:
sin imagen de perfil

Enviar consulta MYSQL a correo utilizando PHP

Publicado por Adrian (7 intervenciones) el 17/04/2018 22:59:33
Buenas tardes
Les cuento que valiendome de tutoriales y editanto porciones de código que encontré en Internet (no soy programador) hice un modesto desarrollo web (php+mysql) que imprime un query sql en pantalla y que lo arma para que se vea asi:


cierre


Este es el codigo de cierre.php

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
<html>
 
<b>CRONOGRAMA CIERRE DE TURNOS</>
 
<table style="margin: 0 auto;">
 
<td><font size="2"><b>Turno</b></font></td>
<td><font size="2"><b>TK Remedy</b></font></td>
<td><font size="2"><b>Monitoreo</b></font></td>
<td><font size="2"><b>Alarma</b></font></td>
<td><font size="2"><b>Ultimo Avance | Seguimiento</b></font></td>
<td><font size="2"><b>Estado</b></font></td>
<td><font size="2"><b>Fecha & Hora</b></font></td>
<td><font size="2"><b>ID</b></font></td>
</tr>
 
<style type='text/css'>
 
tr:nth-child(odd) {
    background-color:#f2f2f2;
}
tr:nth-child(even) {
    background-color:#fbfbfb;
}
 
</style>
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
<?php
 
header('Content-Type: text/html; charset=utf-8');
 
  $link = @mysql_connect("localhost", "usuario","clave")
      or die ("Error al conectar a la base de datos.");
  @mysql_select_db("base", $link)
      or die ("Error al conectar a la base de datos.");
 
  mysql_query("set names 'utf8'");
 
  $query =  "SELECT * FROM tabla WHERE estatus != 'C' ORDER by Fecha DESC";
  $result = mysql_query($query);
 
  $numero = 0;
  while($row = mysql_fetch_array($result))
  {
    echo "<tr><td width=\"5%\"><font size=\"2\">" .
            $row["turno"] . "</font></td>";
    echo "<td width=\"10%\"><font size=\"2\">" .
            $row["tkremedy"] . "</font></td>";
    echo "<td width=\"10%\"><font size=\"2\">" .
            $row["monitoreo"] . "</font></td>";
    echo "<td width=\"18%\"><font size=\"2\">" .
            $row["alarma"] . "</font></td>";
    echo "<td width=\"26%\"><font size=\"2\">" .
            $row["avance"] . "</font></td>";
    echo "<td width=\"15%\"><font size=\"2\">" .
            $row["status"] . "</font></td>";
    echo "<td width=\"30%\"><font size=\"2\">" .
            $row["Fecha"] . "</font></td>";
    echo "<td width=\"2%\"><font size=\"2\">" .
            $row["id"] . "</font></td>";
        $numero++;
  }
  echo "<tr></tr><tr></tr><tr></tr><tr><td colspan=\"15\"><font size=\"2\"><b><u>Total Tickets</u>: " . $numero .
      "</b></font></td></tr>";
 
 
  mysql_free_result($result);
  mysql_close($link);
 
 
?>
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
</table>
 
<form method="get" action="./index.htm">
<p style=text-align:center><input type="submit" value="Volver" />
</form>
 
</tr>
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
<DIV ALIGN=center>
 
<p style="text-align:center;margin-left:auto;margin-right:auto;"><span
        style="font-size: 9pt">
 
2018
 
</br>
 
< Powered by Debian Linux server Apache2 PHP MySQL >
 
</br>
 
</DIV>
 
</html>

Lo que ahora deseo hacer, y aquí va la consulta a Uds., es enviar dicha pagina o query por e-mail y que se arme con tablas, de manera similar a la pagina de arriba (cierre.php) .
Encontré un código que empece a adaptar y que quedo así:

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
<?php
$servername = "localhost";
$username = "usuario";
$password = "clave";
$dbname = "base";
 
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
 
$sql = "SELECT * FROM tabla";
 
$result = mysqli_query($conn, $sql);
 
if (mysqli_num_rows($result) > 0) {
   // output data of each row
  while($row = mysqli_fetch_assoc($result)) {
 
$msg = "Turno: " . $row["turno"]. " - TK Remedy: " . $row["tkremedy"]. " -Monitoreo:" . $row["monitoreo"] . " -Alarma:" . $row["alarma"] . " -Avance:" . $row["avance"]  . " -Status:" . $row["status"] ." -Fecha:" . $row["Fecha"] . "<br>";
 
$msg = wordwrap($msg,70);
$headers =  'MIME-Version: 1.0' . "\r\n";
$headers .= 'From: Root <usuario@dominio.com>' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 
  }
mail("usuario@dominio.com","Cierre de turnos PF",$msg,$headers);
  } else {
   echo "0 results";
  }
 
 mysqli_close($conn);
 ?>

El correo llega como se ve a continuación.
Como verán tengo 2 problemas, el primero que solo se imprime la ultima carga en la base de datos, el segundo que el resultado llega sin armarse dentro de tablas.

Agradezco de antemano cualquier ayuda.
Muchas Gracias.

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

Enviar consulta MYSQL a correo utilizando PHP

Publicado por xve (6935 intervenciones) el 18/04/2018 07:46:41
Hola Adrian, has hecho mucho para no saber programar... felicidades!!!

Intento explicarte tus dudas...

el problema que tienes en tu códigos, es que envías el últimos registros, ya que la variable $msg no concatena, sino que se define para cada iteración del bucle...prueba así:

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
<?php
$servername = "localhost";
$username = "usuario";
$password = "clave";
$dbname = "base";
 
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
	die("Connection failed: " . mysqli_connect_error());
}
 
$sql = "SELECT * FROM tabla";
 
$result = mysqli_query($conn, $sql);
 
if (mysqli_num_rows($result) > 0) {
	// output data of each row
	$msg="";
	while($row = mysqli_fetch_assoc($result)) {
 
		$msg. = "Turno: " . $row["turno"]. " - TK Remedy: " . $row["tkremedy"]. " -Monitoreo:" . $row["monitoreo"] . " -Alarma:" . $row["alarma"] . " -Avance:" . $row["avance"]  . " -Status:" . $row["status"] ." -Fecha:" . $row["Fecha"] . "<br>\n";
 
	}
	$msg = wordwrap($msg,70);
	$headers =  'MIME-Version: 1.0' . "\r\n";
	$headers .= 'From: Root <usuario@dominio.com>' . "\r\n";
	$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
	mail("usuario@dominio.com","Cierre de turnos PF",$msg,$headers);
} else {
	echo "0 results";
}
 
mysqli_close($conn);
?>

Es importante tabular correctamente el código para ver claramente donde tienes colocadas cada una de las instrucciones.

Asín te funciona correctamente el listado?
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 consulta MYSQL a correo utilizando PHP

Publicado por Adrian (7 intervenciones) el 18/04/2018 15:20:19
XVE, lo probé pero me dio error 500 http.

Revise el código y encontré un punto luego de $msg

1
$msg. = "Turno: " . $row["turno"]. " - TK Remedy: " . $row["tkremedy"].

Se lo quite y el mail salio pero de igual manera, es decir, solo se imprime la primera entrada.
Otra diferencia que encontré fue que bajo el comentario "output data of each row" agregaste

1
$msg="";

Muchas gracias
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 xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Enviar consulta MYSQL a correo utilizando PHP

Publicado por xve (6935 intervenciones) el 18/04/2018 19:19:44
Hola Adrian, tendras que revisar el log del Apache para ver exactamente que error te da, o habilitar los errores del PHP.... sin verlo y sin poder probarlo no se por donde mirar...
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 consulta MYSQL a correo utilizando PHP

Publicado por Adrian (7 intervenciones) el 18/04/2018 22:23:45
Hola XVE

Esto es lo que arroja el error.log del Apache2

PHP Parse error: syntax error, unexpected '=' in /var/www/html/envio_mail4.php on line 23

Detallo la linea 23 del código:

1
$msg. = "Turno: " . $row["turno"]. " - TK Remedy: " . $row["tkremedy"]. " -Monitoreo:" . $row["monitoreo"] . " -Alarma:" . $row["alarma"] . " -Avance:" . $row["avance"]  . " -Status:" . $row["status"] ." -Fecha:" . $row["Fecha"] . "<br>\n";

Si le quito el punto que esta luego de $msg el mail se envía pero solo con el ultimo registro:


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

Enviar consulta MYSQL a correo utilizando PHP

Publicado por xve (6935 intervenciones) el 19/04/2018 08:08:12
El punto detras del $msg es para ir concatenando todos los registros en una sola variable... no entiendo porque te da ese error...
prueba así:

1
$msg = $msg . "Turno: " . $row["turno"]. " - TK Remedy: " . $row["tkremedy"]. " -Monitoreo:" . $row["monitoreo"] . " -Alarma:" . $row["alarma"] . " -Avance:" . $row["avance"]  . " -Status:" . $row["status"] ." -Fecha:" . $row["Fecha"] . "<br>\n";

Coméntanos, ok?
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 consulta MYSQL a correo utilizando PHP

Publicado por Adrian (7 intervenciones) el 19/04/2018 20:53:43
!Funciono!

Se ve asi:
Ahora solo me falta ordenar el resultado en una tabla.


Muchas gracias XVE

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

Enviar consulta MYSQL a correo utilizando PHP

Publicado por xve (6935 intervenciones) el 19/04/2018 22:18:44
En una tabla seria algo así:
1
2
3
4
5
6
7
8
$msg="<table><tr>";
while($row = mysqli_fetch_assoc($result)) {
 
	$msg = $msg."<td>Turno: " . $row["turno"]. " - TK Remedy: " . $row["tkremedy"]. " -Monitoreo:" . $row["monitoreo"] . " -Alarma:" . $row["alarma"] . " -Avance:" . $row["avance"]  . " -Status:" . $row["status"] ." -Fecha:" . $row["Fecha"] . "</td>\n";
 
}
$msg="</tr></table>";
$msg = wordwrap($msg,70);

Pon tantos <td>...</td> como columnas quieras...
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 consulta MYSQL a correo utilizando PHP

Publicado por Adrian (7 intervenciones) el 19/04/2018 22:24:54
Lo probe, no arrojo error pero el mensaje llega vacío.
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

Enviar consulta MYSQL a correo utilizando PHP

Publicado por Memo LG (1 intervención) el 07/12/2023 20:16:48
Hola. Gracias a este hilo pude resolver mi código, les comparto mi versión, espero les sea de utilidad.

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
while($row = mysqli_fetch_assoc($result)) {
 
	//Obtenemos el resultado de la consulta en columnas, concatenando cada fila.
	$filas= $filas."<tr>
				<td>" . $row["turno"]. " </td>
				<td>" . $row["tkremedy"]. "</td>
				<td>" . $row["monitoreo"] . "</td>
				<td>" . $row["alarma"] . " </td>
				<td>" . $row["avance"]  . "</td>
				<td>" . $row["status"] ." </td>
				<td>" . $row["Fecha"] . "</td>
			</tr>";
} // Fin del While.
 
//Creamos el mensaje con los encabezados de la tabla.
$msg = "
 <table border class='default'>
<caption><b>El título de tu tabla aquí</b></caption>
            <thead align='center'>
              <tr>
              <th>Turno</th>
              <th>TK Remedy</th>
              <th>Monitoreo</th>
              <th>Alarma</th>
              <th>Avance</th>
              <th>Status</th>
              <th>Fecha</th>
              </tr>
            </thead>
            <tbody>
            " . $filas . "
            </tbody>
          </table>
//Si queremos visualizar el mensaje
echo "<div class='container'><br> Este es el mensaje que se enviará <br>".$msg."</div>";
 
//Utilando el script de PHPMailer y definiendolo cómo función.
EnviarMail($EnviarA, $AnombreDe, $msg, $Asunto);
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