Foros del Web » Programando para Internet » PHP »

Mostrar un listado de usuarios y enviarlo por email para cada discoteca

Estas en el tema de Mostrar un listado de usuarios y enviarlo por email para cada discoteca en el foro de PHP en Foros del Web. ¡Hola! Creo que es la primera vez que consulto algo en este foro. Espero que puedan ayudarme.. Actualmente me funciona la idea básica que es ...
  #1 (permalink)  
Antiguo 23/11/2012, 09:44
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 13 años, 1 mes
Puntos: 0
Pregunta Mostrar un listado de usuarios y enviarlo por email para cada discoteca

¡Hola! Creo que es la primera vez que consulto algo en este foro. Espero que puedan ayudarme..

Actualmente me funciona la idea básica que es recoger y mostrar, línea a línea, el nombre y apellidos de todos los usuarios que hay en la tabla USUARIO_DISCO y que tengan el UD_DIA_ELEGIDO en "viernes" y el UD_DISCOTECA con un "nombre concreto". Acto seguido llamo a la clase PHPMailer, configuro los parámetros y ahí empiezan los problemillas... El envío del email lo hace bien, pero todavía sin el contenido deseado...

Mis dudas:

¿Cómo puedo guardar el listado de usuarios que me devuelve la consulta, a través del array, en $body, y asi tener correctamente el contenido del mensaje en $mail->MsgHTML('')?

¿Cómo podría enviar el listado de los usuarios (de cada discoteca) a los emails correspondientes, que estan almacenados en otra tabla: DISCOTECA.D_EMAIL? ¿Tengo que meter el actual bucle while dentro de otro bucle (foreach o while) o cómo?

¿Habría algún problema si meto la SELECT de los usuarios dentro del bucle y que vaya cambiando su valor de UD_DISCOTECA (el nombre de esta) por un $array que contenga todos los nombres de las discotecas (SELECT D_NOMBRE FROM DISCOTECA)?

El resultado esperado sería que recorriera una a una las discotecas (mediante D_NOMBRE ó D_ID) haciendo cada vez el listado y el envío por email de los usuarios a la dirección correspondiente.

Tengo las 2 tablas relacionadas mediante: DISCOTECA(D_ID) y USUARIO_DISCO(UD_ID_DISCO). Osea, que en las 2 existe una columna con idéntico contenido, por si hiciera falta...

¡Una ayudita no me vendría nada mal, por favorrr! :D

Este es el código actual, que +/- funciona:
Código PHP:
<?php 

    mysql_connect
("localhost","user","pass");
    
    
mysql_select_db("name");
    
    
$sql="SELECT UD_NOMBRE, UD_APELLIDOS FROM USUARIO_DISCO WHERE UD_DIA_ELEGIDO = 'viernes' AND UD_DISCOTECA = 'Animas'";
    
    
mysql_query("SET NAMES utf8");  
      
    if (!
$resul=mysql_query($sql)) {
        echo 
"No se ha podido realizar la consulta<br>";
        echo 
mysql_error();
        exit;
    }
    
    while (
$arr_resul=mysql_fetch_array($resul)){
    
        
$nombre $arr_resul["UD_NOMBRE"];
        
$apellidos $arr_resul["UD_APELLIDOS"];
        
        echo 
$nombre.' '.$apellidos.'<br>';
    }
    
    
mysql_free_result($resul);
    
    
mysql_close();
 

    require_once(
'includes/class.phpmailer.php');
    
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

    
$mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
    
    
$mail->IsSMTP(); // telling the class to use SMTP
    
    
try {
      
$mail->Host       "smtp.dominio.es"// SMTP server
      
$mail->SMTPDebug  2;                     // enables SMTP debug information (for testing)
      
$mail->SMTPAuth   true;                  // enable SMTP authentication
      
$mail->Host       "smtp.dominio.es";     // sets the SMTP server
      
$mail->Port       587;                    // set the SMTP port for the server
      
$mail->Username   "[email protected]"// SMTP account username
      
$mail->Password   "pass";        // SMTP account password
      
$mail->AddAddress('[email protected]''Receptor');
      
$mail->SetFrom('[email protected]''Envíos');
      
$mail->Subject 'Listado';
      
$mail->AltBody 'Para ver el mensaje, utiliza un visor de emails HTML...'// optional - MsgHTML will create an alternate automatically
      
$mail->MsgHTML('');
      
$mail->Send();
      echo 
"Mensaje enviado correctamente</p>\n";
    } catch (
phpmailerException $e) {
      echo 
$e->errorMessage(); //Pretty error messages from PHPMailer
    
} catch (Exception $e) {
      echo 
$e->getMessage(); //Boring error messages from anything else!
    
}  

