Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    while annidati e tabelle differenti...

    Salve, rieccomi qui a rompervi le scatole... Sono alle prese con uno script per le newsletter e mi trovo a dover ricavare i dati da due tabelle: 1 in cui ci sono gli indirizzi email degli iscritti, l'altro dove sono contenuti gli aggiornamenti del sito.
    Il codice che posto mi da due problemi:
    1- quello più grave, probabilmente dovuto a un errato uso del while: in pratica le mail arrivano a tutti gli iscritti, solo che per ogni iscritto gli aggiornamenti raddoppiano! (per essere piu chiari: mail1:aggiornamento1 aggiornamento2 aggiornamento3; mail2:aggiornamento1 aggiornamento2 aggiornamento3 aggiornamento1 aggiornamento2 aggiornamento3; mail3:aggiornamento1 aggiornamento2 aggiornamento3 aggiornamento1 aggiornamento2 aggiornamento3 aggiornamento1 aggiornamento2 aggiornamento3, etc etc etc...);
    2-il secondo problema è che quando eseguo la query mi da questo notice: "Notice: Undefined variable: mess in C:\xampp\htdocs\Sito2\contents\php\send2.php on line 54"
    ecco il codice:
    Codice PHP:
    <?php


    $serverdb
    ='localhost';
    $userdb='root';
    $passdb='';
    $db='test';
    $table='news';

    $link=mysql_connect("$serverdb","$userdb","$passdb")
    or die (
    "Impossibile connettersi");


    mysql_select_db($db,$link);

    $isc=mysql_query("SELECT * FROM iscritti ORDER BY id ASC");
    if (!
    $isc) {
               exit (
    '

     Errore mentre recuperavo i dati degli iscritti' 
    mysql_error() . '</p>');
           }
    if (
    mysql_num_rows($isc) == 0) {
       
    ?>
    <script type='text/javascript'>window.location.href='../index.php';
    </script>
    <?php

    else {
      while (
    $cisc mysql_fetch_array($isc)) {
         
    $dest=$cisc['email'];


    $sel=mysql_query("SELECT * FROM news
    WHERE dataev <= DATE_ADD(CURDATE(), INTERVAL 100 DAY) AND CURDATE() <= dataev OR dataev=0 ORDER BY dataev ASC"
    );
    if (!
    $sel) {
               exit (
    '

     Errore mentre recuperavo i dati' 
    mysql_error() . '</p>');
     
                    }
    if (
    mysql_num_rows($sel) == 0) {
       
    ?>
    <script type='text/javascript'>window.location.href='../index.php';
    </script>
    <?php
    } else {
    while (
    $news=mysql_fetch_array($sel)){

    $a=$news['data'];
    $for1=explode(" "$a);
    $data=explode("-"$for1[0]);
    $ora=explode("-"$for1[1]);

    $b=$news['dataev'];
    $for2=explode(" "$b);
    $data2=explode("-"$for2[0]);
    $ora2=explode("-"$for2[1]);
    $mess .= "Evento: ".$news['titolo']."\nData Evento: " .$data2[2]. "/" .$data2[1]. "/" .$data2[0]."\n".$news['art']."\nAggiornamento del ".$data[2]."/".$data[1]."/".$data[0]." alle ore ".$ora[0].".\n\n\n";




    }

    $ogg ='Associazione: Aggiornamenti mensili';

    mail($dest$ogg$mess);
    }
    }

    }


    ?>

    Chi è cosi gentile da darmi una mano? Grazie mille!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2012
    residenza
    Lima, Perù
    Messaggi
    212
    il secondo problema è semplice, stai concatenando una stringa ad una variabile che non esiste
    ciò che devi fare è inizializzare la variabile, prima del while fai $mess = '';

    per quanto riguarda il primo problema, non riesco a capire quale sia la relazione delle due tabelle
    nella prima query prendi tutti gli scritti, nella seconda?
    poi non vedo che usi mai i dati ottenuti con la prima query
    Jamie Ynonan - Web Developer / Desarrollador Web - HTML5 - CSS3 - Javascript/jQuery - PHP/CodeIgniter/Laravel - SQL/MySQL - Wordpress
    Telelavoro / Teleworking - jamiea31[at]gmail.com - Lima - Perù - GMT -5

  3. #3
    Ok, il secondo problema è risolto, grazie 1000!

    Dalla prima tabella ci ricavo solo gli indirizzi mail:



    Codice PHP:
    $isc=mysql_query("SELECT * FROM iscritti ORDER BY id ASC");
    ...
     while (
    $cisc mysql_fetch_array($isc)) {
         
    $dest=$cisc['email']; 
    in pratica questo script dovrebbe creare una mail, il cui destinatario è appunto l'iscritto tirato fuori dalla tabella "iscritti", l'oggetto è "Associazione: Aggiornamenti mensili" e il testo dell'email è in pratica tutta la tabella news.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2012
    residenza
    Lima, Perù
    Messaggi
    212
    non ci avevo fatto caso alla mail XD...

    prova a fare cosi:

    Codice PHP:
    <?php

    $serverdb 
    'localhost';
    $userdb 'root';
    $passdb '';
    $db 'test';
    $table 'news';

    $link mysql_connect("$serverdb""$userdb""$passdb") or die("Impossibile connettersi");


    mysql_select_db($db$link);

    $isc mysql_query("SELECT * FROM iscritti ORDER BY id ASC");
    if (!
    $isc) {
        exit(
    '

     Errore mentre recuperavo i dati degli iscritti' 
    mysql_error() .'</p>');
    }
    if (
    mysql_num_rows($isc) == 0) {
        
    ?>
        <script type='text/javascript'>window.location.href='../index.php';</script>
        <?php
    }
    $sel mysql_query("SELECT * FROM news
            WHERE dataev <= DATE_ADD(CURDATE(), INTERVAL 100 DAY)
                AND CURDATE() <= dataev
                OR dataev=0
            ORDER BY dataev ASC"
    );
    if (!
    $sel) {
        exit(
    '

     Errore mentre recuperavo i dati' 
    mysql_error() . '</p>');

    }
    if (
    mysql_num_rows($sel) == 0) {
        
    ?>
        <script type='text/javascript'>window.location.href='../index.php';</script>
        <?php
    }

    $ogg 'Associazione: Aggiornamenti mensili';
    while (
    $cisc mysql_fetch_array($isc)) {
        
    $dest $cisc['email'];
        
    $mess '';
        
    mysql_data_seek($sel,0);
        while (
    $news mysql_fetch_array($sel)) {

            
    $a $news['data'];
            
    $for1 explode(" "$a);
            
    $data explode("-"$for1[0]);
            
    $ora explode("-"$for1[1]);

            
    $b $news['dataev'];
            
    $for2 explode(" "$b);
            
    $data2 explode("-"$for2[0]);
            
    $ora2 explode("-"$for2[1]);
            
    $mess .= "Evento: " $news['titolo'] . "\nData Evento: " $data2[2] . "/" $data2[1] .
                
    "/" $data2[0] . "\n" $news['art'] . "\nAggiornamento del " $data[2] . "/" .
                
    $data[1] . "/" $data[0] . " alle ore " $ora[0] . ".\n\n\n";
        }

        
    mail($dest$ogg$mess);
    }
    ?>
    Jamie Ynonan - Web Developer / Desarrollador Web - HTML5 - CSS3 - Javascript/jQuery - PHP/CodeIgniter/Laravel - SQL/MySQL - Wordpress
    Telelavoro / Teleworking - jamiea31[at]gmail.com - Lima - Perù - GMT -5

  5. #5
    SIII! Funziona! Ora arrivano in modo decente!
    Suppongo il merito sia di
    Codice PHP:
    mysql_data_seek($sel,0
    che onestamente non so a cosa serva... saresti cosi gentile da spegarmelo? Comunque grazie 1000, davvero!!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2012
    residenza
    Lima, Perù
    Messaggi
    212
    invece di fare una query per ogni utente, con seek sposti il puntatore della query di $sel, mi sa che lo capirai meglio guardando la spiegazione ufficiale di php mysql_data_seek()

    in realtà il problema non era while, ma che andavi sempre ad aggiungere i dati in $mess, adesso $mess si inizializza ($mess = ''; ) per ogni utente
    Jamie Ynonan - Web Developer / Desarrollador Web - HTML5 - CSS3 - Javascript/jQuery - PHP/CodeIgniter/Laravel - SQL/MySQL - Wordpress
    Telelavoro / Teleworking - jamiea31[at]gmail.com - Lima - Perù - GMT -5

  7. #7
    Ecco, immaginavo che la query facesse qualcosa del genere (visto il risultato che ottenevo!), ma non sapevo come porvi rimedio, non conoscendo il comando mysql_data_seek().
    Poi me lo vado a studiare un po', che mi sa che ne ho bisogno!
    Grazie davvero, minos, considerando anche l'orario mi sa che hai l'aureola in testa!

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2012
    residenza
    Lima, Perù
    Messaggi
    212
    Ecco, immaginavo che la query facesse qualcosa del genere (visto il risultato che ottenevo!), ma non sapevo come porvi rimedio, non conoscendo il comando mysql_data_seek().
    ...
    Grazie davvero, minos, considerando anche l'orario mi sa che hai l'aureola in testa!
    hahaha, comunque i dati non cambiano se usi seek oppure fai la query
    il vero problema era che con solo $mess .= 'text' per ogni giro concateni 'text' ogni volta...

    comunque forse sarebbe meglio farlo cosi:

    Codice PHP:
    <?php

    $serverdb 
    'localhost';
    $userdb 'root';
    $passdb '';
    $db 'test';
    $table 'news';

    $link mysql_connect("$serverdb""$userdb""$passdb") or die("Impossibile connettersi");


    mysql_select_db($db$link);

    $isc mysql_query("SELECT * FROM iscritti ORDER BY id ASC");
    if (!
    $isc) {
        exit(
    '

     Errore mentre recuperavo i dati degli iscritti' 
    mysql_error() .'</p>');
    }
    elseif (
    mysql_num_rows($isc) == 0) {
        
    ?>
        <script type='text/javascript'>window.location.href='../index.php';</script>
        <?php
    }
    $sel mysql_query("SELECT * FROM news
            WHERE dataev <= DATE_ADD(CURDATE(), INTERVAL 100 DAY)
                AND CURDATE() <= dataev
                OR dataev=0
            ORDER BY dataev ASC"
    );
    if (!
    $sel) {
        exit(
    '

     Errore mentre recuperavo i dati' 
    mysql_error() . '</p>');

    }
    elseif (
    mysql_num_rows($sel) == 0) {
        
    ?>
        <script type='text/javascript'>window.location.href='../index.php';</script>
        <?php
    }

    $mess '';
    while (
    $news mysql_fetch_array($sel)) {

        
    $a $news['data'];
        
    $for1 explode(" "$a);
        
    $data explode("-"$for1[0]);
        
    $ora explode("-"$for1[1]);

        
    $b $news['dataev'];
        
    $for2 explode(" "$b);
        
    $data2 explode("-"$for2[0]);
        
    $ora2 explode("-"$for2[1]);
        
    $mess .= "Evento: " $news['titolo'] . "\nData Evento: " $data2[2] . "/" $data2[1] .
            
    "/" $data2[0] . "\n" $news['art'] . "\nAggiornamento del " $data[2] . "/" .
            
    $data[1] . "/" $data[0] . " alle ore " $ora[0] . ".\n\n\n";
    }

    $ogg 'Associazione: Aggiornamenti mensili';
    while (
    $cisc mysql_fetch_array($isc)) {
        
    $dest $cisc['email'];
        
        
    mail($dest$ogg$mess);
    }
    Jamie Ynonan - Web Developer / Desarrollador Web - HTML5 - CSS3 - Javascript/jQuery - PHP/CodeIgniter/Laravel - SQL/MySQL - Wordpress
    Telelavoro / Teleworking - jamiea31[at]gmail.com - Lima - Perù - GMT -5

  9. #9
    Ma grazie! Ora ho anche uno script bello pulito! Ti devo come minimo una colazione (sempre vista l'ora)

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.