Foros del Web » Programando para Internet » PHP »

Alguien sabe por que falla esto? MAil() + for()

Estas en el tema de Alguien sabe por que falla esto? MAil() + for() en el foro de PHP en Foros del Web. holas gentes, les muestro un pequeño script que hice para un envio de newsletters a un grupo limitado de usuarios, no son mas de 15 ...
  #1 (permalink)  
Antiguo 04/08/2004, 08:08
Avatar de oktubre  
Fecha de Ingreso: agosto-2003
Ubicación: en mi casa
Mensajes: 371
Antigüedad: 20 años, 6 meses
Puntos: 4
Pregunta Alguien sabe por que falla esto? MAil() + for()

holas gentes, les muestro un pequeño script que hice para un envio de newsletters a un grupo limitado de usuarios, no son mas de 15

el script es el siguiente:
Código PHP:
<?
include("config.php");

///   ejecutor 2 envia los mails con los texto_portadas y susrespectivos links

//------------------------------------- seleciono la nota!!!!!
    
$db mysql_connect($host$usuario,$password); 
    
mysql_select_db($database,$db);
    
    
$sql "SELECT * FROM notas WHERE  fecha = '$hiddefecha' ORDER BY codigo";
    
$result mysql_query($sql,$db);
    
// $myrow = mysql_fetch_array($result);   


$mailer_head"<html>\n<head>\n
<title>Newsletter </title>\n
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n
</head> \n
<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#111111\" width=\"500\" id=\"AutoNumber1\" height=\"68\">\n
   <tr>"
