Comunidad de diseño web y desarrollo en internet online

Problema al enviar datos por e-mail desde una base de datos

Citar            
MensajeEscrito el 17 Feb 2010 06:20 pm
Hola todos,
Pimeramente, no soy experto en nada y menos PHP y MySQL. Así que muchas gracias anticipadas a quien se moleste simplemente en leer mi consulta. :cool:
Estoy haciendo un sistema de envio de noticias por e-mail desde una página donde se cargan las mismas.

Todo funciona correctamente, otra cosa es la seguridad del código..,pero eso ya lo veré más adelante...
Bueno todo menos que sólo me envía un título y una noticia y yo quiero que me envie todas las que hay en la base de datos

Cuando hago una prueba de escribir en la página me escribe correctamente todo utilizando esta formula:
if ($totEmp> 0) {
while ($rowEmp = mysql_fetch_assoc($resEmp)) {
echo "<strong>".$rowEmp['titulo']."</strong><br>";
echo "Descripcion: ".$rowEmp['decripcion']."<br>";
}
}
pero cuando intento poner el resultado en una variable sólo consigo el primer título y la primera descripción:
if ($totEmp> 0) {
while ($rowEmp = mysql_fetch_assoc($resEmp)) {
$titulo_noticia= "<strong>".$rowEmp['titulo']."</strong><br>";
$cuerpo_noticia= "Descripcion: ".$rowEmp['decripcion']."<br>";
}
}

Si alguien sabe cómo puedo solucionae esto.. lo agradecería muchísimo, llevo un par de dias dando vueltas con el asunto sin encontrar una solucion..... Gracias
Este es el código completo:

<?php
include("localconex.php");
$link=Conectarse();

mysql_select_db("BASE_DE_DATOS", $link);
$queEmp = "SELECT * FROM noticias ORDER BY titulo ASC";
$resEmp = mysql_query($queEmp, $link) or die(mysql_error());
$totEmp = mysql_num_rows($resEmp);


if ($totEmp> 0) {
while ($rowEmp = mysql_fetch_assoc($resEmp)) {
$titulo_noticia= "<strong>".$rowEmp['titulo']."</strong><br>";
$cuerpo_noticia= "Descripcion: ".$rowEmp['decripcion']."<br>";
}
}
mysql_close($link);
//el texto del correo
$email="[email protected]";
$sms="Estas recibiendo este e-mail avisandote de que hay nuevas ofertas en LATIENDA <br />".$titulo_noticia."<br />".$cuerpo_noticia." ... Leer Mas</a><br><br>Si ya no desea seguir recibiendo estos avisos, por favor indiquenoslo en [email protected]";

//headers del mail
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: LATIENDA<[email protected]>\r\n";
$headers .= "Reply-To: [email protected]\r\n";
//enviamos el email
mail($email, 'LATIENDA', $sms,$headers);
print 'SE HA ENVIADO EL E-MAIL CON LAS NUEVAS NOTICIAS';

?>

Por chichoketin

11 de clabLevel



 

Madrid

msie8
Citar            
MensajeEscrito el 17 Feb 2010 07:21 pm
Hola, el problema es que cuando tratas de ponerlo en una variable no estás concatenando las noticias anteriores y es por eso que solo te muestra el ultimo registro de la consulta, para solucionarlo deberías hacerlo de la siguiente manera:

if ($toEmp>0) {
while($rowEmp=mysql_fetch_assoc($resEmp)) {
$titulo_noticia .= "<strong>".$rowEmp['titulo']."</strong><br>";
$cuerpo_noticia .= "Descripcion: ".$rowEmp['decripcion']."<br>";
}
}

Fijate que lo único que hice fue colocar un punto "." delante del signo igual de $titulo_noticia y $cuerpo_noticia, con eso me aseguro de que se concatenen todos los valores de los registros.
Saludos

Por bucle_infinito

Claber

166 de clabLevel

1 tutorial

 

.NET Developer

chrome
Citar            
MensajeEscrito el 17 Feb 2010 07:43 pm
Muchas gracias, bucle_infinito,
Si me dejas abusar un poquito de tu tiempo... El problema que tengo ahora es que no me envia los email de la segunda consulta aunque le he puesto el punto. Es la siguiente:

mysql_select_db("qfr641", $link);
$queEmp = "SELECT * FROM mailsender ORDER BY mail ASC";
$resEmp = mysql_query($queEmp, $link) or die(mysql_error());
$totEmp = mysql_num_rows($resEmp);


if ($totEmp> 0) {
while ($rowEmp = mysql_fetch_assoc($resEmp)) {
$e.=$rowEmp['mail'];

}
}
$sms="Estas recibiendo este e-mail avisandote de que hay nuevas ofertas en LATIENDA <br />".$titulo_noticia."<br />".$cuerpo_noticia." ... Leer Mas</a><br><br>Si ya no desea seguir recibiendo estos avisos, por favor indiquenoslo en [email protected]";

//headers del mail
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: TRES60 <[email protected]>\r\n";
$headers .= "Reply-To: [email protected]\r\n";
//enviamos el email
mail($e, 'LATIENDA', $sms,$headers);

