Foros del Web » Programando para Internet » PHP »

Añadir datos de mysql en mail con php

Estas en el tema de Añadir datos de mysql en mail con php en el foro de PHP en Foros del Web. buenas, necestito un poco de ayuda, llevo varios dias buscando una solucion pero no encuentro la forma. Os cuento, tengo una base de datos mysql ...
  #1 (permalink)  
Antiguo 13/01/2010, 06:25
 
Fecha de Ingreso: noviembre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Añadir datos de mysql en mail con php

buenas, necestito un poco de ayuda, llevo varios dias buscando una solucion pero no encuentro la forma.
Os cuento, tengo una base de datos mysql con los e-mail de mis usuarios y un archivo php que cuando se inserta una noticia automaticamente se envia esa noticia a todos los usuarios, la noticia se recoge mediante un $texto=$_POST['texto']; y el mail de la base de datos.
Pero ahora lo que necesito es que envie las 10 ultimas noticias, y para eso debe recoger las noticias de la base de datos y no mediante $_POST['texto'];, entonces tendria que recoger datos de dos bases de datos distintas, una donde esta el mail y otra donde estan las noticias, y no se como hacerlo.

Código PHP:
Ver original
  1. <?php
  2. // recogemos las variables enviadas por el formulario
  3. $usuario=$_POST['usuario'];
  4. $texto=$_POST['texto'];
  5.  
  6. // Conectamos a la base de datos
  7. $dbhost='localhost';
  8. $dbusername='---';
  9. $dbuserpass='--';
  10. $dbname='--';
  11.  
  12. // Conectar a la base de datos
  13. mysql_connect ($dbhost, $dbusername, $dbuserpass);
  14. mysql_select_db($dbname) or die('No se puede seleccionar la base de datos');
  15.  
  16. // Si existe, buscamos en la bd
  17. $res=mysql_query("SELECT mail FROM usuarios WHERE sus ='SI'");
  18. while($row = mysql_fetch_array($res)) {
  19.  
  20. // enviamos el email de recuperacion
  21. $headers = "MIME-Version: 1.0\r\n";
  22. $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
  23. $headers .= "From: MAIL <[email protected]>\r\n";
  24. mail($row[mail], "Noticia", "<p>Se ha insertado una nueva noticia por $usuario</p><ul>$texto</ul>", $headers);
  25.  
  26. }
  27.    mysql_free_result($res);
  28.      
  29. ?>

Ya he intentado hacer una nueva conexion con select a la otra tabla pero me envia un mail con cada noticia, al poner row[$texto] me recupera las noticias de una en una, y yo quiero que me muestre TODAS las noticias en el mismo mail y que mande un mail con las 10 noticias.
  #2 (permalink)  
Antiguo 13/01/2010, 06:29
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Añadir datos de mysql en mail con php

pues necesitas otro ciclo para concatenar las noticias, no te parece?
  #3 (permalink)  
Antiguo 13/01/2010, 06:34
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Añadir datos de mysql en mail con php

Qué tal alejandroperez, cómo vas?

Bueno lo que tienes que hacer "coleccionear" las 10 noticias que quieres. Con coleccionar me refiero a que una opción es llenar un array con esas 10 noticas y vayas enviando ese array por cada mail va?

Más o menos así:

Código PHP:
Ver original
  1. $arrayNoticias = array();
  2. //Te traerá las últimas 10 noticias
  3. $qSqlNoticias = 'select noticia from noticias ORDER BY id_noticia DESC LIMIT 10';
  4. $rSqlNoticias = mysql_query( $qSqlNoticias );
  5.  
  6. //Creamos el array
  7. while( $r = mysql_fetch_array( $rSqlNoticias ) ) {
  8.     $arrayNoticias[] = $r['noticia'];
  9. }

Al tener ya el array alimentado, entras a hacer el ciclo de usuarios para enviar por cada uno dicho array $arrayNoticias

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #4 (permalink)  
Antiguo 13/01/2010, 06:39
 
Fecha de Ingreso: noviembre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Respuesta: Añadir datos de mysql en mail con php

vele, y como inserto el array en el cuerpo del e-mail para enviar?
ahy es donde me atranco y no sigo...
  #5 (permalink)  
Antiguo 13/01/2010, 06:47
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Añadir datos de mysql en mail con php

Pues ya debes leer el array que acabas de crear, con un foreach lo lees...

Código PHP:
Ver original
  1. foreach ( $arrayNoticias as $aN ) {
  2.     echo "esta es la noticia $aN<br />";
  3. }

Debes saber que ese código debe estar dentro del ciclo donde recorres a tus usarios.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #6 (permalink)  
Antiguo 13/01/2010, 07:00
 
Fecha de Ingreso: noviembre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Respuesta: Añadir datos de mysql en mail con php