;
    

               while (
$myrow mysql_fetch_array($result)){

     
$fecha_nota$myrow["fecha"];
    
$separar explode('-'$fecha_nota);
    
$main[] = "
<center>
<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#111111\" width=\"500\" id=\"AutoNumber1\" >\n
   <tr>
<hr>
:::<b> $myrow[titulo] </b>:::
<p style=\"line-height: 30%\">Fuente: $myrow[fuente]  $fecha_nota </p>  
<a href=\"http://www.misnews.com.ar/index.php?id=10&mostrar=$myrow[codigo]\"> $myrow[texto_portada] ( Leer Mas ... ) </a>
</center>
"
;   

// cierro el bucle del main


$mailer_foot="</tr></table></body></html>";
 
 
//--------------------------------- aca termina el formato de la nota


$muestro count($sop);

for (
$i=0$i $muestro$i++){
//$sfrom="From: NewsletterSantafe.com.ar\nContent-Type: text/html; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\n";

/* To send HTML mail, you can set the Content-type header. */
$headers  "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: Newsletter <[email protected]>\r\n";
/* additional headers */

    
$cantidad count($main);
    for (
$as=0$as<$cantidad ;$as++) {   ///   abro el for

    
$mailer_main $mailer_main.$main[$as]."<br>\n";
                                }   
/// cierro el for

 
$to_mail "<center><img border=\"0\" src=\"http://www.misnews.com.ar/admin/images/logo2.gif\" width=\"500\" height=\"20\"></center>".$mailer_main ;
 
 
//echo "<br>";
     // echo $mailer_main."<br>";
     // echo $mailer_foot."<br>";
    
mail("$sop[$i]","Newsletter ","$to_mail","$headers");

    echo  
$sop[$i]."<br>" ;
    
    echo 
$hiddefecha."<br>";
}


?>
el problema esta en que en los envios, me manda las notas del dia pero aveces repite dos o tres veces todas las notas, como que en el while hay algun problema.

acepto sugerencias que no sean muy dificiles de implementar, yo lo vendo al sistema este y ahora me quieren matar por este error
saludos desde argentina
__________________
w32.oktubre@mm <----------------<<<<
prefiero cerrar la boca y parecer un tonto que abrirla y confirmarlo.
  #2 (permalink)  
Antiguo 04/08/2004, 08:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Pregunta ..

Si ya tienes un bucle (como el while) que obtienes los registros de tu consulta (los que arrojó bajo esa sentencia SQL) .. ¿ Para qué compones un array (ese tal $main[]) para luego tener que leer otra vez ese array completo "generado" cuando puedes hacerlo todo sobre ese mismo bucle ?

Es decir .. sé que estás componiento tus N mails (direcciones) para pasarselo a mail() .. pero es que no haces eso .. (sería usar implode() a tu $sop para obtener las direcciones de e-mail separadas por comas ..) Sino que vuelves aplicar otro bucle ...

Lo mismo que meter esos $headers dentro de un bucle .. cuando son "constantes" .. (no cambian .. ) debes definirlo "fuera" de tus bucles.

Un saludo,
  #3 (permalink)  
Antiguo 04/08/2004, 08:55
Avatar de oktubre  
Fecha de Ingreso: agosto-2003
Ubicación: en mi casa
Mensajes: 371
Antigüedad: 20 años, 6 meses
Puntos: 4
jaja, necesitaria que seas un chiquitin mas claro.
por ejemplo, el implode() que propones es para enviar las direciciones con un separado por comas?
eso se puede en Mail()?

existe alguna cabecera que me permita CCO?

gracias
__________________
w32.oktubre@mm <----------------<<<<
prefiero cerrar la boca y parecer un tonto que abrirla y confirmarlo.
  #4 (permalink)  
Antiguo 04/08/2004, 09:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Consejo:

No te lies con "implodes" .. usa mail() dentro de tu bucle while() donde obtienes esas datos (como el e-mail al que enviar ..)

Por lo demás .. mail() si que permite BCC (busca por ese termino en lugar de CCO). Son parte de las cabeceras HTTP de mail. Puedes ver ejemplos en la documentación de PHP sobre mail(): www.php.net/mail

Un saludo,
  #5 (permalink)  
Antiguo 04/08/2004, 14:04
Avatar de oktubre  
Fecha de Ingreso: agosto-2003
Ubicación: en mi casa
Mensajes: 371
Antigüedad: 20 años, 6 meses
Puntos: 4
espero que no te moleste una preguntita.
El tema es que aun asi, con los pequeños desperfectos que tiene mi script, debería hacer lo que le pido.
Pero por alguna razon, el maldito hace lo que quiere, osea, el maldito por ahi arma bien el nesletter y por ahi me repite los datos, es como que algo anda pal cu pero no soy capaz de saber por que.
m,e ayudarian con eso?
__________________
w32.oktubre@mm <----------------<<<<
prefiero cerrar la boca y parecer un tonto que abrirla y confirmarlo.
  #6 (permalink)  
Antiguo 04/08/2004, 14:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
(por mi parte no me molesta nada tu comentario .. al contrário ..se que quieres la solución para tu código empleado, yo soy de los que pretenden arreglar las cosas desde la base no "parchear" .. )

Para solventar el problema concreto con tu código .. habría que ver por ejemplo de donde sale ese $sop (array) .. donde se genera.

El "aveces" deberías de encerrar las condiciones de pruebas para repertirlas y estudiar por donde puede venir el problema de que tu Consulta SQL repita datos .. Si es que llega por ahí el problema . .por qué también tienes dos bucles for() por ahi por médio. Deberías explicar (según tu parecer) que hace el código ...

Sinceramente .. creo que te costaría menos hacerlo "bien" que no el lio que tienes con el array y los dos bucles ...

Un saludo,
  #7 (permalink)  
Antiguo 04/08/2004, 15:27
Avatar de oktubre  
Fecha de Ingreso: agosto-2003
Ubicación: en mi casa
Mensajes: 371
Antigüedad: 20 años, 6 meses
Puntos: 4
espero que se entienda...

bueno

preguntaban por el array $sop[]

es mas o menos asi

tengo un archivo que hace esto:

muestro con una consulta una lista de los titulares que tengo cargados con el dia de hoy.

al final hay otra consulta que lo que hace es listar los suscriptos con un pequeño check box a su lado, para se selecionado en caso que se le quiera mandar las noticias a este y otro no.

este elemento check box, se llama sop[] y con el bucle de la consulta de suscriptos lo que pretendo es iniciar un array desde ahi.

por eso, en el achivo que copie mas arriva esta la seccion que hace lo siguiente:
(lineas 47 a 74 )

cuento la cantidad de $sop[] y los cargo en la variable $muestro

despues inicio el bucle en la linea 49
for ($i =0; $i < $muestro; $i++){

armo el mail desde la linea 53 y cuento la cantidad de notas, que son el array $main[]

y los acomodo en la linea 61 . esto es para que cada nota se vea como una fila de una tabla, aunque empieso a creer que aqui esta el problema.

bueno, terminando, en la linea 69 mando la cantidad de mail que cuento desde el primer for a las direcciones que estan en el array $sop[]

que despelote, ahora si que necesito ayuda, jaja
__________________
w32.oktubre@mm <----------------<<<<
prefiero cerrar la boca y parecer un tonto que abrirla y confirmarlo.
  #8 (permalink)  
Antiguo 04/08/2004, 15:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Bueno .. pues ahora a esperar alguien que lo entienda xD ..por qué yo ya me perdí hace time().

Un saludo,
  #9 (permalink)  
Antiguo 04/08/2004, 15:56
Avatar de oktubre  
Fecha de Ingreso: agosto-2003
Ubicación: en mi casa
Mensajes: 371
Antigüedad: 20 años, 6 meses
Puntos: 4
hey, que mala onda, jaja, me imagino pero please, uds saben que yo cuando contesto mal que mal les devuelvo el pollo frito, jaja

una pista ahora y prometo no enviar ninguna consulta de este tipo en el foro
__________________
w32.oktubre@mm <----------------<<<<
prefiero cerrar la boca y parecer un tonto que abrirla y confirmarlo.
  #10 (permalink)  
Antiguo 04/08/2004, 16:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Tal vez si pones el código completo de todo el proceso . alguien le dé por probarlo y ver donde está tu error concreto o incluso re-hacer el código (la explicación de lo que debe hacer .. más o menos ya la has dado).

Por mi ya cumplí mi parte: sonsacarte datos para evaluar .. Suerte!.

Un saludo,
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 17:44.