/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Find og erstat dele af URL'er på bestemte ~
Fra : Ace


Dato : 10-02-11 14:55

Hejsa

Er det muligt at erstatte en del af en url (som optræder flere
steder på en side) med noget andet, på bestemte datoer?

ILLUSTRATION:
<html>
<head>
<script type="text/javascript">
function chrisWeeklyEveningSubmit() {
myform = document.chrisEveningForm;
myform.target = "chrisStatsWeekly";
myform.action =
"period/2011/02.02.2011-01.03.2011/09.02.2011-15.02.2011/chris/ch
risStats.php";
myform.submit();
return false;}
function chrisMonthlyEveningSubmit() {
myform = document.chrisEveningForm;
myform.target = "chrisStatsMonthly";
myform.action = "period/2011/02.02.2011-01.03.2011/
chris/chrisStats.php";
myform.submit();
return false;}
</script>
</head>
<body>
<form name="chrisEveningForm"
action="http://clubace.dk/bestsheller/period/2011/02.02.2011-01.0
3.2011/09.02.2011-15.02.2011/chris/chrisStats.php" method="post">
<input type="text" name="chrisWeeklyScore">
<input type="button" value="Gem"
onClick="chrisWeeklyEveningSubmit();
chrisMonthlyEveningSubmit();"></form>

<iframe name="chrisStatsWeekly"
src="http://clubace.dk/bestsheller/period/2011/02.02.2011-01.03.2
011/09.02.2011-15.02.2011/chris/chrisStats.php"></iframe>

<iframe name="chrisStatsMonthly"
src="http://clubace.dk/bestsheller/period/2011/02.02.2011-01.03.2
011/chris/chrisStats.php"></iframe>
</body>
</html>

Som det ses gør jeg brug af et script der tillader mig at sende
data fra én <form> til to <iframe> target.

Hver onsdag skal en del af url'erne som behandler uge-dataen
udskiftes. Delene der skal erstattes giver næsten sig selv,
nemlig ugeperiode-delen ("09.02.2011-15.02.2011"). I dette
tilfælde skulle erstatningen blive "16.02.2011-22.02.2011".
Én gang om måneden skal det samme ligeledes ske - denne gang bare
på alle for url'erne på hele siden. Det der skal ændres da, er
månedsperiode-delen ("02.02.2011-01.03.2011"), hvilket i dette
tilfælde skulle blive "02.03.2011-29.03.2011".

Hagen ved dette er selvfølgelig at også url'erne, som befinder
sig ovenstående javascript, også skal erstattes på samme måde.

Umiddelbart havde jeg forestillet mig noget i retning af, at man
finde dags dato, og laver en array() hvori man har ståedende de
fremtidige datoer på hvornår erstatningerne skal ske, med
tilhørende string som indeholder det som der skal erstattes med.
Dernæst skal alle de eksisterende url'er på hele siden findes, og
have udspecificeret hvad i url'erne der præcist skal erstattes og
hvad der skal erstattes med.
Afslutningesvis tænker jeg, at men så sammenligner dags dato med
datoerne i array'en. Hvis datoerne stemmer overens, skal
erstatningen foretages. Ellers skal der ikke erstattes noget.

Jeg ved overhovedet ikke om noget af alt det her kan lade sig
gøre. Jeg ved i hvert fald ikke hvordan et sådan script ville se
ud. Jeg håber derfor at der er nogen, klogere end jeg, som har en
idé om hvordan scriptet kunne se ud.

På forhånd tak.


Venligst
Ace

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Birger Sørensen (10-02-2011)
Kommentar
Fra : Birger Sørensen


Dato : 10-02-11 15:41

