while e l'invio di mail

  • Creatore Discussione Creatore Discussione danilob
  • Data di inizio Data di inizio

danilob

Utente Attivo
3 Feb 2007
124
0
0
ciao ragazzi ho un problema con il ciclo while e l'invio di mail... Dopo aver inserito il mess. da mandare nel form mi collego alla pagina il cui codice ho riportato e mi manda l'email alla mia lista. Unico neo è che mi scrive "email inviata correttamente" tante volte quante sono gli inirizzi del mio dbase.. Come posso fare....
<?

include("config/connessione.php");
if(isset($_POST['Submit']))
{
// elaboriamo i dati raccolti

$messaggio = $_POST['messaggio'];
}
if($messaggio == "")
{
echo "Devi inserire il messaggio.";
}
}
// stabiliamo la connessione a Mysql

$query = @mysql_query("SELECT indirizzo_email FROM tb_user_club") or die (mysql_error());
while ($fetch=@mysql_fetch_array($query))
{
$email_iniviare= stripslashes($fetch['indirizzo_email']);
$email="[email protected]";

//$email_iniviare ="[email protected]";


// inviamo il messaggio

if
(mail($email_iniviare, "Mittente: New Body Center Club", $messaggio,"From:[email protected]"))

{
echo "Mail inviata";
}

// introduciamo un messaggio da visualizzare in caso di errore
else
{
echo "Si è verificato un errore durante l'invio.";

}
}



?>
 
inizializza una variabile $i=0 al di fuori del while e poi come prima istruzione all'interno del while incrementa i di 1 ($i++)

poi metti un if con condizione $i==1 prima dell'istruzione echo che ti scriverà "email inviata"
in questo modo:
if ($i==1)
echo "Mail inviata";

Ecco. le modifiche che ho apportato sono quelle in rosso.

Codice:
<?
[COLOR="#ff0000"]$i=0;[/COLOR]
include("config/connessione.php");
if(isset($_POST['Submit']))
{
// elaboriamo i dati raccolti

$messaggio = $_POST['messaggio'];
}
if($messaggio == "")
{
echo "Devi inserire il messaggio.";
}
}
// stabiliamo la connessione a Mysql

$query = @mysql_query("SELECT indirizzo_email FROM tb_user_club") or die (mysql_error());
while ($fetch=@mysql_fetch_array($query))
{
[COLOR="Red"]$i++;[/COLOR]
$email_iniviare= stripslashes($fetch['indirizzo_email']);
$email="[email protected]";

//$email_iniviare ="nome@email_destinatario.it";


// inviamo il messaggio

if
(mail($email_iniviare, "Mittente: New Body Center Club", $messaggio,"From:[email protected]"))

{
[COLOR="Red"]if ($i==1) echo "Mail inviata";[/COLOR]
}

// introduciamo un messaggio da visualizzare in caso di errore
else
{
echo "Si è verificato un errore durante l'invio.";

}
}



?>
 
Ultima modifica:
ti ringrazio funziona benissimo. Non riesco però a capire il meccanismo, sai sono ancora un po' negato, però mi piace apprendere e non copiare solo codice. Mi potresti spiegare bene cosa rappresenta i==0? grazie moltissime

Danilo
 
Propongo una versione alternativa che permette l'invio della mail solo se il messaggio è stato effettivamente inviato:
PHP:
<?php
//valore di controllo
//quando è su 0 non è stata inviata alcuna mail
$i=0;

include("config/connessione.php");
if(isset($_POST['Submit']))
	{
	if( (!isset($_POST['messaggio'])) || ($_POST['messaggio'] == "") )
		{
		echo "Devi inserire il messaggio.";
		}else{

		$query = @mysql_query("SELECT indirizzo_email FROM tb_user_club") or die (mysql_error());
		while ($fetch=@mysql_fetch_array($query))
			{
						
			$email_iniviare= stripslashes($fetch['indirizzo_email']);
			$email="[email protected]";
			if
				(mail($email_iniviare, "Mittente: New Body Center Club", $_POST['messaggio'],"From:[email protected]"))
				{
				    //il valore si incrementa soltanto se 
			        //viene inviata la mail
			        //$i++ è come dire $i+1
			        $i++;

                    //se il valore è stato incrementato
					//viene stampato il messaggio di conferma
                    //if ($i>0) significa "se $i è maggiore di 0"
					if ($i>0){ echo "Mail inviata"; }
					
				}
				// introduciamo un messaggio da visualizzare in caso di errore
				else
				{
				echo "Si è verificato un errore durante l'invio.";
				}
			}
		}
	}	
