Foros del Web » Programando para Internet » PHP »

phpmailer y bucle for

Estas en el tema de phpmailer y bucle for en el foro de PHP en Foros del Web. Buenas tardes, Estoy intentando enviar por correo electrónico una serie de registros guardados en una variable de sesión (array). Para sacarlos utilizo un bucle for ...
  #1 (permalink)  
Antiguo 24/11/2011, 17:52
 
Fecha de Ingreso: enero-2011
Mensajes: 95
Antigüedad: 13 años, 3 meses
Puntos: 2
Pregunta phpmailer y bucle for

Buenas tardes,

Estoy intentando enviar por correo electrónico una serie de registros guardados en una variable de sesión (array). Para sacarlos utilizo un bucle for para que las recorra una por una.

El problema se presenta, al leer el correo (enviado por phpmailer) solo muestra un dato del array. No todos los que contiene. Tengo la idea que el problema se debe a que el bucle for buscar el primer elemento y luego, antes de llegar a la segunda solicitud se corre primero la clase phpmailer y por ello me envía un solo elemento.

He pensado en meterle alguna condicional a $mail -> Send(); pero no sabría cual podría ser la condición. Es decir, no se que puedo comparar o que parámetro darle para que no se ejecute hasta que finalice el bucle.

código, a continuación:

Código PHP:
    require 'class.phpmailer.php';
        
        
//configuración de la clase
        
$mail = new PHPMailer();
        
$mail -> Host 'smtp.gmail.com';
        
$mail -> IsHTML (true);
        
$mail -> IsSMTP();
        
$mail -> SMTPSecure 'ssl';
        
$mail -> Port 465;
        
$mail -> SMTPAuth true;
        
$mail -> CharSet "UTF-8";
        
$mail -> Username 'XXX';
        
$mail -> Password 'XXX';
        
$mail -> Subject "Presupuesto, Estado: Procesando.";
        
$mail -> AddAddress(" "$_SESSION['email'] ." ");
        
//$mail -> AddBCC("[email protected]");
        //cuerpo del correo
        
for ($i=0$i count($_SESSION['carrito']) ; $i++) {
        
$body "
                        <html>
                        <head>
                        </head>
                        <body style='margin: 0; padding: 0; width: 100%; overflow-y: hidden; background-color: #dcded3;'>
                            <h3 style='font-size: 13px; color: #333; margin-left: 50px;'>¡Enhorabuena!<h3>
                            <p style='margin-left: 50px; style-weigth: normal; font-style: normal; font-size: 13px; color: #333;'>Tu presupuesto se ha procesado, a la brevedad posible contactaremos con usted.</p>                        
                            <p style='margin-left: 50px; font-size: 15px; font-size: 13px; color: #333;'>A continuaci&oacute;n, su pedido:</p>
                        <table>
                            <thead>
                                <tr>
                                    <td>Foto</td>
                                    <td>Nombre de Producto</td>
                                </tr>
                            </thead>
                            <tbody>
                                <tr>
                                    <td>" 
$_SESSION['carrito'][$i]['nombre']. "<td /> 
                                </tr>
                            </tbody>
                        </table>            
                        </body>
                        </html>
                        "
;                                                
        }                
        
$mail -> isHTML(true);
        
$mail -> Body $body;
        
$mail -> Send(); 
De antemano, agradezco enormemente el interés en mi post.
  #2 (permalink)  
Antiguo 25/11/2011, 01:09
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: phpmailer y bucle for

Saludos. En realidad no te está mandando el primer correo sino el último del ciclo. Estás completando el ciclo y después mandas el mail. Si lo que quieres es mandar un mail por cada ciclo tienes que poner $mail -> Send(); dentro de las {} del for.
  #3 (permalink)  
Antiguo 25/11/2011, 01:15
 
Fecha de Ingreso: enero-2011
Mensajes: 95
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: phpmailer y bucle for

Quizás no me explique bien. Lo que quiero es que me envíe todo el bucle (ciclos) en un único email.
  #4 (permalink)  
Antiguo 25/11/2011, 01:27
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: phpmailer y bucle for

A ver, cada vez que se ejecuta un ciclo del for se sobreescribe la variable $body, de manera que al finalizar el for estás mandando solamente el último valor que tomó esta dentro del ciclo, no todos, pues el mismo for los fué sobreescribiendo tras cada pasada del ciclo. Lo que tienes que hacer es algo así:

Código PHP:
Ver original
  1. $body='<table>';
  2. for($i=0; $i < count($_SESSION['carrito']) ; $i++){
  3.     $body.='<tr><td>'.$_SESSION['carrito'][$i]['nombre'].'</td></td>';
  4. }
  5. $body.='</table>';

Ves? Haces que el for repita las filas de la tabla u las vas concatenando a la variable $body, pero el inicio y final de la tabla las dejas fuera del ciclo porque no quieres que se repitan. Luego mandas por mail la variable $body con todo su contenido como quedó y listo, ya tienes una tabla en tu mail con todos los valores del array. Espero que te sirva.
  #5 (permalink)  
Antiguo 25/11/2011, 08:58
 
Fecha de Ingreso: enero-2011
Mensajes: 95
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: phpmailer y bucle for

Muy agradecido contigo jorgelpadronb.

Saludos.
  #6 (permalink)  
Antiguo 26/11/2011, 13:35
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: phpmailer y bucle for

De nada hermano, para eso estamos.

Etiquetas: email, phpmailer
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:47.