come posso fare a gestire gli array variabili?
ecco il codice:
<?php
mysql_select_db($database_server, $server);
$query_eventi = "SELECT id, d, m, y, title, text FROM calendar_mssgs WHERE
concat_ws('-',y,lpad(m,2,0),lpad(d,2,0)) < curdate() + interval 3 day AND
concat_ws('-',y,lpad(m,2,0),lpad(d,2,0)) > curdate()";
$eventi = mysql_query($query_eventi, $server) or die(mysql_error());
$row_eventi = mysql_fetch_assoc($eventi);
$totalRows_eventi = mysql_num_rows($eventi); //da questa query ricavo gli
eventi che si verificheranno nei prossimi uno/due giorni
$evento = $row_eventi['evento'];
$colname_invisibili = "-1";
if (isset($_SESSION['$evento'])) {
$colname_invisibili = $_SESSION['$evento'];
}
mysql_select_db($database_server, $server);
$query_invisibili = sprintf("SELECT username, hash, fname, lname FROM
calendar_users WHERE hash NOT IN (SELECT username FROM partecipanti WHERE
evento = %s)", GetSQLValueString($colname_invisibili, "text"));
$invisibili = mysql_query($query_invisibili, $server) or die(mysql_error());
$row_invisibili = mysql_fetch_assoc($invisibili);
$totalRows_invisibili = mysql_num_rows($invisibili); //da questa query
ricavo i nomi di coloro che non hanno ancora segnalato la loro presenza a un
evento
if ($totalRows_invisibili > 0) { //se ci sono persone che non hanno ancora
segnalato la loro presenza allora....
require("class.phpmailer.php");
$aindirizzi =
array("ute...@email.it","ute...@email.it","ute...@email.it");
foreach ($aindirizzi as $destinatario)
{
$mail = new PHPMailer();
$mail->SetLanguage("it","./");
$mail->IsSendmail(); // send via SMTP
$mail->Host = "mail.xxxxxxxxx.it"; // SMTP servers
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "segre...@xxxxxxxxx.it"; // SMTP username
$mail->Password = "xxxxxxxx"; // SMTP password
$mail->From = "calendario eventi";
$mail->FromName = "Gruppo Grotte CAI Savona ";
$mail->AddAddress($destinatario);
$mail->WordWrap = 100; // set word wrap
$mail->IsHTML(false); // send as HTML
$mail->Subject = "ATTENZIONE! DEVI CONFERMARE LA TUA PRESENZA AD UN EVENTO
per il giorno $day/$month/$year ";
$colname_Recordset2 = "-1";
if (isset($destinatario)) {
$colname_Recordset2 = $destinatario;
}
$query_Recordset2 = sprintf("SELECT uid, username, fname, lname, hash FROM
calendar_users WHERE username = %s", GetSQLValueString($colname_Recordset2,
"text"));
$Recordset2 = mysql_query($query_Recordset2, $server) or
die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2); //determino il codice
id dell utente indispensabile per confermare la presenza tramite il link
spedito via email e va infatti a cercare la corrispondenza tra indirizzo
destinatario e username (email) nel database per ricavare il codice id
$mail->Body = "Ad oggi non ci risulta ancora che tu abbia segnalato al
gruppo la tua presenza/assenza al seguente evento: ".$row_eventi['title']."
per il giorno
".$row_eventi['d']."/".$row_eventi['m']."/".$row_eventi['y']."<br>
<br>
".
$mail->AltBody = $row_eventi['text']."<br>
<br>
"."Provvedi a confermare la tua presenza cliccando <a
href=\"http://www.xxxxxxxxxxxx.it/areasoci/presente.php?id=".$row_Recordset2['hash']."&evento=".$row_eventi['id']."&presenza=1\">
qui </a>"."altrimenti clicca su <a
href=\"http://www.xxxxxxxxxx.it/areasoci/presente.php?id=".$row_Recordset2['hash']."&evento=".$row_eventi['id']."&presenza=0\">
purtroppo non ci sarò </a>"." Diversamente continuerai a ricevere
questa e-mail ogni due ore sino al giorno dell evento!";
$mail->Send();
}
}
?>
> Non ci siamo capiti, 1 indirizzo email per ogni campo dello stesso record
s� ho 1 indirizzo email per ogni campo dello stesso record, ad ogni record
corrisponde un utente.
Ok ti ringrazio ma a quello ci avevo gi� pensato io con un campo PRESENTE
valorizzato Si/No proprio come dici tu. Infatti poi la query tira fuori gli
indirizzi e-mail di coloro che non hanno ancora detto se saranno presente o
meno all'evento.
Il mio problema � scorrere quelle email con il risultato della query!
mi potresti gentilmente postare il codice corretto per scorrere solo quelle
email estrapolate dalla query?
> Non devi scorrere le email ma rieseguire la query e filtrare solo i record
> con No nel campo PRESENTE ed inviare a tutti la email.
> Ciao
> Leonardo
quelli con valore no nel campo presente � gente che ha confermato di essere
assente, quelli con si hanno confermato di essere presenti, io devo spedire
le email a chi ha dato una risposta per niente che risolvo con quella
semplice subquery con il NOT IN.
il problema non � la query che � risolto ma come scorrere le email!!
<?php
mysql_select_db($database_server, $server);
$query_eventi = "SELECT id, d, m, y, title, text FROM calendar_mssgs WHERE
concat_ws('-',y,lpad(m,2,0),lpad(d,2,0)) < curdate() + interval 3 day AND
concat_ws('-',y,lpad(m,2,0),lpad(d,2,0)) > curdate()";
$eventi = mysql_query($query_eventi, $server) or die(mysql_error());
$row_eventi = mysql_fetch_assoc($eventi);
$totalRows_eventi = mysql_num_rows($eventi); //da questa query ricavo gli
eventi che si verificheranno nei prossimi uno/due giorni
$evento = $row_eventi['evento'];
//da questa query ricavo i nomi di coloro che non hanno ancora segnalato la
loro presenza a un evento
if ($totalRows_invisibili > 0) { //se ci sono persone che non hanno ancora
segnalato a loro presenza allora....
require("class.phpmailer.php");
$colname_invisibili = "-1";
if (isset($_SESSION['$evento'])) {
$colname_invisibili = $_SESSION['$evento'];
}
mysql_select_db($database_server, $server);
$query_invisibili = sprintf("SELECT username FROM calendar_users WHERE hash
NOT IN (SELECT username FROM partecipanti WHERE evento = %s)",
GetSQLValueString($colname_invisibili, "text"));
$invisibili = mysql_query($query_invisibili, $server) or die(mysql_error());
while (list($destinatario) = mysql_fetch_assoc($invisibili));
{
$mail = new PHPMailer();
$mail->SetLanguage("it","./");
$mail->IsSendmail(); // send via SMTP
$mail->Host = "mail.xxxxxxxxxxxx.it"; // SMTP servers
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "segre...@xxxxxxx.it"; // SMTP username
$mail->Password = "xxxxxxxxxx"; // SMTP password
$mail->From = "calendario eventi";
$mail->FromName = "Gruppo xxxxx xxxx xxxxxxx ";
$mail->AddAddress($destinatario);
href=\"http://www.xxxxxxxxx.it/areasoci/presente.php?id=".$row_Recordset2['hash']."&evento=".$row_eventi['id']."&presenza=0\">
Come fai ad affermare che � corretto? che controllo fai? ti stampi a video i
risultati della query e corrispondono a quegli che ti aspetti?
----------------
Da quello che ho capito il nocciolo � questo:
Hai una tabella che contiene dei record, ed in ciascuno di essi ci sono (fra
altri) i seguenti campi: ID - nome/cognome - email - SiNo.
Tu avvisi le persone che fanno parte di questa lista che c'� un evento.
Lo fai tramite e-mail
La e-mail viene inviata in seguito alla esecuzione di una query che
seleziona il campo Si/No che deve essere vuoto.
Gli utenti possono rispondere si o no per confermare e meno la loro
partecipazione.
Per farlo rispondono alla tue email facendo click su di un link (1 per il si
e l'altro per il no) .
Il codice sottostante alla pagina aggiorna il database.
Per quelli che non hanno risposto, ad un certo intervallo di tempo la query
viene rieseguita, e questo fino al giorno dell'evento.
-------------
La parte del codice che esegue la query e quella che invia la e-mail sono
indipendenti. Pu� funzionare la query e non l'invio di e-mail o viceversa.
------------
In ogni caso l'invio della e-mail lo farei contestualmente all'esecuzione
della query mentre cicli sui record ottenuti.
<?php
$query = "codice della query filtra il campo si/No che deve essere vuoto";
$result = mysql_query($query) or die ("Quesry failed; " .mysql_error());
while ($row = mysql_fetch_array($result))
{
echo "<br>";
echo $row['CampoSiNo'], " - " , $row['CampoEmail'];// vedi SUL MONITOR CHE
SUCCEDE
if(strlen($row['CampoSiNo'])<1)// invio email SE NON CONTIENE CARATTERI
{
// invio mail
$a=$row['CampoEmail'];
$oggetto="oggetto mail";
$messaggio="messaggio mail"; // DEVE CONTENERE il testo del messaggio e
soprattutto i LINK CHE PERMETTONO DI RISPONDERE CON SI O NO
mail($a, $oggetto, $messaggio);
}
}
?>
Ciao
Leonardo
non c'� si/no ma 0/1
> Tu avvisi le persone che fanno parte di questa lista che c'� un evento.
> tramite e-mail
> La e-mail viene inviata in seguito alla esecuzione di una query
no...l'email viene inviata a tutti gli utenti predefiniti
> Gli utenti possono rispondere si o no per confermare e meno la loro
> partecipazione.
> Per farlo rispondono alla tue email facendo click su di un link (1 per il
> si e l'altro per il no) .
> Il codice sottostante alla pagina aggiorna il database.
a questo punto sul database viene scritto per ciascun utente 0 o 1 a seconda
se clicca su presente o assente
> Per quelli che non hanno risposto, ad un certo intervallo di tempo la
> query viene rieseguita, e questo fino al giorno dell'evento.
eseguo una cronjob su questa pagina che ripete l'invio dell'email sintanto
che non risulta 0 o 1 su quell'utente e per quell'evento.
ho effettuato le prove che dicevi e questo codice funziona alla grande....ma
mi rimane ancora un punto da risolvere.....devo ciclare la query eventi in
maiera tale che le email vengano inviate agli utenti per OGNI evento
prelevato. ho provato ad inserire "while ($row_eventi =
mysql_fetch_array($eventi))
" ma non funge....
<?php
mysql_select_db($database_server, $server);
$query_eventi = "SELECT id, d, m, y, title, text FROM calendar_mssgs WHERE
concat_ws('-',y,lpad(m,2,0),lpad(d,2,0)) < curdate() + interval 10 day AND
concat_ws('-',y,lpad(m,2,0),lpad(d,2,0)) > curdate() - interval 4 day";
$eventi = mysql_query($query_eventi, $server) or die(mysql_error());
$row_eventi = mysql_fetch_assoc($eventi);
$totalRows_eventi = mysql_num_rows($eventi); //da questa query ricavo gli
eventi che si verificheranno nei prossimi uno/due giorni
if ($totalRows_eventi > 0) { //se ci sono eventi a breve, allora....
require("class.phpmailer.php");
$colname = "-1";
if (isset($row_eventi['id'])) {
$colname = $row_eventi['id'];
}
mysql_select_db($database_server, $server);
$query = sprintf("SELECT username, hash FROM calendar_users WHERE hash NOT
IN (SELECT username FROM partecipanti WHERE evento = %s)",
GetSQLValueString($colname, "text"));
$result = mysql_query($query) or die ("Query failed; " .mysql_error()); //da
questa query ricavo i nomi di coloro che non hanno ancora segnalato la loro
presenza a un evento
while ($row = mysql_fetch_array($result))
{
echo "<br>";
echo $colname;
echo $row['username'];// vedi SUL MONITOR i nomi prelevati
// invio mail
//$a=$row['username'];
//$oggetto="messaggio di prova NON LEGGERE";
$colname_Recordset2 = "-1";
if (isset($row['username'])) {
$colname_Recordset2 = $row['username'];
}
$query_Recordset2 = sprintf("SELECT uid, username, fname, lname, hash FROM
calendar_users WHERE username = %s", GetSQLValueString($colname_Recordset2,
"text"));
$Recordset2 = mysql_query($query_Recordset2, $server) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
$messaggio="Ad oggi non ci risulta ancora che tu abbia segnalato al gruppo
la tua presenza/assenza al seguente evento: ".$row_eventi['title']." per il
giorno ".$row_eventi['d']."/".$row_eventi['m']."/".$row_eventi['y']."
Provvedi a confermare la tua presenza cliccando <a
href=\"http://www.ggcaisavona.it/areasoci/presente.php?id=".$row_Recordset2['hash']."&evento=".$row_eventi['id']."&presenza=1\">
qui </a>"."altrimenti clicca su <a
href=\"http://www.ggcaisavona.it/areasoci/presente.php?id=".$row_Recordset2['hash']."&evento=".$row_eventi['id']."&presenza=0\">
purtroppo non ci sarò </a>"." Diversamente continuerai a ricevere
questa e-mail ogni due ore sino al giorno dell evento!";
echo $messaggio; //da togliere quando � tutto ok
//mail($a, $oggetto, $messaggio);
}
}
?>
Secondo me dovrebbe essere legato alla prema esecuzione della query.
>> Gli utenti possono rispondere si o no per confermare e meno la loro
>> partecipazione.
>> Per farlo rispondono alla tue email facendo click su di un link (1 per il
>> si e l'altro per il no) .
>> Il codice sottostante alla pagina aggiorna il database.
>
> a questo punto sul database viene scritto per ciascun utente 0 o 1 a
> seconda se clicca su presente o assente
>
>> Per quelli che non hanno risposto, ad un certo intervallo di tempo la
>> query viene rieseguita, e questo fino al giorno dell'evento.
>
> eseguo una cronjob su questa pagina che ripete l'invio dell'email sintanto
> che non risulta 0 o 1 su quell'utente e per quell'evento.
>
> ho effettuato le prove che dicevi e questo codice funziona alla
> grande....ma mi rimane ancora un punto da risolvere.....devo ciclare la
> query eventi in maiera tale che le email vengano inviate agli utenti per
> OGNI evento prelevato. ho provato ad inserire "while ($row_eventi =
> mysql_fetch_array($eventi))
> " ma non funge....
>
Un punto dolente potrebbe essere che il compo Si/No o 0/1, non � sufficente
o non � ben gestito dal codice.
Dovrebbe contenere 3 valori ad esempio 0 nessuna risposta o primo avvio - 1
accettazione - 2 diniego
Io adopereri parole come si/no/NN che si prestano meglio ad un controllo ed
inizializzando il campo a NN (con una query di aggiornamento) prima della
prima esecuzione della query della quale scriviamo..
Mi � capitato che campi con contenuto nullo (non zero e non vuoto) abbiano
dato risultati imprevisti.
Un'altra cosa che mi pare ridondante � l'invio delle e-mail con
class.phpmailer.php, a me pare che bastino poche righe di codice all'interno
del loop che legge i riusultati della query che filtra il campi Si/No, e
come si dice, quel che non c'� non si guasta.
Ciao
Leonardo
> Un'altra cosa che mi pare ridondante � l'invio delle e-mail con
> class.phpmailer.php, a me pare che bastino poche righe di codice
> all'interno del loop che legge i riusultati della query che filtra il
> campi Si/No, e come si dice, quel che non c'� non si guasta.
non ho capito cosa vuoi dire...
Ma quando c'� un nuovo evento e le e-mail non sono state inviate nemmeno una
volta il campo 1/0 che contiene?
>> Un'altra cosa che mi pare ridondante � l'invio delle e-mail con
>> class.phpmailer.php, a me pare che bastino poche righe di codice
>> all'interno del loop che legge i riusultati della query che filtra il
>> campi Si/No, e come si dice, quel che non c'� non si guasta.
>
> non ho capito cosa vuoi dire...
Che il mancato funzionamento potrebbe essere nell'interfacciamento con
phpmailer. e l'utilizzo di phpmailer mi pare ridondante.
Ciao
Leonardo