No se si es que tengo la idea general mal planteada o que....
Muchas gracias de todos modos

Por chichoketin

11 de clabLevel



 

Madrid

msie8
Citar            
MensajeEscrito el 17 Feb 2010 07:53 pm
Hola, creo que el error está en tratar de concatenar las direcciones de mails, ya que si no me equivoco ese no es el formato para usar la funcion mail, prueba modificando un poco el codigo de modo que la segunda consulta quede de la siguiente manera:

Código PHP :

mysql_select_db("qfr641", $link);
$queEmp = "SELECT * FROM mailsender ORDER BY mail ASC";
$resEmp = mysql_query($queEmp, $link) or die(mysql_error());
$totEmp = mysql_num_rows($resEmp);

$sms="Estas recibiendo este e-mail avisandote de que hay nuevas ofertas en LATIENDA <br />".$titulo_noticia."<br />".$cuerpo_noticia." ... Leer Mas</a><br><br>Si ya no desea seguir recibiendo estos avisos, por favor indiquenoslo en [email protected]";

//headers del mail
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: TRES60 <[email protected]>\r\n";
$headers .= "Reply-To: [email protected]\r\n";


if ($totEmp> 0) {
while ($rowEmp = mysql_fetch_assoc($resEmp)) {
     //enviamos el email
     mail($rowEmp['mail'], 'LATIENDA', $sms,$headers);
}
}

Pruebalo y me cuentas. Saludos

Por bucle_infinito

Claber

166 de clabLevel

1 tutorial

 

.NET Developer

chrome
Citar            
MensajeEscrito el 17 Feb 2010 08:23 pm
Muchas gracias de nuevo, bucle_infinito,
Ahora si que envia. y ya puestos tengo otra "consultilla"
¿Sabes alguna manera de intercalar los datos de la primera consulta?
me explico
Esto es como llegan los datos la primera consulta en el email :
...
noticia 1
noticia 2
noticia 3

Descripcion: la noticia es esta que si te llega es que funciona
Descripcion: esta es para mas pruebas
Descripcion: que no esta mal
...
Los datos son correctos pero querría mostralos asi:

noticia 1
Descripcion: la noticia es esta que si te llega es que funciona

noticia 2
Descripcion: esta es para mas pruebas

noticia 2
Descripcion: que no esta mal

Gracias y disculpa por ser tan pesado

Por chichoketin

11 de clabLevel



 

Madrid

msie8
Citar            
MensajeEscrito el 17 Feb 2010 09:09 pm
Me he precipitado con la consulta ... pero pensando un poquito la solución era:

$total_noticia.= "<strong>".$rowEmp['titulo']."</strong><br>,Descripcion: ".$rowEmp['decripcion']."<br>";

Y funciona!!!!!
Muchas gracias de todos modos
Este es el código completo por si alguien le interesa:

<title>Envio de Noticias</title>
<?php
////nos conectamos
include("localconex.php");
$link=Conectarse();

mysql_select_db("qfr641", $link);
$queEmp = "SELECT * FROM noticias ORDER BY titulo ASC";
$resEmp = mysql_query($queEmp, $link) or die(mysql_error());
$totEmp = mysql_num_rows($resEmp);


if ($totEmp> 0) {
while ($rowEmp = mysql_fetch_assoc($resEmp)) {
$total_noticia.= "<strong>".$rowEmp['titulo']."</strong><br>,Descripcion: ".$rowEmp['decripcion']."<br>";
}
}
mysql_close($link);
//volvemos a conectar de nuevo para recoger la lista de correos
$link=Conectarse();
//recogemos todo de la BAse para el correo

mysql_select_db("qfr641", $link);
$queEmp = "SELECT * FROM mailsender ORDER BY mail ASC";
$resEmp = mysql_query($queEmp, $link) or die(mysql_error());
$totEmp = mysql_num_rows($resEmp);

//el texto del correo
$sms="Estas recibiendo este e-mail avisandote de que hay nuevas ofertas en LATIENDA <br />".$total_noticia.'<a href="http://www.PAGINADENOTICIAS.XXX" >
... Leer Mas</a><br><br>Si ya no desea seguir recibiendo estos avisos, por favor
indiquenoslo en [email protected]';

//headers del mail
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: LATIENDA <[email protected]>\r\n";
$headers .= "Reply-To: [email protected]\r\n";
//preparamos la lista de correos
if ($totEmp> 0) { while ($rowEmp = mysql_fetch_assoc($resEmp)) {
//enviamos el email
mail($rowEmp['mail'], 'LATIENDA', $sms,$headers); } }

print 'SE HA ENVIADO EL E-MAIL CON LAS NUEVAS NOTICIAS:<br />';

mysql_close($link);
?>
<div align="center"><a href="cargarnoticias.php">Volver</a></div>

Muchas gracias

Por chichoketin

11 de clabLevel



 

Madrid

msie8
Citar            
MensajeEscrito el 18 Feb 2010 03:57 am
Perfecto, has dado con la solucion

Por bucle_infinito

Claber

166 de clabLevel

1 tutorial

 

.NET Developer

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.