Autor Zpráva
anonymous
Profil *
Dobry den,
mam takovyto skript, ktery spocita urcitou hodnotu a v zavisloti na vysledku bud posle informacni e-mail nebo ne.

<?

include('connect.php');

$dotaz=MySQL_Query("SELECT * FROM presahy");
$zprava="Dosáhli jste 90% z Vašeho datového limitu!";

while($vysledek=MySQL_Fetch_Array($dotaz)):
$pocet=($vysledek[data_celkem]/$vysledek[limity])*100;
if ($pocet>=90):
//echo "$pocet <br>";
mail("$vysledek[email]", "Upozornění - datový limit", $zprava,
"From: jmeno@domena.tld\nReply-To: jmeno@domena.tld\nX-Mailer: PHP/" . phpversion());
endif;
endwhile;
?>


Tento skript budu pravidelne spoustet cronem kazdy den, jde o to ze potrebuju aby se na kazdou adresu uvedenou v databazi mail poslal maximalne jednou za mesic. Jak toho docilit?
Napadlo me ukladat vsechny adresy na ktere se mail odesle do souboru a vzdy pred odeslanim mailu zkontrolovat jestli ten soubor obsahuje danou adresu. Co tomu rikate? Slo by to tak? Nebo nekoho napadlo lepsi reseni?
Dekuji za odpovedi
igamenir
Profil
Já bych si ukládal do databáze, kdy jsem to odeslal a pak si přímo v SQL příkazu vypsal jenom ty, co nedostali mail dýl než měsíc.

Také bych tu podmínku na počet převed rovnou do příkazu a vypsal si jenom ty, kterým mám mail poslat, a stejnou podmínku pak použít pro update, kde jim nastavím ten datum odeslání.
mackopu
Profil
1. Doplň do databázové tabulky presahy další sloupec s názvem např. datum_odeslani_zpravy jako typ DATE (rrrr-mm-dd).
2. Rozšiř skript:
<?

include('connect.php');

$dotaz=MySQL_Query("SELECT * FROM presahy");
$zprava="Dosáhli jste 90% z Vašeho datového limitu!";

$obdobi = Date("Y-m"); // (např. 2005-09)

while($vysledek=MySQL_Fetch_Array($dotaz)):
$pocet=($vysledek[data_celkem]/$vysledek[limity])*100;
if ($pocet>=90 && SubStr($vysledek[datum_odeslani_zpravy], 0, 7) != $obdobi): // tady je taky změna
//echo "$pocet <br>";
mail("$vysledek[email]", "Upozornění - datový limit", $zprava,
"From: jmeno@domena.tld\nReply-To: jmeno@domena.tld\nX-Mailer: PHP/" . phpversion());
// update řádku tabulky
$sql = "UPDATE presahy SET datum_odeslani_zpravy = 'NOW()' WHERE id = '$vysledek[id]'";
mysql_query($sql); // tady netuším, jak máš udělané spojení, tak si to přizpůsob ;-)
endif;
endwhile;
?>
anonymous
Profil *
Diky za skvele rady, vyresil sem to bez datumu se sloupcem "odeslano", kde sou dve moznosti "y" a "n". Je to stejny princip jako ste navrhovali. Mockrat dekuji!!
mackopu
Profil
Promiň že tě srážím v rozletu, ale obávám se, že takto ti nebude fungovat podmínka odesílání mailů jednou za měsíc. Tvé řešení se sloupcem odeslano má teď za následek pouze to, že pokud už byl někdy email odeslán, tak už se neodešle NIKDY v budoucnu. A to - pokud jsem zadání správně pochopil - není tvým záměrem.
Anonymní
Profil *
samozrejme pokazde prvniho se mi vsechny zaznamy zmeni na "n", to jsem zajistil...
Toto téma je uzamčeno. Odpověď nelze zaslat.

0