?>
¡Need help! ¡Gracias de antemano y un saludo! :)

Última edición por MikLoN; 23/11/2012 a las 10:13
  #2 (permalink)  
Antiguo 23/11/2012, 10:23
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 9 meses
Puntos: 41
Respuesta: Mostrar un listado de usuarios y enviarlo por email para cada discoteca

1º ¿Cómo puedo guardar el listado de usuarios que me devuelve la consulta, a través del array, en $body, y asi tener correctamente el contenido del mensaje en $mail->MsgHTML('')?

No te entiendo.

2º ¿Cómo podría enviar el listado de los usuarios (de cada discoteca) a los emails correspondientes, que estan almacenados en otra tabla: DISCOTECA.D_EMAIL? ¿Tengo que meter el actual bucle while dentro de otro bucle (foreach o while) o cómo?

Si, pero podrías hacer que cuando este consultando usuario por usuario realizar un consulta donde te saca el correo de cada uno y lo vas mostrando. Como yo lo aria seria de esta manera para mandar un mensaje a cada usuario, sacaría el email de cada usuario:

Código PHP:
Ver original
  1. $sql = mysql_query("SELECT nombre, apellido, email FROM usuario", $conexion) or die(mysql_error());
  2. while($Mostrar = mysql_fetch_array($sql)){
  3. // email de destino
  4. $email = $Mostrar['email'];
  5. // asunto del email
  6. $subject = $_POST['motivo']; // capturas el motivo del mensaje.
  7. // Cuerpo del mensaje
  8. $mensaje = "Hola ".$Mostrar['nombre']." ".$Mostrar['apellido']."\n"; // Muestra el nombre y apellido del usuario.              
  9. $mensaje.= "IP: ".$_SERVER['REMOTE_ADDR']."\n\n";
  10. $mensaje.= "-------------------------------------------------------------------- \n\n";
  11. $mensaje.= $_POST['comentarios']."\n\n"; // Capturo el detalle del mensaje
  12. $mensaje.= "---------------------------------- \n";
  13. $mensaje.= "Enviado desde http://programasoft.com/deivis.html \n";
  14.    
  15. // headers del email
  16. $headers = "From: ".$email."\r\n";
  17. // Enviamos el mensaje
  18.  if (mail($email, $subject, $mensaje, $headers)) {
  19.   $aviso = '<script>alert("Su mensaje se envio correctamente!!!");</script>';
  20.  }else{
  21.   $aviso = '<script>alert("Error al enviar su mensaje, compruebe los campos!!!");</script>';
  22.  }             
  23. }

Como puedes ver le mando el mensaje a cada usuario de la BD uno por uno con un while.

3º ¿Habría algún problema si meto la SELECT de los usuarios dentro del bucle y que vaya cambiando su valor de UD_DISCOTECA (el nombre de esta) por un $array que contenga todos los nombres de las discotecas (SELECT D_NOMBRE FROM DISCOTECA)?

Si podira funcionar que por cada usuario realize una consulta para sacar al informacion.
  #3 (permalink)  
Antiguo 23/11/2012, 10:41
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Mostrar un listado de usuarios y enviarlo por email para cada discoteca

¡Muchas gracias por la ayuda Deivis!

En la 1ª pregunta me refiero a: ¿cómo podría meter la lista de usuarios que me devuelve el bucle while dentro de $mail->MsgHTML('') (la variable que compone el cuerpo del mensaje).
Lo decía porque he visto en algún ejemplo por internet que dentro de las comillas de $mail->MsgHTML('') se puede meter un $body que contenga el cuerpo del mensaje (en formato html si se desea...).

Por otra parte, comentar que en la 2ª pregunta necesito acceder a los emails de las propias discotecas, no de los usuarios. La idea es generar un listado de los usuarios que quieren ir a la discoteca para mas tarde enviarlo al email del propietario.

Última edición por MikLoN; 23/11/2012 a las 10:47
  #4 (permalink)  
Antiguo 23/11/2012, 13:16
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 9 meses
Puntos: 41
De acuerdo Respuesta: Mostrar un listado de usuarios y enviarlo por email para cada discoteca

En la 1ª pregunta me refiero a: ¿cómo podría meter la lista de usuarios que me devuelve el bucle while dentro de $mail->MsgHTML('') (la variable que compone el cuerpo del mensaje).
Lo decía porque he visto en algún ejemplo por internet que dentro de las comillas de $mail->MsgHTML('') se puede meter un $body que contenga el cuerpo del mensaje (en formato html si se desea...).