consigo que se impriman las 10 noticias, pero mi pregunta es que tengo que poner en la funcion del mail donde actualmente tengo $texto, como seria la funcion mail?
  #7 (permalink)  
Antiguo 13/01/2010, 07:10
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Añadir datos de mysql en mail con php

Pues ya es cuestión de que armes tu html, y eso pues sólo lo sabes tú. Debes armar un html con el diseño ( pero ese es otro tema ) de las 10 noticias.

Arma tu html como lo necesites, haz el ciclo y luego envia el correo:

Código PHP:
Ver original
  1. //tu html concatenado que lleva consigo las 10 noticias, se supone que ya has hecho acá el array
  2. $texto = 'todo el html y las 10 noticias';
  3.  
  4. $qSqlUsuarios = 'select correo from usuarios';
  5. $rSqlUsuarios = mysql_query( $qSqlUsuarios );
  6.  
  7. while( $u = mysql_fetch_array( $rSqlUsuarios ) )
  8.     $mail($u['correo'], 'Boletin', $texto, $headers);

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #8 (permalink)  
Antiguo 13/01/2010, 09:29
 
Fecha de Ingreso: noviembre-2009
Mensajes: 7
Antigüedad: 15 años
Puntos: 0
Respuesta: Añadir datos de mysql en mail con php

Ya estoy cerca pero hay algo que falla y no lo veo, posteo el codigo que tengo actualmente y me me muestra las 10 noticias en pantalla pero solo me envia la ultima por mail y lo que quiero es que me envie por mail las 10 noticias.
Código PHP:
Ver original
  1. <?php
  2.  
  3. // Conectamos a la base de datos
  4. $dbhost='localhost';
  5. $dbusername='---';
  6. $dbuserpass='---';
  7. $dbname='---';
  8.  
  9. // Conectar a la base de datos
  10. mysql_connect ($dbhost, $dbusername, $dbuserpass);
  11. mysql_select_db($dbname) or die('No se puede seleccionar la base de datos');
  12.  
  13. // Si existe, buscamos en la bd
  14. $res=mysql_query("SELECT mail FROM usuarios WHERE sus='1'");
  15. while($row = mysql_fetch_array($res)) {
  16.  
  17. $arrayNoticias = array();
  18. $qSqlNoticias = "select texto from mini ORDER BY id DESC LIMIT 10";
  19. $rSqlNoticias = mysql_query( $qSqlNoticias );
  20. while( $r = mysql_fetch_array( $rSqlNoticias ) ) {
  21. $arrayNoticias[] = $r['texto']; }
  22. foreach ( $arrayNoticias as $aN ) {
  23.  echo "<ul>$aN</ul>";}
  24.  
  25. // enviamos el email de recuperacion
  26. $headers = "MIME-Version: 1.0\r\n";
  27. $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
  28. $headers .= "From: MAIL <[email protected]>\r\n";
  29.  
  30. $texto = "$aN";
  31.  
  32. mail($row[mail], "Noticias", "<p>Noticias del dia</p><ul> $texto</ul>", $headers);
  33.  
  34. }
  35.    mysql_free_result($res);
  36.      
  37. ?>
  #9 (permalink)  
Antiguo 13/01/2010, 09:48
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Añadir datos de mysql en mail con php

Es que estás implementando mal la lógica de las noticias.

1. Debes crear el array de noticias fuera del ciclo de usuarios. Por qué???? Esto te lo digo más por rendimiento que por otra cosa. No es óptimo que por cada usuario realices una consulta para traer las 10 noticias, sabiendo que puedes crear el array una vez y lo puedes seguir usando cuando quieras.

Además, también por fuera del ciclo, creas tu html de una vez con las 10 noticias. El cliclo de envio de correos no lo debes usar para armar tu html y tus 10 noticias, son cosas diferentes.

2. Cuando hayas creado tu formato html con las 10 noticas, ahí si procedes a enviar. Si te fijas en mi post anterior el while sólo se dedica a enviar, no a hacer proceso de formato, eso hará lenta la aplicación.

3. Quizás lo que no sabes es como concatenar las noticias. Te dejo un ejemplo:

Código PHP:
Ver original
  1. $lasNoticias = null;
  2. $qSqlNoticias = "select texto from mini ORDER BY id DESC LIMIT 10";
  3. $rSqlNoticias = mysql_query( $qSqlNoticias );
  4.  
  5. while( $r = mysql_fetch_array( $rSqlNoticias ) ) {
  6. $lasNoticias .= "{$r['texto']}<br />"; }

La variable $lasNoticias contendrá las noticas hasta que termine el ciclo ( si lo haces así, puedes obviar crear el arreglo $arrayNoticias). Es decir que cuando termine el ciclo, puedes hacer:

Código PHP:
Ver original
  1. echo $lasNoticias;

Y te debe mostrar las 10.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com

Etiquetas: añadir, mail, mysql
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 14:48.