Ace har bragt dette til os:
> Hejsa
>
> Er det muligt at erstatte en del af en url (som optræder flere
> steder på en side) med noget andet, på bestemte datoer?
>
> ILLUSTRATION:
> <html>
> <head>
> <script type="text/javascript">
> function chrisWeeklyEveningSubmit() {
> myform = document.chrisEveningForm;
> myform.target = "chrisStatsWeekly";
> myform.action =
> "period/2011/02.02.2011-01.03.2011/09.02.2011-15.02.2011/chris/ch
> risStats.php";
> myform.submit();
> return false;}
> function chrisMonthlyEveningSubmit() {
> myform = document.chrisEveningForm;
> myform.target = "chrisStatsMonthly";
> myform.action = "period/2011/02.02.2011-01.03.2011/
> chris/chrisStats.php";
> myform.submit();
> return false;}
> </script>
> </head>
> <body>
> <form name="chrisEveningForm"
> action="http://clubace.dk/bestsheller/period/2011/02.02.2011-01.0
> 3.2011/09.02.2011-15.02.2011/chris/chrisStats.php" method="post">
> <input type="text" name="chrisWeeklyScore">
> <input type="button" value="Gem"
> onClick="chrisWeeklyEveningSubmit();
> chrisMonthlyEveningSubmit();"></form>
>
> <iframe name="chrisStatsWeekly"
> src="http://clubace.dk/bestsheller/period/2011/02.02.2011-01.03.2
> 011/09.02.2011-15.02.2011/chris/chrisStats.php"></iframe>
>
> <iframe name="chrisStatsMonthly"
> src="http://clubace.dk/bestsheller/period/2011/02.02.2011-01.03.2
> 011/chris/chrisStats.php"></iframe>
> </body>
> </html>
>
> Som det ses gør jeg brug af et script der tillader mig at sende
> data fra én <form> til to <iframe> target.
>
> Hver onsdag skal en del af url'erne som behandler uge-dataen
> udskiftes. Delene der skal erstattes giver næsten sig selv,
> nemlig ugeperiode-delen ("09.02.2011-15.02.2011"). I dette
> tilfælde skulle erstatningen blive "16.02.2011-22.02.2011".
> Én gang om måneden skal det samme ligeledes ske - denne gang bare
> på alle for url'erne på hele siden. Det der skal ændres da, er
> månedsperiode-delen ("02.02.2011-01.03.2011"), hvilket i dette
> tilfælde skulle blive "02.03.2011-29.03.2011".
>
> Hagen ved dette er selvfølgelig at også url'erne, som befinder
> sig ovenstående javascript, også skal erstattes på samme måde.
>
> Umiddelbart havde jeg forestillet mig noget i retning af, at man
> finde dags dato, og laver en array() hvori man har ståedende de
> fremtidige datoer på hvornår erstatningerne skal ske, med
> tilhørende string som indeholder det som der skal erstattes med.
> Dernæst skal alle de eksisterende url'er på hele siden findes, og
> have udspecificeret hvad i url'erne der præcist skal erstattes og
> hvad der skal erstattes med.
> Afslutningesvis tænker jeg, at men så sammenligner dags dato med
> datoerne i array'en. Hvis datoerne stemmer overens, skal
> erstatningen foretages. Ellers skal der ikke erstattes noget.
>
> Jeg ved overhovedet ikke om noget af alt det her kan lade sig
> gøre. Jeg ved i hvert fald ikke hvordan et sådan script ville se
> ud. Jeg håber derfor at der er nogen, klogere end jeg, som har en
> idé om hvordan scriptet kunne se ud.
>
> På forhånd tak.
>
>
> Venligst
> Ace

Det virker vældig kompliceret, og jeg har svært ved overblikket af hvad
du forsøger...
Men umiddelbart, så har du en form, der skifter indholdet af to
iframes, afhængigt af ugedag/måned.
Jeg ville nok bruge noget AJAX i stedet, og lade det skifte indholdet i
div'erne.
Jeg tror også jeg ville lade PHP finde ud af hvilken dag det er, og
hvilke data der skal vises. Serveren ved lige så godt som brugerens PC,
hvilken dato det er. Så du kan faktisk nøjes med eet script, der selv
finder de rigtige data - hvis du ellers gemmer dem på en fornuftig
måde.
Jeg har lidt indtryk af, at du taster dem i tekst-filer, og gemmer dem
ugevis, eller månedsvis - i separate foldere?
Umiddelbart ville jeg bruge en database til det. Det kunne også gøre
indtastningen enklere - og måske ligefrem lette arbejdet, når du engang
bliver nødt til at fyre en eller ansætte en person mere...

