Hej!
Jeg er i gang med at lave en hjemmeside for nogle online-gamere og i
den forbindelse, er jeg stødt på et "lille" problem.
Ejeren af siden vil gerne have vist en fejring af "jubilæer" i klanen
på siden. Ikke noget problem.
Problemet består i, at han gerne vil have det vist på selve dagen og en
uge frem.
Det er "intervallet" af jubilæer, der knækker mig: 1, 3, 6, 9 og 18
mdr. samt årligt.
Havde det kun været årligt ville jeg nok selv kunne løse det, men jeg
har fået stirret mig blind.
Min php-kode til funktionen ser således ud:
<CODE>
function test_celebrate_medlem() {
global $connect;
// HENT ALLE MEDLEMMER MED UNDTAGELSE AF DUMMIES
$res = $connect->query("SELECT * FROM medlemmer WHERE NOT spillerID
REGEXP '^Dummy[0-9]$'");
if(!$res) {
die("Noget gik galt.<br />" . mysqli_error($connect));
}
$i = 1;
while($data = $res->fetch_assoc()) {
// MILEPÆLE DER SKAL FEJRES - I MÅNEDER.
$jubi = array('1', '3', '6', '9', '18');
// DAGS DATO HENTES OG OPDELES TIL VIDERE BEREGNING
$DD = strtotime(date("d-m-Y"));
$dagDD = date("j");
$mdrDD = date("n");
$aarDD = date("Y");
$iDag = date($dagDD.'/'.$mdrDD);
// DATAUDTRÆK FRA DATABASEN
$spillerID = $data['spillerID'];
$klan = $data['klan'];
$indmeldt = $data['indmeldt']; // TIMESTAMP
// OPDELING AF INDMELDSESDATO TIL BEREGNINGER.
$indArr = explode("-", date('j-n-Y', $indmeldt));
$indDag = $indArr[0];
$indMdr = $indArr[1];
$indAar = $indArr[2];
// BEREGNING AF ANTAL MÅNEDER
$jubi_mdr = $mdrDD - $indMdr;
// BEREGNING AF ANTAL ÅR
$jubi_aar = $aarDD - $indAar;
// VARIABLE TIL JUBILÆUMS-TEKST
$msg = "";
// STYLING AF OUTPUT
$class = ($i < 3) ? "col50" : "col1-3";
// DAGS DATO TJEKKES OP MOD INDMELDELSESDATOEN
if($dagDD == $indDag) { // HVIS SAMME DAG
if($mdrDD == $indMdr) { // HVIS SAMME MÅNED
if($aarDD == $indAar) { // HVIS SAMME ÅR = 0 DAGE I KLANEN
continue; // SPRING VIDERE TIL NÆSTE MEDLEM
} elseif($jubi_aar > 0) { // ÅRSDAG FOR MEDLEMSKAB - UDSKRIV
LYKØNSKNING
$msg .= "<div class='".$class." celebox'>
<h2><span class='celebrate'>T I L L Y K K E</span><br />
til <span class='celebrate'>".$spillerID."</span> med<br />
<span class='celebrate'>".$jubi_aar." års</span> medlemskab i
<span class='celebrate'>".$klan."</span>!</h2>
</div>";
}
} else { // ER DER EN MÅNEDSDAG, DER SKAL FEJRES?
// Hvis antallet af måneder er negativt, skal der lægges X år *
12 mdr til.
if($jubi_mdr < 0 && $jubi_aar > 0) {
$jubi_mdr = ($jubi_aar * 12) + $jubi_mdr;
}
// VARIABLE TIL KORREKT BENÆVNELSE
$mdrExt = ($jubi_mdr != 1) ? "måneders" : "måneds";
// TJEK OM ANTALLET AF MDR. ER EN AF DE DEFINEREDE FEJRINGER
if(in_array($jubi_mdr, $jubi)) {
// HVIS ANTAL MDR. = 18 UDSKRIVER VI 1½ ÅRS FREM FOR 18
MÅNEDERS
if($jubi_mdr == 18) {
$jubi_mdr = "1½";
$mdrExt = "års";
}
// UDSKRIV MÅNEDS-LYKØNSKNING
$msg .= "<div class='".$class." celebox'>
<h2><span class='celebrate'>T I L L Y K K E</span><br />
til <span class='celebrate'>".$spillerID."</span> med<br />
<span class='celebrate'>".$jubi_mdr." ".$mdrExt."</span>
medlemskab i <span class='celebrate'>".$klan."</span>!</h2>
</div>";
}
}
}
echo $msg;
$i++;
}
}
</CODE>
Det fungerer glimrende på selve dagen, som I kan se her -
http://1dpb.dk/?side=test - men jeg kan ikke gennemskue, hvordan jeg
får min "mission" til at lykkes...
Indmeldelsestidspunktet ($indmeldt) indsættes som timestamp ved hjælp
af strtotime() funktionen, hvis det er en hjælp.
Alle konstruktive indspark (også til evt. optimering af ovenstående
kode) modtages med taknemmelighed. :-)
--
Med venlig hilsen
Dennis Munding