hechale un vistaso a este tema, puedes hacer los mismo que estan asiendo aqui con lo del $mail->MsgHTML(''): Problema el enviar mail a varios usuarios, y asi podrias agregar los usuarios al contenido en un ciclo.

Por otra parte, comentar que en la 2ª pregunta necesito acceder a los emails de las propias discotecas, no de los usuarios. La idea es generar un listado de los usuarios que quieren ir a la discoteca para mas tarde enviarlo al email del propietario.

Por lo mismo solamente puse un ejemplo ya seria cambiar la sentencia sql a la manera como lo quieres tu que seria sacar los usuarios que quieren ir a la discoteca dentro de un while o bucle como a ti te parezca mejor.
  #5 (permalink)  
Antiguo 23/11/2012, 14:24
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Mostrar un listado de usuarios y enviarlo por email para cada discoteca

Ya veo, hasta en la web oficial de http://phpmailer.worxware.com/index.php?pg=exampledb ponen eso:

Código PHP:
Ver original
  1. $body = file_get_contents('contents.html');

Pero creo que sólo es para mostrar el contenido de un html que ya esta creado en el directorio raiz. Lo único que se me ocurre es que el php me guarde un archivo .html con el listado de usuarios para pasarselo a $body, pero concatenando $body = $body .= $body .= se debería poder hacer también, ¿no? He probado y sólo he conseguido que me envíe tantos emails como usuarios hay en la consulta... (Me genera un email con una linea de 1 usuario y lo envia. Así sucesivamente hasta acabar con los que haya devuelto la select)
  #6 (permalink)  
Antiguo 23/11/2012, 14:52
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 9 meses
Puntos: 41
Respuesta: Mostrar un listado de usuarios y enviarlo por email para cada discoteca

Pues eso seria una solución, poner todos los usuarios primero en un archivo html y después mandarlo en el E-Mail. ya miraste el link que te di, como el agrega una lista de usuarios en un ciclo, de pronto se pueda hacer lo mismo con lo del contenido:

Código PHP:
Ver original
  1. $lista_mail = array();//lista de direcciones
  2. ##
  3. while ($qry = mysql_fetch_array($result)){  
  4.          /* suponiendo que email es un atributo de la tabla,
  5.              no olvides que se pone entre '' (comilla simple) */
  6.           $lista_mail[]=$qry['email'];        
  7. }  
  8. ##
  9. foreach ($lista_mail as $address) {
  10.     $mail->AddAddress($address, "Storm of Sighs");  
  11. }
  #7 (permalink)  
Antiguo 07/12/2012, 09:47
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Mostrar un listado de usuarios y enviarlo por email para cada discoteca

Tengo mis 2 tablas relacionadas (DISCOTECA Y USUARIOS_DISCOTECA) muchos a muchos.

Quiero enviar por email, a los propietarios, un listado de todos los usuarios apuntados a su discoteca. Entonces necesito que me saque la lista de usuarios de una discoteca, la envie por email y pase a la siguiente. Me han comentado que para ello tengo que hacer una consulta con subconsulta y un bucle que me vaya subiendo la id de discoteca.

¿Me podríais ayudar con algún ejemplo simple parecido a lo que necesito? ¡Espero vuestra ayuda, muchas gracias!!
  #8 (permalink)  
Antiguo 10/12/2012, 07:16
Avatar de DeivisAndres  
Fecha de Ingreso: febrero-2012
Ubicación: Colombia
Mensajes: 305
Antigüedad: 12 años, 9 meses
Puntos: 41
Respuesta: Mostrar un listado de usuarios y enviarlo por email para cada discoteca

Este seria la consulta para unir dos tablas, inténtalo para ver si te sirve

Código Javascript:
Ver original
  1. SELECT *(AQUI PUEDES MOSTRAR LOS CAMPOS QUE NECESITAS) FROM DISCOTECA, USUARIO_DISCO WHERE DISCOTECA.D_ID = USUARIO_DISCO.UD_ID_DISCO
  #9 (permalink)  
Antiguo 12/12/2012, 14:56
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Mostrar un listado de usuarios y enviarlo por email para cada discoteca

Sí, algo asi tenía entendido... Lo probaré! Muchísimas gracias Deivis!!!

Etiquetas: cada, email, html, listado, mysql, sql, tabla, usuarios
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 21:23.