En lidt mere udførlig forklaring, er nok nødvendig - eller link til
noget illustrativt.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Ace (10-02-2011)
Kommentar
Fra : Ace


Dato : 10-02-11 16:06

Ace tilføjede:

> Umiddelbart havde jeg forestillet mig noget i retning af, at man
> finde dags dato, og laver en array() hvori man har ståedende de
> fremtidige datoer på hvornår erstatningerne skal ske, med
> tilhørende string som indeholder det som der skal erstattes med.
> Dernæst skal alle de eksisterende url'er på hele siden findes, og
> have udspecificeret hvad i url'erne der præcist skal erstattes og
> hvad der skal erstattes med.
> Afslutningesvis tænker jeg, at men så sammenligner dags dato med
> datoerne i array'en. Hvis datoerne stemmer overens, skal
> erstatningen foretages. Ellers skal der ikke erstattes noget.

Er det her helt hen i vejret?

<?php
$dagsDato = Date("j.m.Y");
if (dagsDato = "09.02.2011") {
$ugePeriode = "09.02.2011-15.02.2011";
}
if (dagsDato = "16.02.2011") {
$ugePeriode = "16.02.2011-22.02.2011";
}
if (dagsDato = "23.02.2011") {
$ugePeriode = "23.02.2011-01.03.2011";
}
$data = "weekPeriod.txt";
if ($ugePeriode) {
$ugePeriode = "$ugePeriode";
$comfile = fopen ($data, "w");
fwrite ($comfile, $ugePeriode);
fclose ($comfile);}
?>

... og så havde jeg tænkt mig...

<form action="period/2011/02.02.2011-01.03.2011/<?php include
('weekPeriod.txt'); ?>/chris/chrisStats.php" etc.>

Er jeg overhovedet på rette spor?


/Ace

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Ace (10-02-2011)
Kommentar
Fra : Ace


Dato : 10-02-11 17:57

Ace skrev:

> Er det her helt hen i vejret?
>
> <?php
> $dagsDato = Date("j.m.Y");
> if (dagsDato = "09.02.2011") {
> $ugePeriode = "09.02.2011-15.02.2011";
> }
> if (dagsDato = "16.02.2011") {
> $ugePeriode = "16.02.2011-22.02.2011";
> }
> if (dagsDato = "23.02.2011") {
> $ugePeriode = "23.02.2011-01.03.2011";
> }
> $data = "weekPeriod.txt";
> if ($ugePeriode) {
> $ugePeriode = "$ugePeriode";
> $comfile = fopen ($data, "w");
> fwrite ($comfile, $ugePeriode);
> fclose ($comfile);}
> ?>
>
> ... og så havde jeg tænkt mig...
>
> <form action="period/2011/02.02.2011-01.03.2011/<?php include
> ('weekPeriod.txt'); ?>/chris/chrisStats.php" etc.>
>
> Er jeg overhovedet på rette spor?


Hov, fandt lige et par fejl og lavede lige et par tilføjelser...

