Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1
    Utente di HTML.it L'avatar di Paperino78
    Registrato dal
    Aug 2012
    residenza
    Milano
    Messaggi
    71

    Invio stessa mail a destinatari diversi

    Buongiorno, spero possiate dari una mano ma sopratutto dirimi dove sbaglio in modo da sistemare il problema.
    Vengo al dunque ho un form dove tramite mysqli interrogo il db ed inserisco la mail degli utenti alle quali manderò una mail di aggiornamento in formato html. Il problema è che la mail che invio dovendo essere la stessa dovrà avere destinatari diversi a secondo di quelli che seleziono dal form.
    Qui il codice html
    codice HTML:
    <legend>Seleziona Utenti per invio Mail</legend>
                     <p>
                        <label class="block">Utenti:</label>
                <p></p>
        <?php
        if($result = $mysqli->query("SELECT nome, user_id FROM utenti")){
            while ($row = $result->fetch_assoc())
            {
                echo '<input id="utente" class="wrong" type="checkbox" name="utente">';
                echo '<label value="'. $row['user_id'].'">', $row['nome'] ,'</label>';
            }
        }
        ?>
                        <input id="oltre" class="wrong" type="hidden" value="oltre" name="oltre">
    
                    </p>
    questo invece è il codice di verifica ed invio mail
    Codice PHP:
        $ok_ko="";
            
    $visibilità "hidden";

            if(!isset(
    $_POST['utente']) && (empty($_POST['utente']))){
                
    $ok_ko.="Scegli il nome.<br /> ";
                echo 
    "$ok_ko";
                echo 
    "<meta http-equiv='Refresh' content='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
            if(!isset (
    $_POST['text_mail']) && (empty($_POST['text_mail']))){
                
    $ok_ko.="Scrivi qualcosa.<br />";
                echo 
    "$ok_ko";
                echo 
    "<meta http-equiv='Refresh' content='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}

            
    //Se la variabile NON è VUOTA lasci ogli errori
            
    if ($ok_ko != "") {
                
    $visibilità "visibile";
                echo
    "<div style=\"visibility:$visibilità;\" class=\"ok_ko\"></div>";
            
    // Altrimenti se è VUOTA lascio e proseguo
            
    } else {
                
    $ok_ko ="";
            }

            if (empty(
    $ok_ko)) {

                
    //Filtro dati con MYSQLI
                
    $utente                     =         $_POST['utente'];
                
    $_SESSION['text_mail']     =         $mysqli->real_escape_string(trim($_POST['text_mail']));

                require_once(
    'phpmailer/PHPMailerAutoload.php');

                
    $marconcini    =    "mail2@gmail.com";
                
    $biblionet     =    "mail3@gmail.com";

                
    $mail = new PHPMailer();
                
    $mail->IsSMTP();                    // attiva l'invio tramiteSMTP
                
    $mail->isHTML(true);                //Attivo invio come html
                
    $mail->SMTPDebug    0;                //0 Senza debug, se voglio i dettagli metto 4
                
    $mail->Host         "smtp.gmail.com";        // ok PHPmailer
                
    $mail->Port         465;
                
    $mail->SMTPAuth        true;
                
    $mail->SMTPSecure    "ssl";
                
    $mail->Username     "mail@gmail.com";
                
    $mail->Password     "pass";

                
    // Mail che riceveranno solo gli utenti selezionati del form

        /*Messagio in php o html usato come allegto*/
                
    $body file_get_contents('mail_pubblicita.php');    // testo del messaggio in formato html


                
    if($result $mysqli->query("SELECT * FROM utenti")){
                    while (
    $row $result->fetch_assoc())

                    {
                        
    $nome     $row['nome'];
                        
    $email    $row['email'];

                        
    // ----- impostazione dei destinatari
                        
    $mail->ClearAllRecipients( );
                        
    $mail->AddAddress($email$nome);

                    }
                } else {
                    
    Errore$mysqli->ErrorInfo;
                }


                
    //$mail->AddAddress ($email,$nome); //Mail che riceverà l'utente registrato
                
    $mail->From = ($biblionet); //Inserire la mail di Andrea che apparirà come mail del mittente
                
    $mail->FromName = ("Biblionet San Maurizio"); // Nome che apparirà come Mittente al cliente
                //$mail->WordWrap        = 50;
                
    $mail->AddReplyTo($marconcini 'Andrea ');
                
    $mail->AddReplyTo($biblionet 'Biblionet San Maurizio');
                
    $mail->Subject = ("Novità dalla Biblionet");
                
    $mail->AltBody "Per visualizzare questo messaggio utilizza un programma adatto e che legga le mail in HTML!"// Opzionale, da testare
                
    $mail->Body $body
    Il problema è che ricevo solo una mail e non due o più. Dove sbaglio?

  2. #2
    C'è un errore già a monte, nel form, prima di arrivare allo script PHP.

    Codice PHP:
            while ($row $result->fetch_assoc())
            {
                echo 
    '<input id="utente" class="wrong" type="checkbox" name="utente">';
                echo 
    '<label value="'$row['user_id'].'">'$row['nome'] ,'</label>';
            } 
    Tutte le checkbox hanno lo stesso name: "utente" e non hanno un value.
    In questa maniera, anche se vengono selezionate "n" checkbox, $_POST['utente'] conterrà un solo valore (nessun valore nel nostro caso, visto che non è definito un value per le checkbox...).

    Un form corretto potrebbe essere:
    Codice PHP:
            while ($row $result->fetch_assoc())
            {
                echo 
    '<input id="utente'$row['user_id'].'" class="wrong" type="checkbox" name="utente[]" value="'$row['user_id'].'">';
                echo 
    '<label value="'$row['user_id'].'">'$row['nome'] ,'</label>';
            } 
    Nota che ho modificato:
    -L'id del checkbox per renderlo univoco all'interno del documento HTML, come dovrebbe essere.
    -il name del checkbox che è diventato "utente[]", $_POST['utente'] conterrà un array, con tutti gli id "spuntati", su cui potrai eseguire un loop.
    -il value del checkbox, di modo che venga inviato allo script PHP l'id del checkbox spuntato.

  3. #3
    Utente di HTML.it L'avatar di Paperino78
    Registrato dal
    Aug 2012
    residenza
    Milano
    Messaggi
    71
    Ho cambiato il codice ma non ne vengo a capo, nel senso che se seleziono solo un utente la mail parte, altrimenti mi da NULL.
    Questo è il codice di invio
    Codice PHP:
        $implode_user = (implode($_POST['utente']," "));
                
                
                if (
    $result $mysqli->query("SELECT email FROM utenti WHERE nome = '".$implode_user."'")) {
                    while (
    $row $result->fetch_assoc())

                    {
                        
    //$nome     = $row['nome'];
                        
    $email    $row['email'];
                        
    // ----- impostazione dei destinatari
                        
    $mail->ClearAllRecipients( );
                    } 
    utilizzo l'implode per lavorare con due o più destinatari. Sicuramente c'è un modo più semplice, potresti darmi una dritta? Avrei bisogno di associare ovviamente all'utente selezionato dalle checkbox la sua mail, e selezionare ache il suo nome. Deo usare un ciclo tipo foreach o simile?

  4. #4
    Riposta l'intero codice, form e script.

  5. #5
    Utente di HTML.it L'avatar di Paperino78
    Registrato dal
    Aug 2012
    residenza
    Milano
    Messaggi
    71
    Questo è il form completo di script per recuperare i dati nel db:
    Codice PHP:
    <?php
    if(isset($_POST['invia'])){
        if(
    $_SERVER['REQUEST_METHOD'] == 'POST'){

            
    //preparo un messaggio a vuoto per gli errori
            
    $ok_ko="";
            
    $visibilità "hidden";

            if(!isset(
    $_POST['utente']) && (empty($_POST['utente']))){
                
    $ok_ko.="Scegli il nome.<br /> ";
                echo 
    "$ok_ko";
                echo 
    "<meta http-equiv='Refresh' content='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
            if(!isset (
    $_POST['text_mail']) && (empty($_POST['text_mail']))){
                
    $ok_ko.="Scrivi qualcosa.<br />";
                echo 
    "$ok_ko";
                echo 
    "<meta http-equiv='Refresh' content='2; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}

            
    //Se la variabile NON è VUOTA lasci ogli errori
            
    if ($ok_ko != "") {
                
    $visibilità "visibile";
                echo
    "<div style=\"visibility:$visibilità;\" class=\"ok_ko\"></div>";
            
    // Altrimenti se è VUOTA lascio e proseguo
            
    }

            if (empty(
    $ok_ko)) {

                
    //Filtro dati con MYSQLI
                
    $utente                     =         $_POST['utente'];
                
    $_SESSION['text_mail']     =         $mysqli->real_escape_string(trim($_POST['text_mail']));

                require_once(
    'phpmailer/PHPMailerAutoload.php');

                
    $marconcini    =    "mail1@gmail.com";
                
    $biblionet     =    "mail2@gmail.com";

                
    $mail = new PHPMailer();
                
    $mail->IsSMTP();                    // attiva l'invio tramiteSMTP
                
    $mail->isHTML(true);                //Attivo invio come html
                
    $mail->SMTPDebug    0;                //0 Senza debug, se voglio i dettagli metto 4
                //$mail->Debugoutput = "error_log";    // scrive messaggi di errore nel log di PHP, si può lasciare sempre
                
    $mail->Host         "smtp.gmail.com";        // ok PHPmailer
                
    $mail->Port         465;
                
    $mail->SMTPAuth        true;
                
    $mail->SMTPSecure    "ssl";
                
    $mail->Username     "user@gmail.com";
                
    $mail->Password     "pass";

                
    /*Messagio in php o html usato come allegto*/
                
    $body file_get_contents('mail_pubblicita.php');    // testo del messaggio in formato html

                // Mail che riceveranno solo gli utenti selezionati del form



                    
    $implode_user = (implode($_POST['utente']," "));


                if (
    $result $mysqli->query("SELECT email FROM utenti WHERE nome = '".$implode_user."'")) {
                    while (
    $row $result->fetch_assoc())

                    {
                        
    $email    $row['email'];
                        
    // ----- impostazione dei destinatari
                        
    $mail->ClearAllRecipients( );
                    }


                
    $mail->AddAddress ($row['email']); //Mail che riceverà l'utente registrato
                
    $mail->From = ($biblionet); //Inserire la mail di Andrea che apparirà come mail del mittente
                
    $mail->FromName = ("Biblionet San Maurizio"); // Nome che apparirà come Mittente al cliente
                //$mail->WordWrap        = 50;
                
    $mail->AddReplyTo($marconcini 'Andrea ');
                
    $mail->AddReplyTo($biblionet 'Biblionet San Maurizio');
                
    $mail->Subject = ("Novità dalla Biblionet");
                
    $mail->AltBody "Per visualizzare questo messaggio utilizza un programma adatto e che legga le mail in HTML!"// Opzionale, da testare
                
    $mail->Body $body;
                
                if (!
    $mail -> Send()){
                    
    //Messaggio che appare se qualcosa va storto nell'invio della mail
                    
    echo '<div id="benvenuto">
                    <p><h3>C\'è stato un errore nell\'invio della mail</h3></p>'
    $mail->ErrorInfo//    Messaggio di errore invio mail
                    
    echo "<meta http-equiv='Refresh' content='3000; URL=contatti.php'>";
                } else {
                    echo 
    "La Mail è stata inviata a: <br> "$implode_user ."";  //Messaggio invio riuscito
                    
    echo "<meta http-equiv='Refresh' content='200; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
                } else {
                    
    Errore$mysqli->ErrorInfo;
                }

            } 
    // Chiusura IF variabile $ok

        
    // Chiusura IF invio form
    } else {
        
    ?>
             <div id="content">
             <form id="jform" action='<?php echo $_SERVER['PHP_SELF']; ?>' method="post">
              <fieldset>
                     <legend>Seleziona Utenti per invio Mail</legend>
                     <p>
                        <label class="block">Utenti:</label>
                <p></p>
        <?php
        
    if($result $mysqli->query("SELECT nome, user_id FROM utenti")){
                while (
    $row $result->fetch_assoc())
                {
                    echo 
    '<input id="utente'.$row['user_id'].'" class="wrong" type="checkbox" name="utente[]" value="'$row['nome'].'">';
                    echo 
    '<label value="'$row['user_id'].'">'$row['nome'] ,'</label>';
                }
        }
        
    ?>
                        <input id="oltre" class="wrong" type="hidden" value="oltre" name="oltre">

                    </p>
               </fieldset>
                  <fieldset>
                  <legend>Testo Mail</legend>
                    <label>Inserisci qui sotto il testo della mail</label>
                    <p></p>
                    <textarea name="text_mail" class="wrong" id="text_mail"></textarea>
               </fieldset>
                     <p>
                           <input type="hidden" name="sendmail" value=""/>
                        <button type="submit" class="send" id="send" name="invia">Invia</button>
                        <button type="reset" class="send" onclick="reset()">Reset</button>
                    </p>
             </form>
             </div><!-- content -->
        <?php
    }

  6. #6
    Se fai un implode allo spazio:
    Codice PHP:
    $implode_user = (implode($_POST['utente']," ")); 
    Ottieni una stringa contenente i nomi separati da uno spazio:
    Codice PHP:
    $implode_user "Mario Giuseppe Emanuele"
    Quindi la query
    Codice PHP:
    "SELECT email FROM utenti WHERE nome = '".$implode_user."'" 
    ritornerà sempre vuota.




    Devi inviare allo script PHP gli id degli utenti, non il nome (se ci fossero omonimie?), poi potresti implodere alla virgola l'array con gli id:
    Codice PHP:
    $implode_user implode($_POST['utente'],","); 
    e la tua query sarà:
    Codice PHP:
    "SELECT email,nome FROM utenti WHERE user_id IN (".$implode_user.")" 

  7. #7
    Utente di HTML.it L'avatar di Paperino78
    Registrato dal
    Aug 2012
    residenza
    Milano
    Messaggi
    71
    Sono tornato, sperando nelle ferie e nel maggiore tempo libero.
    Non so cosa fare, ho perso un pò la bussola. Provo a ricapitolare. Form con X checkbox che aumenteranno o diminuiranno in funzione degli utenti che in html popolo così
    Codice PHP:
    <?php
        
    if($result $mysqli->query("SELECT nome,user_id FROM utenti")){
                while (
    $row $result->fetch_assoc())
                {
                    echo 
    '<input id="utenti" class="wrong" type="checkbox" name="user_id[]" value="'$row['nome'].'">';
                    echo 
    '<label value="">'$row['nome'] ,'</label>';
                }
        }
        
    ?>
    ovviamente essendo più checkbox le ho messe in array alla tag name. Tralasciando il controllo solito sul fatto che siano checkate il problema viene nel momento in cui devo prelevare i dati tramite POST e recuperare le rispettive mail dal db. Qui mi incarto perchè non so come fare. Dovrei fare una sorta di "per ogni user_id selezionato associa la sua mail dal db" ma non so come fare, e non so se è possibile utilizzare la funzione SELECT ed associare al nome user_id un array.

    Qualcuno saprebbe darmi qualche aiuto?

  8. #8
    Innanzitutto nel value della checkbox non puoi mettere in nome dell'utente dato che si presume che esistano utenti con lo stesso nome per cui devi utilizzare le user_id che dovrebbero essere univoche.
    Dopo, per ogni user_id selezionato tramite checkbox effettui una select per quell'user_id recuperando la mail dell'utente.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Utente di HTML.it L'avatar di Paperino78
    Registrato dal
    Aug 2012
    residenza
    Milano
    Messaggi
    71
    Ok, quindi nel value inserisco la user_id mentre nel name posso mettere un valore a caso? Inoltre una volta selezionati gli user_id come faccio a recuperare la mail corrispondente visto che saranno più di uno? dal tag name ci sarà un array di nomi cosa ne faccio? Posso usare il foreach? Dove lo dovrò inserire?

  10. #10
    Quote Originariamente inviata da Paperino78 Visualizza il messaggio
    ...nel name posso mettere un valore a caso?
    Cosa intendi per "valore a caso"? nel name devi mettere l'array che conterrà le checkbox selezionate.

    Quote Originariamente inviata da Paperino78 Visualizza il messaggio
    Inoltre una volta selezionati gli user_id come faccio a recuperare la mail corrispondente visto che saranno più di uno?
    Dopo il submit avrai un array cghe conterrà tutti gli user_id selezionati. Scorri tale array e per ogni user_id esegui una select per recuperare l'email corrispondente.

    Quote Originariamente inviata da Paperino78 Visualizza il messaggio
    dal tag name ci sarà un array di nomi cosa ne faccio?
    No ci sarà un array di user_id e non di nomi. Ci fai quanto detto in precedenza.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.