invio automatico email

  • Creatore Discussione Creatore Discussione vide91
  • Data di inizio Data di inizio

vide91

Nuovo Utente
31 Mag 2012
26
0
0
Salve a tutti mi trovo a dover affrontare un problema...sto progettando un piccolo sito in php...utilizzando easyphp....ho una tabella utenti dove c'è come campo email e un altra tabella dove c'è una data di scadenza...quando la data di scadenza arriva....deve partire un email a quell utente...come devo fare?
 
ho queste tabelle "utente" "prenotazione" ...in utente ho ("id_utente" chiave primaria ,"email",....) in prenotazione ho ("id_prenotazione" chiave primaria,"id_utente" chiave esterna , "data scadenza")
 
ciao
mi ero dimenticaso una cosa che guardando le tabelle mi è tornata in mente
data scadenza quale è il suo formato? (io spererei in timestamp semplificherebbe molto le cose)
sappimi dire
comunque ecco uno schema di come potresti fare

PHP:
<?php
//dati connessione al db ecc.......
$oggi=time();//o date() con la stessa formattazione che hai nel campo data_scadenza in prenotazione
$query("SELECT * FROM utente as u, prenotazione as p WHERE u.id_utente=p.id_utente AND p.data_scadenza= '$oggi'");
$result=mysql_query($query);
if(mysql_num_rows($result)==0){
	echo "non ci sono scadenze";
}else{
	$oggetto="scadenza iscrizione";
	$da="tua_email@pinco_pallo.it";
	while($riga=mysql_fetch_array($query)){
		$nome=$riga['nome_clente'];//immagino che tu abbia il nome
		$email=$riga['email'];
		$scadenza=$riga['email'];
		$testo="Egr. Sig. $nome<br>la informiamo che in data $scadenza &egrave; scaduta la sua iscrizione<br>cordiali saluti,<br>Pinco De Pallis";
		//qui uso la funzione mail() ma sarebbe meglio che tu usassi la classe phpmailer o simile
		if(mail($email,$oggetto,$testo,"from $da")){
			echo "email inviata a $nome con successo<br>";
		}else{
			echo "non riuscito ad inviare email a $nome<br>";
		}
	}
}
?>
guarda che è un'idea che deve essere perfezionata.
p.s.
se usassi il timestamp potrest far partire prima l'email (es 10 gg prima della scadenza) es.

PHP:
<?php
//.....
$mancano_10gg=time()-(10*24*3600);
//e la query
$query("SELECT * FROM utente as u, prenotazione as p WHERE u.id_utente=p.id_utente AND p.data_scadenza >= $mancano_10gg");
//...
?>
in questo caso però ti conviene mettere un altro campo a prenotazione chiamato (es.) avvisato e spedisci l'email solo se avvisato=0,
dentro l'if(mail($email,$oggetto,$testo,"from $da")) se invio è ok, uppi il campo a 1
 
veramente la data stavo ancora aspettando prima di assegnare il tipo perchè avevo letto che avevano dei problemi...quindi in mysql come potrei assegnarla?
 
un dubbio ...ma questo script come fa a funzionare in automatico all'avvio del server?io lo devo chiamare ogni volta
 
ciao
da quello che so io ci sone dei programmi (mi sembra cronjob) che lanciano gli script ad intervalli di tempo prestabiliti, programmi (credo) che devi far risiedere nel server dove hai lo script, altrimenti devi richiamarlo periodicamente e quuando richiamato esplora il db e invia le email (quello lo fa da solo).
se decidi per timestamp basta che il campo sia
scadenza int(15)
 
e con scadenza int(15) accetta i trattini o i "\" delle date?
ciao,
no
la comodità del timestamp è che è un numero intero che rappresenta il numero di secondi da mezzanotte del 1.1.1970 ad oggi.
è comodo per gli ordinamenti i calcoli (es differenza di giorni). certo è "umanamente poco comprensibile e quindi a stampa va trasformato in data "umana"
prova quest'esempio
PHP:
<?php
$oggi=time();
echo "$oggi<br>";//vedrai un numero intero
echo "oggi è il ".date("d/m/Y,$oggi)."<br>"; //vedrai che si trasforma in data"umana"
//semplicità di calcolo
$ieri=time()-(24*60*60);//tolgo 24 ore*60minuti*60secondi
echo "$ieri<br>";//vedrai il numero di prima a cui sono sottratti 84600 secondi
echo "invece ieri era il ".date("d/m/Y,$ieri)."<br>";
?>
io quando uso le date mi sono sempre trovato meglio ad usare il timestamp come detto es negli ordinamenti
se la dat nel db è in formato "umano" bisogna, per ordinare in funzione della data, che la data sia inserite del tipo Y m d (2012 06 14 ad es.)
es se la query ..... ORDE BY data
se in formato italiano 18 02 2012 viene dopo 06 11 2012 (assurdo)

quindi comunque poi a video devi comunque trasformarla probabilmente in formato italiano (d m Y)



scusa nella fretta mi sono dimenticato degli apici

PHP:
<?php
$oggi=time();
echo "$oggi<br>";//vedrai un numero intero
echo "oggi è il ".date("d/m/Y",$oggi)."<br>"; //vedrai che si trasforma in data"umana"
//semplicità di calcolo
$ieri=time()-(24*60*60);//tolgo 24 ore*60minuti*60secondi
echo "$ieri<br>";//vedrai il numero di prima a cui sono sottratti 84600 secondi
echo "invece ieri era il ".date("d/m/Y",$ieri)."<br>";
?>
 
Ultima modifica:
grazie per il tuo script ...prima di avventurarmi nell'email...volevo fare qualcosa di più semplice...ho fatto uno script che vedeva l'orario poi io gli ho impostato un orario e mi diceva se era "gia passata" o "ancora doveva arrivare"...questo volevo automatizzarlo ogni 5 minuti...e avevo pensato a utilizzare "operazioni pianificate" di window...solo che mi fa un download del mio script e per farlo funzionare devo cliccare su "apri"...volevo saltare il passaggio del click su apri sai come far automatizzare questo passaggio...grazie
 
ciao
non ho mai usato le operazioni pianificate e quindi vado ad intuito.
es. se hai chiamato il tuo script data.php non puoi richiamarlo semplicemente (se fosse htm o html col doppio click sul nome ti si apre direttamente nel bw la pagina) ma se lo fai con un file php l'unica cosa che ottieni è quella di vedere il codice.
per vedere la pag (non il codice) devi avere un server locale e richiamare il file digitando nella barra del bw http://localhost:8080/.../data.php
quindi forse nelle operazioni pianificate devi mettere "http://localhost:8080/.../data.php"

ma forse ho detto una put....ta
 
ok...grazie lo stesso ho risolto con un programmino di scheduler...grazie ancora per l'argomento "time"
 

Discussioni simili