<?php
$toDay = Date("j.m.Y");
if ($toDay > "08.02.2011") {
$weekPeriod = "09.02.2011-15.02.2011";
}
if ($toDay > "15.02.2011") {
$weekPeriod = "16.02.2011-22.02.2011";
}
if ($toDay > "22.02.2011") {
$weekPeriod = "23.02.2011-01.03.2011";
}
if ($toDay > "01.03.2011") {
$weekPeriod = "02.03.2011-08.03.2011";
}
$data = "weekPeriod.txt";
if ($weekPeriod) {
$weekPeriod = "$weekPeriod";
$comfile = fopen ($data, "w");
fwrite ($comfile, $weekPeriod);
fclose ($comfile);} ?>
<?php
$toDay = Date("j.m.Y");
if ($toDay > "01.02.2011") {
$monthPeriod = "02.02.2011-01.03.2011";
}
if ($toDay > "01.03.2011") {
$monthPeriod = "02.03.2011-29.03.2011";
}
if ($toDay > "29.03.2011") {
$monthPeriod = "30.03.2011-26.04.2011";
}
if ($toDay > "26.04.2011") {
$monthPeriod = "27.04.2011-24.05.2011";
}
$data = "monthPeriod.txt";
if ($monthPeriod) {
$monthPeriod = "$monthPeriod";
$comfile = fopen ($data, "w");
fwrite ($comfile, $monthPeriod);
fclose ($comfile);} ?>

action="period/2011/<?php include('monthPeriod.txt') ?>/<?php
include('weekPeriod.txt') ?>/chris/chrisStats.php";"

Umiddelbart tror jeg at jeg er inde på noget af "det rigtige". Men af
en eller anden grund bliver reultatet af ovestående:

action="period/2011/02.03.2011-29.03.2011/02.03.2011-08.03.2011/chris/c
hrisStats.php";"

Hvilket ikke er rigtigt da det i skrivende stund er d. 10.02.2011, så
resultatet skulle self. se således ud:

action="period/2011/02.02.2011-01.03.2011/09.02.2011-15.02.2011/chris/c
hrisStats.php";"

Håber at der nogen som kan se hvad det er at jeg gør forkert, og evt.
kender en bedre måde at gøre det her på :)


/Ace



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Birger Sørensen (10-02-2011)
Kommentar
Fra : Birger Sørensen


Dato : 10-02-11 18:06

Følgende er skrevet af Ace:
> Ace skrev:
> En masse kode...

Jeg mener at date fiaktisk kan returnere ugedagen.
Hvis det er mandag i dag (eller hvilken dag det nu var) skal den altså
bare returnere en periode fra i dag og 7 dage frem - ellers tælle
baglæns til mandag, og returnere 7 dage derfra.
Så er alle dine if'er overflødige, og scriptet kan anvendes fra nu og
til du eller din efterfølger bliver træt af det...

Men ellers ser det vist nogenlunde fornuftigt ud.
Selvom jeg vist stadig ikke har fattet hvor du får data fra...

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Ace (10-02-2011)
Kommentar
Fra : Ace


Dato : 10-02-11 19:02

Birger Sørensen kom med denne øjnåbner:

> Jeg mener at date fiaktisk kan returnere ugedagen.
> Hvis det er mandag i dag (eller hvilken dag det nu var) skal den altså
> bare returnere en periode fra i dag og 7 dage frem - ellers tælle
> baglæns til mandag, og returnere 7 dage derfra.
> Så er alle dine if'er overflødige, og scriptet kan anvendes fra nu og
> til du eller din efterfølger bliver træt af det...

Nice :) Hvis det ikke er for meget besvær, ville du så have noget i mod at
vise mig hvordan scriptet skal ændres for at gøre brug af denne
date()-egenskab?

> Men ellers ser det vist nogenlunde fornuftigt ud.
> Selvom jeg vist stadig ikke har fattet hvor du får data fra...

Den data som sendes via formularerne, har som sådan ikke noget at gøre med
det her php-script som jeg har gang i nu :) Dette er udelukkende så jeg
(forhåbentlig) er fri for manuelt, at skulle ændre på formularernes
action-URL i kildekoden en gang om ugen og en gang om måneden, når dataen
skal sendes til nye filer.
For som du rigtig nok formodede, så forgår al datalagringen i mapper, i
stedet for en database. Dette er dog blot en midlertidig løsning, indtil
jeg får sat mig ordenlig ind i opsætning og brug af databaser. Men indtil
da må jeg gøre med hvad mine evner rækker til ;)

Men ellers har du forstået hvad det er at jeg prøver på med dette
php-script?


