Verjaardagskalender
Heb een .csv gemaakt met daarin:
<geboortedatum dd-mm-jj> <naam> <team waarin deze persoon speelt>
De bedoeling is dat bij aanroepen van dat script wordt gekeken naar de welke maand het momenteel is en dat alle personen die in deze maand die zijn geboren worden getoond. Zou iemand mij willen helpen met een script? Ben zelf al wat aan het fröbelen geweest, en krijg wel iets op het scherm, maar dat is niet echt wat ik zou willen (zou het ook graag in kolommen willen formateren).
alvast bedankt voor je reactie,
Jos
Heb je toevallig de beschikking over een mysql database? Zo ja, dan zou ik daarmee werken. De .csv die je nu hebt is namelijk wel te importeren in een database.
Neen, ik moet het doen met alleen dit tekstbestand. Is dat een probleem?
Hoe ziet het er precies uit? zijn die tekens (kleinerdan en groterdan tekens) er echt, of bedoel je er mee dat daar die dingen staan...
dus is het zo:
<04-05-06> <henk> <B1>
of
04-05-06 henk B1
?
15-06-32;Jan van Sluijs;75;E1
In Quickbasic zou ik het zo aanpakken:
- lees de datum van vandaag uit.
- filter de maand er uit (m1)
- maandnummers omzetten naar tekst (02=Februari etc)
: Start
- open het csv bestand
- lees een regel (regel=regel+1)
- lees het eerste veld en haal de maand er uit (m2)
- indien maand2=maand1 toon $dag $m1 - $naam ($leeftijd - $team)
: Loop
E.e.a. in kolommen (vast aantal pixels, maximale breedte = langste naamstring + 2)
ik denk maar ff mee :-)
Jos
Ga liever uit van het eerste, tweeden en laatste veld. Wel wat rekenen dus #-)
Jos
Jos schreef op 22.10.2006 17:13:
Dit is de lay-out van het .csv bestand (aangemaakt in DOS tekst via XCL):
15-06-32;Jan van Sluijs;75;E1
In Quickbasic zou ik het zo aanpakken:
- lees de datum van vandaag uit.
- filter de maand er uit (m1)
- maandnummers omzetten naar tekst (02=Februari etc)
- open het csv bestand
: Start
- lees een regel (regel=regel+1)
- lees het eerste veld en haal de maand er uit (m2)
- indien maand2=maand1 toon $dag $m1 - $naam ($leeftijd - $team)
: Loop
- sluit het bestand
E.e.a. in kolommen (vast aantal pixels, maximale breedte = langste naamstring + 2)
ik denk maar ff mee :-)
Jos
15-06-32;Jan van Sluijs;75;E1
In Quickbasic zou ik het zo aanpakken:
- lees de datum van vandaag uit.
- filter de maand er uit (m1)
- maandnummers omzetten naar tekst (02=Februari etc)
- open het csv bestand
: Start
- lees een regel (regel=regel+1)
- lees het eerste veld en haal de maand er uit (m2)
- indien maand2=maand1 toon $dag $m1 - $naam ($leeftijd - $team)
: Loop
- sluit het bestand
E.e.a. in kolommen (vast aantal pixels, maximale breedte = langste naamstring + 2)
ik denk maar ff mee :-)
Jos
Is zoiets snel te sorteren (bestand.csv) op datum zodat er oplopend per dag de feestvarkens kunnen worden getoond?
Volgens mij is de enige sorteer functie die je kunt gebruiken sort, maar die is alleen te gebruiken bij array's.
Blanche schreef op 22.10.2006 17:50:
Hoe wil je het gesorteerd hebben?
Op datum ($dag), omdat het toch om dezelfde maand gaat. Zo kan ik wat overzichtelijker tonen:
3 oktober Jan Kaas (E1)
Piet Pluk (A1)
5 oktober Adri Janse (A1)
via MySQL zou waarschijnlijk ook kunnen (hoeft dat dan niet onder php te doen) maar die heb ik helaas niet tot mijn beschikking...
zorg dat je een loop krijgt die je 31 keer uitvoert:
for ($d=1;$d<32;$d++){ }
in die loop kijk je of iemand op die datum jarig is...
deze loop zet je weer in een andere loop die je twaalf keer uitvoert voor elke maand...
probleem is wel: je voert dus in totaal 12*31 = bijna 400 keer een vergelijking uit, en tja, dat gaat ten koste van je serversnelheid!
Vul eerst een array met alle datums die voldoen (lees: die in de overeenkomstige maand vallen). Sorteer daarna het array op dag (oplopend) en toon vervolgens het gesorteerde array. Of ben ik nu te simpel?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$data = file('bestand.csv');
foreach($data as $key => $regel)
{
$data[$key] = explode(';', $regel);
$data[$key][0] = explode('-', $data[$key][0]);
}
sort($data);
foreach($data as $values)
{
foreach($values as $value)
{
if(is_array($value))
{
$value = implode('-',$value);
}
echo $value.'<br>';
}
echo '<br>';
}
?>
$data = file('bestand.csv');
foreach($data as $key => $regel)
{
$data[$key] = explode(';', $regel);
$data[$key][0] = explode('-', $data[$key][0]);
}
sort($data);
foreach($data as $values)
{
foreach($values as $value)
{
if(is_array($value))
{
$value = implode('-',$value);
}
echo $value.'<br>';
}
echo '<br>';
}
?>
Edit:
typo
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Moet ik die twee scripts nu aan elkaar frotten of hoe kun je zoiets het beste aanpakken?
Nee, dit laatste script doet in principe alles wat je wilt. Het enige dat je er nog tussen moet werken is de opmaak die je wilt toepassen...
Zal eens kijken of ik kan ontdekken wat er voudt is gegaan...
Ehm nee, ik ben inderdaad vergeten die datum check toe te passen. Die moet er nog even in...
zal kijken of ik die er inkrijg; gelijk een leuke oefening...
<html>
<head>
<title>Verjaardagskalender</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="diversen.css" type="text/css">
</head>
<body>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$data = file('data/verjaardagen.csv');
foreach($data as $key => $regel)
{
$data[$key] = explode(';', $regel);
$data[$key][0] = explode('-', $data[$key][0]);
if($datum[1] == date('m'))
{
sort($data);
}
foreach($data as $values)
{
foreach($values as $value)
{
if(is_array($value))
{
$value = implode('-',$value);
}
// echo $value.'<br>';
echo $value.'';
}
echo '<br>';
}
?>
$data = file('data/verjaardagen.csv');
foreach($data as $key => $regel)
{
$data[$key] = explode(';', $regel);
$data[$key][0] = explode('-', $data[$key][0]);
if($datum[1] == date('m'))
{
sort($data);
}
foreach($data as $values)
{
foreach($values as $value)
{
if(is_array($value))
{
$value = implode('-',$value);
}
// echo $value.'<br>';
echo $value.'';
}
echo '<br>';
}
?>
</body>
</html>
Het enige probleem is nu dat ik een error krijg op het regelnummer onder </html>
Xit alleen nog met het stylesheet; moet ik dat ook in php definieren of hoe gaat dat in zijn werk? Zoals hij nu is, wordt het stylesheet niet gevolgd:
<html>
<head>
<title>Verjaardagskalender</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="diversen.css" type="text/css">
</head>
<body>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$data = file('./data/verjaardagen.csv');
sort($data);
echo 'Deze maand zijn jarig:'.'<br />'.'<br />';
foreach($data as $key => $regel)
{
$data[$key] = explode(';', $regel);
$datum = explode('-', $data[$key][0]);
if($datum[1] == date('m'))
{
// echo $data[$key][1].' is jarig op '.$datum[0].'-'.$datum[1].'<br />';
echo '<b>'.$datum[0].'</b> ';
echo $datum[l].' ' ;
echo $data[$key][1].' ';
echo '(';
echo $data[$key][2].' ';
echo ' jaar, ';
echo $data[$key][3].')';
echo '<br />';
}
}
?>
$data = file('./data/verjaardagen.csv');
sort($data);
echo 'Deze maand zijn jarig:'.'<br />'.'<br />';
foreach($data as $key => $regel)
{
$data[$key] = explode(';', $regel);
$datum = explode('-', $data[$key][0]);
if($datum[1] == date('m'))
{
// echo $data[$key][1].' is jarig op '.$datum[0].'-'.$datum[1].'<br />';
echo '<b>'.$datum[0].'</b> ';
echo $datum[l].' ' ;
echo $data[$key][1].' ';
echo '(';
echo $data[$key][2].' ';
echo ' jaar, ';
echo $data[$key][3].')';
echo '<br />';
}
}
?>
</body>
</html>
-- knip --
bedankt,
Jos