Foros del Web » Programando para Internet » PHP »

listado de consulta sql en el cuerpo de un email con función mail()

Estas en el tema de listado de consulta sql en el cuerpo de un email con función mail() en el foro de PHP en Foros del Web. Tratando de pasar una consulta SQL por email me he encontrado con un problema extraño. La consulta la hace bien; luego guardo el listado en ...
  #1 (permalink)  
Antiguo 13/12/2010, 04:19
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 19 años, 10 meses
Puntos: 1
Pregunta listado de consulta sql en el cuerpo de un email con función mail()

Tratando de pasar una consulta SQL por email me he encontrado con un problema extraño.
La consulta la hace bien; luego guardo el listado en un array:
Código:
	$i=0;
	while($fila = mysql_fetch_array($result)){
		$resultado[$i] = $fila[0];
		$i++;
	}
Quizá no sea la forma más ortodoxa de hacerlo pero funciona.

El caso es que luego quiero que ese listado aparezca en el cuerpo del email, pero no funciona.

¿Podría alguien decirme qué está mal en este código? Pongo a partir de cuando da problemas
Código:
		$nosotros = '[email protected]';
		$reception = '[email protected]';
		$subject = 'loquesea.com (LISTADO)';
		$body = "Saludos.<p />
		El resultado de <b>$query</b> sobre $dbname fueron $lineas artículos con estos valores: <p />";
				for($j=0;$j<$i;$j++){ 
					$articulo=$resultado[$j];
					echo $articulo."\n";
				}
		"<br />Saludos,<p />loquesea";

		//to send on HTML format
		$headers = "MIME-Version: 1.0\r\n";
		// to see all characters on the e-mail correctly (UTF-8 or any other).
		$headers .= "Content-type: text/html; charset=UTF-8\r\n";

		//sender's address
		$headers .= "From: loquesea <$nosotros>\r\n";

		//if we want to use a different answer mail just put it here 
		//$headers .= "Reply-To: [email protected]\r\n";

		//path of the message, from origin to destination
		//$headers .= "Return-path: [email protected]\r\n";

		//mails that will receive as copy
		$headers .= "Cc: [email protected]\r\n";

		//mails that will receive a hidden copy
		//$headers .= "Bcc: [email protected]\r\n";

/*************************************************************************************************************************/
		$envio = mail($reception,$subject,$body,$headers);
		if(!$envio){
			echo "<p />Algún dato no es válido: nosotros: $nosotros<p />
		<p />asunto: $subject,<p />cuerpo: $body <p /><br><a href='index.php'>Volver a INDEX</a> para solucionarlo.";
		}
	
mysql_free_result($result);

@mysql_close($wpdb->dbh);
?>
__________________
No es verdad que sea un completo inútil. Al menos sirvo para dar mal ejemplo

Última edición por Batusai; 13/12/2010 a las 05:46
  #2 (permalink)  
Antiguo 13/12/2010, 06:45
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 11 meses
Puntos: 13
Respuesta: listado de consulta sql en el cuerpo de un email con función mail()

Cuál es el error que te tira? O simplemente no te llegan los e-mails?
El código a simple vista tendría que funcionar, pero si me expecificas el error que te da o cual es el problema en concreto por el cual no llegan tal vez te pueda ser de más ayuda.
  #3 (permalink)  
Antiguo 13/12/2010, 07:33
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 19 años, 10 meses
Puntos: 1
Respuesta: listado de consulta sql en el cuerpo de un email con función mail()

Llega un email, sí, pero el contenido del texto es este:
Código:
Saludos.

El resultado de SELECT DISTINCT name FROM ps_product_lang ORDER BY name sobre user_lists fueron 53 artículos con estos valores: 
.
.
.
.
.
Es decir, que cuando llega al buble "for" no guarda nada en el texto del email. (Los puntos los he añadido para que se vea el código con más claridad. En realidad aparece un espacio en blanco, y el "saludos" del final tampoco aparece)

De hecho añadí este código para que creara un .xsl con el listado.
Código:
header("Content-type: application/excel");
header("Content-Disposition: attachment; filename=".$filename."_".$datestamp.".xls");
header("Pragma: no-cache");
header("Expires: 0");
El caso es que lo hace. Es decir, que en $resultado[$i] el contenido es real y lo inserta en ese archivo Excel creado, pero en el email no aparece.
__________________
No es verdad que sea un completo inútil. Al menos sirvo para dar mal ejemplo

Última edición por Batusai; 13/12/2010 a las 07:46 Razón: añadir más datos
  #4 (permalink)  
Antiguo 14/12/2010, 06:21
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 19 años, 10 meses
Puntos: 1
Respuesta: listado de consulta sql en el cuerpo de un email con función mail()

¿Podría ser que en el código del cuerpo del mensaje pongo un punto y coma y lo tome como el final del mensaje?
Cita:
$body = "Saludos.<p />
El resultado de <b>$query</b> sobre $dbname fueron $lineas artículos con estos valores: <p />";
for($j=0;$j<$i;$j++){
$articulo=$resultado[$j];
echo $articulo."\n";
}
"<br />Saludos,<p />loquesea";
De ser así, ¿cómo poder salvar la dificultad y que se impriman en el cuerpo del mensaje los nombres que salgan del buble for?
__________________
No es verdad que sea un completo inútil. Al menos sirvo para dar mal ejemplo
  #5 (permalink)  
Antiguo 14/12/2010, 07:43
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 11 meses
Puntos: 13
Respuesta: listado de consulta sql en el cuerpo de un email con función mail()

En vez de

echo $articulo."\n";

pone:
$body.=$articulo."\n";

Y con eso debería funcionar.
  #6 (permalink)  
Antiguo 14/12/2010, 08:07
 
Fecha de Ingreso: diciembre-2010
Mensajes: 61
Antigüedad: 13 años, 11 meses
Puntos: 4
Respuesta: listado de consulta sql en el cuerpo de un email con función mail()

Cita:
Iniciado por areslepra Ver Mensaje
En vez de

echo $articulo."\n";

pone:
$body.=$articulo."\n";

Y con eso debería funcionar.

Estoy de acuerdo, ten en cuenta que $body es un string al que tienes que concatenar los valores de los articulos.
  #7 (permalink)  
Antiguo 14/12/2010, 09:22
Avatar de Batusai  
Fecha de Ingreso: enero-2005
Ubicación: Málaga -Andalucía- España
Mensajes: 130
Antigüedad: 19 años, 10 meses
Puntos: 1
Respuesta: listado de consulta sql en el cuerpo de un email con función mail()

¡¡ESO ES!!

Lo he puesto así y funciona:
Código:
		$body = "Saludos.<p />
		El resultado de <b>$query</b> sobre $dbname fueron $lineas artículos con estos valores: <p />";
				for($j=0;$j<$i;$j++){ 
					$articulo=$resultado[$j];
					echo $articulo."\n";
					$body.=$articulo."<br />";
				}
		$body.="<br />Saludos";
Muchas gracias a los dos, areslepra y yop289
__________________
No es verdad que sea un completo inútil. Al menos sirvo para dar mal ejemplo

Etiquetas: cuerpo, insertar, mail, mysql, receptor, select, arreglos
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 05:51.