?>
Mi sono basato sul codice del bravo matt che però presenta due problemi:
  1. non controlla l'effettivo invio del parametro relativo al messaggio
  2. permette l'incremento di $i anche se la mail non viene inviata
 
Ultima modifica:
Ti ringrazio moltissimo.. Mi dici cosa è "i". Inoltre in un'altro forum Gianni mi ha proposto quest'altra soluzione che forse è la migliore.. la posto in quanto potrebbe tornare utile ribadendo che non è farina del mio sacco ma del mitico Gianni:

<?

include("config/connessione.php");
if(isset($_POST['Submit']))
{
// elaboriamo i dati raccolti
$messaggio = $_POST['messaggio'];
}

if($messaggio == "")
{
echo "Devi inserire il messaggio.";
}
}
// stabiliamo la connessione a Mysql

$query = @mysql_query("SELECT indirizzo_email FROM tb_user_club") or die (mysql_error());

$invii_corretti = 0;
$invii_falliti = 0;

while ($fetch=@mysql_fetch_array($query))
{
$email_iniviare= stripslashes($fetch['indirizzo_email']);
$email="[email protected]";

//$email_iniviare ="[email protected]";

// inviamo il messaggio

if (mail($email_iniviare, "Mittente: New Body Center Club", $messaggio,"From:[email protected]"))
{
$invii_corretti++;
}
// introduciamo un messaggio da visualizzare in caso di errore
else
{
$invii_falliti++;
}
}

echo "Risultato invio: corretti = $invii_corretti, falliti = $invii_falliti";
?>
 
$i è una variabile a cui è associato un valore iniziale pari a zero,
questo valore si incrementa ("$i++" vuo dire "$i+1") solo se viene inviata la mail.
Se la mail viene inviata avremo quindi "$i>0" e quindi verrà stampato il messaggio di conferma dell'invio.
 
La soluzione che ti hanno proposto però ha il difetto di permettere il ciclo anche se il parametro $_POST['messggio'] è vuoto, direi di riscrivere così:
PHP:
<?php
include("config/connessione.php");
if(isset($_POST['Submit']))
    {
    if( (!isset($_POST['messaggio'])) || ($_POST['messaggio'] == "") )
        {
        echo "Devi inserire il messaggio.";
        }else{
        $invii_corretti = 0;
        $invii_falliti = 0;
        $query = @mysql_query("SELECT indirizzo_email FROM tb_user_club") or die (mysql_error());
        while ($fetch=@mysql_fetch_array($query))
            {
                        
            $email_iniviare= stripslashes($fetch['indirizzo_email']);
            $email="[email protected]";
            if
                (mail($email_iniviare, "Mittente: New Body Center Club", $_POST['messaggio'],"From:[email protected]"))
                {
                    $invii_corretti++;
                }
                // introduciamo un messaggio da visualizzare in caso di errore
                else
                {
                $invii_falliti++;
                }
            } echo "Risultato invio: corretti = $invii_corretti, falliti = $invii_falliti";   
        } 
    }   
?>
 
ti ringrazio moltissimo... Ho provato a inserire un'immagine ma non funziona...

$logo="<img src=http://www.newbodycenter.it/Img/Pics/Altre/Icone/Logo.jpg>";

if (mail($email_iniviare, "Mittente: New Body Center Club", $logo, $messaggio,"From:[email protected]"))
 
il contenuto della variabile logo lo riscriverei così:

Codice:
$logo="<img src=\"http://www.sitoacasaccioo.it/Img/Pics/Altre/Icone/Logo.jpg\">";

in pratica all'interno dei doppi apici (" "), se vuoi inserire un doppio apice devi farlo precedere da \. Altrimenti l'interprete php non capisce dove termina la stringa di logo. Oppure puoi usare semplicemente l'apice (') in questo modo

Codice:
$logo="<img src='http://www.sitoacasaccioo.it/Img/Pics/Altre/Icone/Logo.jpg'>";



Per mandare email in html guarda inoltre questa guida. E' importante specificare il charset e il tipo di contenuto nell'header della mail.
 
:fonzie: Grazie moltissime... Ho letto la guida...Gentilissimi tutti, mi siete stati di grandissimo aiuto.. Da solo non sarei mai riuscito. Ciao


Danilo
 

Discussioni simili