/Ace

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Birger Sørensen (10-02-2011)
Kommentar
Fra : Birger Sørensen


Dato : 10-02-11 20:30

Ace kom med følgende:
8X
> Nice :) Hvis det ikke er for meget besvær, ville du så have noget i mod at
> vise mig hvordan scriptet skal ændres for at gøre brug af denne
> date()-egenskab?

Skal se på det - men ikke før i morgen...

8X

> Men ellers har du forstået hvad det er at jeg prøver på med dette
> php-script?

Det handler om et mappenavn til form/iframes, i form af datoer for
uger.
Også om månedsmapper?

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Ace (11-02-2011)
Kommentar
Fra : Ace


Dato : 11-02-11 07:51

Birger Sørensen skrev:

> Skal se på det - men ikke før i morgen...

Tusind tak Birger :)

> Det handler om et mappenavn til form/iframes, i form af datoer for
> uger.
> Også om månedsmapper?

Lige præcis :) Mapperne ér lavet, så der er til ca. 2 år udi fremtiden, så det
er "bare" action-url'erne til form'ne der skal skal ændres hver onsdag og
src-url'erne til iframe'erne der skal ændres hver fjerde onsdag.


/Ace

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Birger Sørensen (11-02-2011)
Kommentar
Fra : Birger Sørensen


Dato : 11-02-11 12:31

Ace skrev den 11-02-2011:
> Birger Sørensen skrev:
>
>> Skal se på det - men ikke før i morgen...
>
> Tusind tak Birger :)
>
>> Det handler om et mappenavn til form/iframes, i form af datoer for
>> uger.
>> Også om månedsmapper?
>
> Lige præcis :) Mapperne ér lavet, så der er til ca. 2 år udi fremtiden, så
> det er "bare" action-url'erne til form'ne der skal skal ændres hver onsdag og
> src-url'erne til iframe'erne der skal ændres hver fjerde onsdag.
>
>
> /Ace

Prøv noget i denne retning

date_default_timezone_set( 'Europe/Copenhagen');
$today = getdate();   // $today[ 'wday'] = ugedag: onsdag = 3
$d_corr = ( $today[ 'wday'] < 3) ? ( $today[ 'wday]'+4) : ( $today[
'wday']-3);
// correktioner for ugedag - hvis før onsdag dagnummer+4, hvis onsdag
eller efter dagnummer-3
$first_day = mkdate( 0, 0, 0, $today[ 'mon'], $today[ 'mday'] -
$d_corr, $today[ 'year']); // ugestart
$last_day = mkdate( 0, 0, 0, $today[ 'mon'], $today[ 'mday'] - $d_corr
+ 7, $today[ 'year']); // ugeslut
$wk_path = date( 'd.m.Y', $first_day).'-'.date( 'd.m.Y', $last_day);

$st_dt = getdate( $first_day);
$first_mnd = FirstOns( $st_dt[ 'mon'], $st_dt[ 'year']);
$last_mnd = FirstOns( $st_dt[ 'mon']+1, $st_dt[ 'year']);
$mnd_path = date( 'd.m.Y', $first_mnd).'-'.date( 'd.m.Y', $last_mnd);

function FirstOns( $md, $yr) {   // finder første onsdag i måneden
   $month = getdate( mkdate( 0, 0, 0, $md, 1, $yr));   // første dag i
aktuel måned
   $f_onsdag = ( $month[ 'wday'] <= 3) ? 4-$month[ 'wday'] : 11-$month[
'wday'];
   return mkdate( 0, 0, 0, $md, $f_onsdag, $yr);
   }

Det ser lidt kryptisk ud her - copy/paste til din editor, så skulle det
gerne stå læsbart.
Der er ikke testet, så der kan være slåfejl, men funktionelt skulle det
være OK.
Finder sidste onsdag før aktuel dato, ogbruger den til at sætte
uge-stien.
Bruger så den første dato til at bestemme måneden - finder så første
onsdag i den og den næste måned, som derefter bruges til måneds-sti.
Jeg ved ikke om det lige bliver skift hver fjerde onsdag. Men det er
vist nogenlunde det du er på jagt efter.
$wk_path og $mnd_path er de stier du er efter - du kan selv finde ud af
hvordan de skal bruges (du gemmer dem i filer..)

Skal du have yderligere forklaring, så spørg

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Ace (12-02-2011)
Kommentar
Fra : Ace


Dato : 12-02-11 12:10

Birger Sørensen skrev:

> Det ser lidt kryptisk ud her - copy/paste til din editor, så skulle det
> gerne stå læsbart.
> Der er ikke testet, så der kan være slåfejl, men funktionelt skulle det
> være OK.
> Finder sidste onsdag før aktuel dato, ogbruger den til at sætte
> uge-stien.
> Bruger så den første dato til at bestemme måneden - finder så første
> onsdag i den og den næste måned, som derefter bruges til måneds-sti.
> Jeg ved ikke om det lige bliver skift hver fjerde onsdag. Men det er
> vist nogenlunde det du er på jagt efter.
> $wk_path og $mnd_path er de stier du er efter - du kan selv finde ud af
> hvordan de skal bruges (du gemmer dem i filer..)
>
> Skal du have yderligere forklaring, så spørg

Kanon Birger! :) Funktionelt er din idé lige i vinkel ;) Jeg har dog nu siddet
siden i går og prøvet på at få scriptet til at afvikle korrekt. Jeg troede på et
tidspunkt lige at jeg have spottet fejlen (et ' var sneget sig ind et forkert
sted), men uden held... Scriptet har jeg placeret øverst i head-sektionen på min
side, men når jeg lige nu åbner siden i min browser, er siden tom, og ved et kig
i kildekoden er <html><head> det eneste der der bliver afviklet :S

Ved ikke om du har mulighed for at lave en hurtig test af scriptet for at se om
du oplever samme som jeg?

Med hensyn til $wk_path og $mnd_path vil jeg meget gerne have sendt til
henholdsvis weekPeriod.txt og monthPeriod.txt - men jeg kan overhovedet ikke
huske hvordan man sender til to forskellige txt-filer i ét PHP-script :S


/Ace

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Birger Sørensen (12-02-2011)
Kommentar
Fra : Birger Sørensen


Dato : 12-02-11 16:22

Ace tastede følgende:
8X
> Kanon Birger! :) Funktionelt er din idé lige i vinkel ;) Jeg har dog nu
> siddet siden i går og prøvet på at få scriptet til at afvikle korrekt. Jeg
> troede på et tidspunkt lige at jeg have spottet fejlen (et ' var sneget sig
> ind et forkert sted), men uden held... Scriptet har jeg placeret øverst i
> head-sektionen på min side, men når jeg lige nu åbner siden i min browser, er
> siden tom, og ved et kig i kildekoden er <html><head> det eneste der der
> bliver afviklet :S
>
> Ved ikke om du har mulighed for at lave en hurtig test af scriptet for at se
> om du oplever samme som jeg?
>
> Med hensyn til $wk_path og $mnd_path vil jeg meget gerne have sendt til
> henholdsvis weekPeriod.txt og monthPeriod.txt - men jeg kan overhovedet ikke
> huske hvordan man sender til to forskellige txt-filer i ét PHP-script :S

Jeg har lige været omkring Køge Sygehus i et døgns tid, deraf det sene
svar.
mkdate skal hedde mktime...

http://bbsorensen.com/test/weektest/
du kan test andre datoer, ved at tilføje ?d=D&m=M&y=YYYY
hvor D, Mog YYY erstattes med respektive værdier (du kan også udelade
dem der ikke er aktuelle - f.eks. ?D=24&m=4 svarer til 24/4-2011
og det ser ud til at fungere, herfra hvor jeg sidder.

koden til siden er sådan :
<?php
date_default_timezone_set( 'Europe/Copenhagen');
$d = (isset( $_GET[ 'd'])) ? $_GET[ 'd'] : date( 'd');
$m = (isset( $_GET[ 'm'])) ? $_GET[ 'm'] : date( 'm');
$y = (isset( $_GET[ 'y'])) ? $_GET[ 'y'] : date( 'Y');
$now = mktime ( 0, 0, 0, $m, $d, $y);
$today = getdate( $now); // $today[ 'wday'] = ugedag: onsdag = 3
$d_corr = ( $today[ 'wday'] < 3) ? $today[ 'wday']+4 : $today[
'wday']-3;
// correktioner for ugedag - hvis før onsdag dagnummer+4, hvis onsdag
eller efter dagnummer-3
$first_day = mktime ( 0, 0, 0, $today[ 'mon'], $today[ 'mday'] -
$d_corr, $today[ 'year']); // ugestart
$last_day = mktime ( 0, 0, 0, $today[ 'mon'], $today[ 'mday'] - $d_corr
+ 7, $today[ 'year']); // ugeslut
$wk_path = date( 'd.m.Y', $first_day).'-'.date( 'd.m.Y', $last_day);

$st_dt = getdate( $first_day);
$first_mnd = FirstOns( $st_dt[ 'mon'], $st_dt[ 'year']);
$last_mnd = FirstOns( $st_dt[ 'mon']+1, $st_dt[ 'year']);
$mnd_path = date( 'd.m.Y', $first_mnd).'-'.date( 'd.m.Y', $last_mnd);

function FirstOns( $md, $yr) { // finder første onsdag i måneden
$month = getdate( mktime ( 0, 0, 0, $md, 1, $yr)); // første dag
i aktuel måned
$f_onsdag = ( $month[ 'wday'] <= 3) ? 4-$month[ 'wday'] :
11-$month[ 'wday'];
return mktime ( 0, 0, 0, $md, $f_onsdag, $yr);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Ugetest</title>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<meta http-equiv="Content-Language" content="DK">
</head>
<body>
<div>Dato: <?php echo $d.'/'.$m,'-'.$y; ?></div>
<div>uge-folder: <?php echo $wk_path; ?></div>
<div>måned-folder: <?php echo $mnd_path; ?></div>
</body>
</html>

Jegg kan ikke lige samle mig om at skrive filer - men umiddelbart er
det også en skidt metode, idet filen vil blive skrevet hver gang nogen
besøger siden.
Jeg vil foreslå dig at bruge samme teknik som jeg har gjort, med at
indsætte php variablen direkte i HTML'en. Du kan se hvordan i min kode
ovenfor (men ikke med vis kilde).
Du skal være opmærksom på, at den aktuelle fil *skal* hedde .php og
ikke htm eller html...

Håber det hjælper.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Ace (12-02-2011)
Kommentar
Fra : Ace


Dato : 12-02-11 19:07

Birger Sørensen skrev:

> PHP-script der virker...

OMG you're a lifesaver :O Jeg kan slet ikke beskrive hvor taknemlig jeg er for din
hjælp Birger :)

> Jegg kan ikke lige samle mig om at skrive filer - men umiddelbart er
> det også en skidt metode, idet filen vil blive skrevet hver gang nogen
> besøger siden.
> Jeg vil foreslå dig at bruge samme teknik som jeg har gjort, med at
> indsætte php variablen direkte i HTML'en. Du kan se hvordan i min kode
> ovenfor (men ikke med vis kilde).
> Du skal være opmærksom på, at den aktuelle fil *skal* hedde .php og
> ikke htm eller html...

Ja okay, det er afgjort det mest hensigtsmæssige at echo'e php variablen i url'en
:)

Det eneste der bare til allersidst lige skal rettes til, er perioderne som lige nu
går fra onsdag til onsdag, men de skal helst gå fra onsdag til tirsdag. Jeg fandt
hurtig ud af hvordan jeg skulle ændre dét for ugeperioderne:

$last_day = mktime ( 0, 0, 0, $today[ 'mon'], $today[ 'mday'] - $d_corr + 6,
$today[ 'year']); // ugeslut

