• User Attivo

    Aiuto PhP caricare righe.

    Salve a tutti gli utenti. Mi servirebbe una mano per finire di configurare un sistema di invio e-mail molto simile alla news-letter. Con un sistema di registrazione a un gioco salvo delle informazioni su un file .scp.

    Il file .scp, che chiameremo lista_email.scp è composto così:
    (considerate che ne ho messi solo 2, ma ce ne sono 1000)

    
     
    [assdf]
    PASSWORD=dzvj80
    EMAIL=email1
    DATA DI REGISTRAZIONE=04/01/09 14:23
    IP=89.96.108.181
     
    [assdaaa]
    PASSWORD=avslm9
    EMAIL=email2
    DATA DI REGISTRAZIONE=04/01/09 14:25
    IP=89.96.108.181
     
    
    

    Con un file php, chiamato send.php, dovrei caricare ogni e-mail usata. Cioè se ogni [nome] racchiude una registrazione, dovrei caricare ogni e-mail di ogni registrazioni, separarle con un ";" e formarne una variabile chiamata "$mail". che dopo servità nella tag "$mail_to = $email;" nel sistema di invio.

    Ho tutto ma mi manca solo questo caricamento delle e-mail. Grazie a tutti per le risposte. Posterei l'intero codice ma nn posso.


  • Consiglio Direttivo

    Ciao the_dream. 🙂

    Potresti usare la funzione file(); per ottenere un array che per ogni indice abbia una riga del file (comprensivo del carattere di a capo, attenzione :2: e poi tramite la funzione substr(); intercettare la riga che inizia per EMAIL che ti andrai ad esplodere tramite la funzione explode();

    Una volta esplosa la riga, beh...immagino il resto ti venga facile. 🙂

    Mi permetto di farti pero' un paio di considerazioni:

    • hai detto di avere 1000 indirizzi mail, combinato così quel file dovrai verificare con lo script 6000 righe....hai idea del tempo che ci starà ? E di quanto appesantirai il server? 🙂 Se proprio devi far così allora ti consiglio vivamente di creare una riga per ogni utente dove metti tutto utilizzando un separatore univoco (esempio: assdf;dzvj80;[email protected];04/01/09 14:23;000.000.000.000) così da alleggerire il codice senza dover utilizzare la funzione substr(); utilizzerai direttamente l'explode(); tirandoti fuori l'indirizzo mail
    • Scontato a dirsi......la miglior soluzione per queste cose è utilizzare un Database
    • Attenzione che quasi tutti i servizi di Hosting non permettono invii di n mila mail, solitamente tagliano a 100-150 invii dopo di ché dovrai stoppare il tuo script per qualche secondo per poi riprendere l'invio delle successive email.

    :ciauz:


  • User Attivo

    Grazie mille per la tua risposta, dopo la tua risposta molto completa mi sono dato a fare alcuni test e alcune prove, ma con scarsissimi risultati, per nn dire nulli. Segue il codice completo del file send.php. Se riuscissi a integrarlo con quello che hai scritto saresti il mio dio 🙂

    
    <?PHP
    // Tutti gli elementi caricabili //
    $mese = $_POST['mese'];
    $messaggio = nl2br($_POST['messaggio']);
    $da = "Sevenshard";
    $linkweb = "link_del_web";
    ////// funzione che carica la lista delle e-mail //////
    // Processo di controllo in modo che ogni campo DEVE essere completo $mese e $ messaggio proviene dal form //
    if ($mese == null)
    {
    print "Errore: &egrave; necessario compilare il campo 'Mese'";
    }
    else
    {
    if ($messaggio == null)
    {
    print "Errore: &egrave; necessario compilare il campo 'Messaggio'";
    }
    else
    {
    // Email //
    $mail_to = $email;
    $mail_from = $da;
    $mail_subject = "News-Letter del $mese";
    $mail_body = "
    <p><font color=#000000>$messaggio</font></p>
    <p><font color=#FF0000>Lo staff di $da</font></p>";
    // Intestazioni HTML //
    $mail_in_html = "MIME-Version: 1.0\r\n";
    $mail_in_html .= "Content-type: text/html; charset=iso-8859-1\r\n";
    $mail_in_html .= "From: <$mail_from>";
    // Errori / Sucesso //
    if (mail($mail_to, $mail_subject, $mail_body, $mail_in_html))
    {
    print "Email inviata con successo!";
    }
    else
    {
    print "Errore";
    }
    }
    }
    ?>
    
    

  • Consiglio Direttivo

    Questo dovrebbe andare, per ora eseguilo così com'è. Ti ho messo un echo alla fine per verificare che estragga quel che interessa. 😉

    Se tutto va bene elimina l'echo e la variabile $destinatari conterrà tutti gli indirizzi email. 😉
    [php]<?php
    $array=file("lista_email.scp");
    $i=count($array)-1;
    $u=0;
    $destinatari="";
    while ($u<=$i)
    {
    if (substr($array*, 0, 5) == "EMAIL")
    {
    $email=explode("=", $array*);
    $destinatari.=substr($email[1],0,-1).";";
    }
    $u=$u+1;
    }
    echo $destinatari;
    ?>[/php]


  • User Attivo

    Ok... funziona grazie mille!!!!


  • Consiglio Direttivo

    Bene, alla prossima. 😉

    :ciauz: