| Autor | Zpráva | ||
|---|---|---|---|
| mackopu Profil |
#1 · Zasláno: 26. 6. 2009, 12:38:15
Především ve firemních a skupinových webech se hodí použítí aplikace, která členům komunity rozesílá e-mailem upozornění na to, že dnes má jubileum ten či onen. Pokusil jsem se s uspokojivým výsledkem napsat skript, který jubileum indikuje, v případě narozenin spočítá věk a z e-mailových adres, na které upozornění odesílá, odstraní e-mail jubilanta. Ošetřuje také situaci, kdy má osoba svátek a narozeniny současně.
Pole zájmové skupiny může být zadáno napevno, ale lze jej po malé úpravě načítat i z databáze. Skript lze spouštět manuálně z komunitní administrace, na pozadí úvodní stránky hojně navštěvovaného webu, ale samozřejmě nejspolehlivější je CRON, nastavený na každodenní spouštění v brzkých ranních hodinách. Přivítám náměty na vylepšení nebo optimalizaci kódu. <?php
function UrciVek($narozen)
{
list($den,$mesic,$rok)=explode(".",$narozen);
$vek = strVal((Time()-mktime(0,0,0,$mesic,$den,$rok))/31536000);
$vek = Floor($vek);
return $vek;
};
$lidi[] = "13.10.;11.03.1973;Renata Kosá;Renata@seznam.cz";
$lidi[] = "07.03.;23.04.1963;Tomáš Rána;rana@seznam.cz";
$lidi[] = "17.12.;29.05.1965;Daniel Suchý;suchy@seznam.cz";
$lidi[] = "28.06.;23.07.1969;Luboš Andrle;infoandrle@seznam.cz";
$lidi[] = "29.06.;21.09.1960;Petr Kučera;petr.kucera@seznam.cz";
$lidi[] = "21.03.;06.11.1966;Radek Novotnyk;studio-novotny@seznam.cz";
$dnes = Date("d.m.");
for($i=0; $i<count($lidi); $i++) {
list($svatek,$narozeniny,$jmeno,$email) = explode(";",$lidi[$i]);
if($dnes == $svatek) { // pokud má svátek
$coma = "svátek";
$hobluj_1 = true;
}
if($dnes == substr($narozeniny,0,6)) { // pokud má narozeniny
$vek = UrciVek($narozeniny); // spočítám věk
$coma = "narozeniny (".$vek." let)";
$hobluj_2 = true;
}
if($hobluj_1 && $hobluj_2) { // pokud má narozeniny i svátek současně
$coma = "svátek a narozeniny (".$vek." let)";
}
if($hobluj_1 || $hobluj_2) { // pokud má narozeniny nebo svátek
// načtu maily do pole
for($x=0; $x<count($lidi); $x++) {
list($svatek,$narozeniny,$jmeno,$email) = explode(";",$lidi[$x]);
$maily[] = $email;
}
array_splice($maily, $i, 1); // odstraním email osoby s jubileem
$komu = implode(", ",$maily); // rozdělím pole mailů čárkou a mezerou pro odeslání
$headers = "From: Nazev komunity <info@komunita.cz>\n";
$headers .= "Content-Type: text/plain; charset=windows-1250\n";
$predmet = "Nazev komunity - Automaticke upozorneni na jubileum";
$body = "Dnes má $coma $jmeno !!!\n";
$body .= "\n\nTato zpráva je generována automaticky.";
@mail($komu, $predmet, $body, $headers);
}
// vynulování proměnných
$coma = "";
$hobluj_1 = false;
$hobluj_2 = false;
$komu = "";
$headers = "";
$predmet = "";
$body = "";
unset($maily); // vyprázdním pole mailů
}
?> |
||
| petr 6 Profil |
#2 · Zasláno: 26. 6. 2009, 13:55:57 · Upravil/a: petr 6
5. a 6. radek bych zkratil na
$vek=date("Y")-$rok |
||
| mackopu Profil |
#3 · Zasláno: 26. 6. 2009, 14:04:00
Děkuji za reakci. Máš pravdu. Přesto jsem použil už hotovou univerzální funci, která zjišťuje věk v kterémkoliv okamžiku. Zde je trochu nadbytečná, ale může být inspirací pro někoho, kdo zvažuje její použití i v jiných případech.
|
||
|
Časová prodleva: 12 měsíců
|
|||
| kukweb Profil |
#4 · Zasláno: 14. 6. 2010, 21:41:25
Nebylo by mozne udelat upravu tohoto kodu s nacitanim z databaze. Jinak dekuji, neco podobneho jsem dlouho hledal.
|
||
| tiso Profil |
mackopu: ten skript je neefektívny:
- posiela samostatný mail pre každého oslávenca - má zložitost NxN miesto 2xN - zbytočne ukladá duplicitné dáta o tom kto má meniny Vhodnejšie by bolo riešenie s databázou. edit: teraz pozerámm>m že je to staré vlákno. Moderátor Chamurappi: Tentokrát to asi moc nevadí…
|
||
| mackopu Profil |
#6 · Zasláno: 15. 6. 2010, 09:20:48
kukweb:
Řádky 10 - 15 nahradíš tímto: $result = mysql_query("SELECT svatek, narozeniny, jmeno, prijmeni, email FROM tvoje_tabulka");
while ($zaznam = mysql_fetch_array($result)) {
$lidi[] = $zaznam["svatek"].";".$zaznam["narozeniny"].";".$zaznam["jmeno"]." ".$zaznam["prijmeni"].";".$zaznam["email"];
}tiso: Nepředpokládám nasazení pro řádově stovky či tisíce e-mailů, kde by se neefektivnost teprve projevila. To už by zavánělo spamem. |
||
|
Časová prodleva: 3 dny
|
|||
| kukweb Profil |
#7 · Zasláno: 18. 6. 2010, 18:25:31
Diky za upravu. Nakonec jsem nasel neco na netu a pouziju cast tveho kodu. Aby vse pracovalo, jak ja chci.
phpbirthday |
||
|
Časová prodleva: 16 let
|
|||
0