Her var det jo bare $d_corr + 7, der i stedet skulle hedde $d_corr + 6. Men hvad i
scriptet skal ændres, så det samme sker for månedsperioderne? Eksempelvis skal den
nuværrende månedsperiode jo hedde 02.02.2011-01.03.2011 i stedet for
02.02.2011-02.03.2011.

Uanset hvad, skal du dog have mange tak for al din tid :)


/Ace

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Birger Sørensen (12-02-2011)
Kommentar
Fra : Birger Sørensen


Dato : 12-02-11 19:37

Efter mange tanker skrev Ace:
8X
> $last_day = mktime ( 0, 0, 0, $today[ 'mon'], $today[ 'mday'] - $d_corr + 6,
> $today[ 'year']); // ugeslut
>
> Her var det jo bare $d_corr + 7, der i stedet skulle hedde $d_corr + 6. Men
> hvad i scriptet skal ændres, så det samme sker for månedsperioderne?
> Eksempelvis skal den nuværrende månedsperiode jo hedde 02.02.2011-01.03.2011
> i stedet for 02.02.2011-02.03.2011.
>
> Uanset hvad, skal du dog have mange tak for al din tid :)

Jeg havde faktisk selv tænkt tanken, at den sidste dag skulle være
tirsdag og ikke onsdag....
Og det er nemt nok for ugen, men måneden er lidt værre. Det er jo ikke
nødvendigvis den første tirsdag i måneden, men kan være den sidste i
den forrige måned (hvis den 1. er en onsdag...)
Du skal fjerne linien der beregner $last_mnd og erstatte den med disse
to:

$last_dag = getdate( FirstOns( $st_dt[ 'mon']+1, $st_dt[ 'year']));
$last_mnd = mktime( 0, 0, 0, $last_dag[ 'mon'], $last_dag[ 'mday']-1,
$last_dag[ 'year']);

Den første finder stadig den første onsdag i måneden. ($last_dag)
Den næste finder dagen før - altså tirsdagen før den første onsdag i
måneden. ( Og det er her værd at bemærke at mktime selv korrigerer for
ugyldige datoer. Så selv om den første skulle være en onsdag og man
trækker 1 fra, og altså beder om den 0. i en måned, returneres sidste
dag i forrige månedd - så det burde virke efter hensigten, og en test
på maj måned giver også det rigtige... )

http://bbsorensen.com/test/weektest/?m=5

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Ace (12-02-2011)
Kommentar
Fra : Ace


Dato : 12-02-11 20:10

Birger Sørensen blev dagens høvding med:

> Jeg havde faktisk selv tænkt tanken, at den sidste dag skulle være
> tirsdag og ikke onsdag....
> Og det er nemt nok for ugen, men måneden er lidt værre. Det er jo ikke
> nødvendigvis den første tirsdag i måneden, men kan være den sidste i
> den forrige måned (hvis den 1. er en onsdag...)
> Du skal fjerne linien der beregner $last_mnd og erstatte den med disse
> to:
>
> $last_dag = getdate( FirstOns( $st_dt[ 'mon']+1, $st_dt[ 'year']));
> $last_mnd = mktime( 0, 0, 0, $last_dag[ 'mon'], $last_dag[ 'mday']-1,
> $last_dag[ 'year']);
>
> Den første finder stadig den første onsdag i måneden. ($last_dag)
> Den næste finder dagen før - altså tirsdagen før den første onsdag i
> måneden. ( Og det er her værd at bemærke at mktime selv korrigerer for
> ugyldige datoer. Så selv om den første skulle være en onsdag og man
> trækker 1 fra, og altså beder om den 0. i en måned, returneres sidste
> dag i forrige månedd - så det burde virke efter hensigten, og en test
> på maj måned giver også det rigtige... )

Fantastisk!! You're the MAN! :D 1000 tak Birger for den absolut bedste hjælp jeg
længe har modtaget :)

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177422
Tips : 31962
Nyheder : 719565
Indlæg : 6407886
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste