• User

    Mail() - Inviare dati mysql tramite php mail()

    Ciao a tutti!!
    Probabilmente è una cosa molto semplice ma ho cercato e non la trovo.
    Ho DUE script php testati e funzionanti:
    -il primo serve ad inviare una mail
    -il secondo crea un documento html con una semplice tabella a 3 colonne dove vengono visualizzati pochi (max una decina) record mysql

    Vorrei riuscire ad utlizzare il secondo script come ARGOMENTO/CONTENUTO della mail generata con il primo script. Qual è la sintassi corretta?
    [Credo di essere stato abbastanza chiaro... in sostanza all'interno della mail deve comparire la tabella a 3 colonne con i record mysql]

    P.s. Di seguito riporto i due script:

    [PHP]<?php
    $to = "[email protected]";
    $subject = "Test mail";
    $message = "Hello! This is a simple email message.";
    $from = "[email protected]";
    $headers = "From:" . $from;
    mail($to,$subject,$message,$headers);
    echo "Mail Sent.";
    ?>[/PHP]

    [PHP]<html>
    <body>

    <?php require_once('Connections/altermysql.php');
    mysql_select_db($database_altermysql, $altermysql);

    $query="SELECT * FROM prenotaz_campo1 WHERE giorno=curdate()";
    $risultati=mysql_query($query);

    $num=mysql_numrows($risultati);

    mysql_close();
    ?>

    <table border="0" cellspacing="2" cellpadding="2">
    <tr>
    <th><font face="Arial, Helvetica, sans-serif">Giorno</font></th>
    <th><font face="Arial, Helvetica, sans-serif">Ora</font></th>
    <th><font face="Arial, Helvetica, sans-serif">Username</font></th>
    </tr>

    <?php
    $i=0;
    while ($i < $num) {
    $giorno=mysql_result($risultati,$i,"giorno");
    $ora=mysql_result($risultati,$i,"ora");
    $username=mysql_result($risultati,$i,"username");
    ?>

    <tr>
    <td><font face="Arial, Helvetica, sans-serif"><?php echo $giorno;?></font></td>
    <td><font face="Arial, Helvetica, sans-serif"><?php echo $ora;?></font></td>
    <td><font face="Arial, Helvetica, sans-serif"><?php echo $username;?></font></td>
    </tr>
    <?php
    $i++;
    }
    ?>
    </body>
    </html>[/PHP]


  • User

    Soluzione trovata!!!!

    Esiste una funzione fantastica chiamata "OUTPUT BUFFERING"!!

    Qui il link della pagina dalla quale ho preso la soluzione: stackoverflow.com/questions/7476216/how-to-php-call-another-page-and-get-output-as-variable

    Adattandola al problema esposto sopra: INVIARE L'ESITO DI UNA QUERY MYSQL VIA MAIL (AD ES. UNA TABELLA DINAMICA)

    1- Considerate i due script del messaggio precedente, il primo lo chiamerò "Codice1" e l'altro "Codice2"

    2- "Codice1" e "Codice2" devono essere salvati in due files distinti. Fate l'upload dei due files e controllatene il funzionmento separatamente. Se è tutto ok, "Codice1" quando eseguito invierà una mail all'indirizzo che avete indicato al posto di "[email protected]" e restituirà a video la scritta "Mail sent". "Codice2" (che dovete creare voi in base alla struttura del vostro database) stamperà a video una tabella dinamica e vi mostrerà alcuni record.

    3- Per inviare una mail HTML contenente (come messaggio e NON come allegato) la tabella dinamica dovete fare due semplicissimi passaggi. L'unico file da modificare sarà "Codice1"!!!

    4a- Inserire gli headers (2 stringhe) che indicano che la mail è in HTML

    4b- Usare l'output buffering per caricare "Codice2" come testo del messaggio (3 stringhe).

    Ecco in pratica il codice finale:

    [PHP] <?php
    $to = "[email protected]";
    $subject = "Test mail";
    ob_start();
    require 'codice2.php';
    $message = ob_get_clean();
    $from = "[email protected]";
    $headers = "From:" . $from;
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    mail($to,$subject,$message,$headers);
    echo "Mail Sent.";
    ?>
    [/PHP]

    E voilà... molto più semplice di tutte le altre cose che avevo provato.

    Se questo post vi ha aiutato, ringraziare non sarebbe cosa malvagia... Ciao a tutti!! :figo2:


  • User

    Giusto per completezza...
    Se vi state domandando in quale contesto è possibilie utilizzare gli script sopra riportati, ecco un esempio:
    associare il file "Codice1" ad un CRON JOB... ovvero far eseguire automaticamente dal server lo script "Codice1" ogni tot tempo (ogni giorno, ogni settimana, ogni mese).
    In questo modo potete ad esempio far sì che venga inviata giornalmente una mail con un report di tutte le prenotazioni effettuate per il giorno corrente. Insomma niente più bisogno di accedere direttamente all'area riservata del sito web con password di admin per scoprire gli impegni previsti per la giornata... e non dimenticate che una simile mail può essere ricevuta tranquillamente su uno smartphone.
    Ovviamente cambiando la query mysql ed il contenuto del database gli utilizzi di questo sistema sono i più disparati.

    Vi lascio un link ad una guida velocissima su crontab/cron job: html.it/articoli/php-e-crontab-programmare-lesecuzione-degli-script-1/

    Un saluto... Smartix :tongueout:


  • User

    UPDATE:

    Questo script è stato creato e testato su hosting Altervista.

    L'ho provato anche su Aruba, ma non ha funzionato, probabilmente a causa di qualche impostazione locale sul server. Magari ad altri utenti su Aruba funziona.
    In ogni caso anche per Aruba ho trovato una soluzione:
    Basta usare "PHP Mailer" (cercate su google le istruzioni) e poi sostituire le stringhe del corpo del messaggio con le istruzioni di output buffering (proprio come sopra)
    Assolutamente nulla di complicato 😉
    Bye

    Smartix