Automatisch datums "doorschuiven"
Ik zit met een probleempje.
Ik heb er voor gekozen om als vriendendienst voor iemand zijn website aan te pakken.
Nu is dit redelijk gelukt.
Echter loop ik tegen het volgenden aan:
Deze persoon heeft een website waar hij en zijn vrienden wekelijks op kunnen geven of zij wel of niet ergens aan mee doen.
Dit is simpel een tabel waar de data in staat en een ja of nee antwoord kan worden gegeven.
Elke week "schoof" hij dit handmatig op. Er worden bijvoorbeeld 2 maanden getoond en op het moment dat er een nieuwe week is begonnen werd deze toegevoegd en de eerste weer verdween.
Dit is vrij arbeidsintensief. Ik wil nu kijken of ik dit kan vergemakkelijken door dit te automatiseren.
Echter heb ik geen idee hoe ik dit technish voor elkaar zou kunnen krijgen.
Ik hoop dat iemand hier dit al eerder heeft gedaan of hier een idee voor heeft.
M.
Je kunt een php bestand maken dat bijvoorbeeld vanaf de huidige datum (vandaag) enkele activiteiten toevoegt aan de tabel tot bijvoorbeeld twee maanden vooruit. Hij moet natuurlijk wel eerst even inlezen tot hoever de tabel de vorige keer was bijgewerkt. Daarnaast kan dit script ook simpelweg alle records waarvan de datum ouder is als 'vandaag' in één keer verwijderen.
dit script kan dan bij veel providers als 'crownjob' opgegeven worden wat inhoud dat je vooraf instelt wanneer het script automatisch uitgevoerd dient te worden.
Code (php)
1
WHERE datum_kolom BETWEEN DATE_SUB(NOW(), INTERVAL 1 WEEK) AND DATE_ADD(NOW(), INTERVAL 2 WEEK))
Geeft dus alles van afgelopen week + komende 2 weken.
Gewijzigd op 04/02/2013 20:33:19 door Aad B
cronjob dus natuurlijk. ehm on the fly de relevante info uit de database halen: ja, maar nieuwe records toevoegen zodat bijvoorbeeld een event om de veertien dagen opnieuw aan de tabel wordt toegevoegd en deze een uniek ID krijgt zodat gebruikers zich kunnen inschrijven voor deze ene unieke datum, dat zou ik denk ik toch met een cronjob doen.
Frank Nietbelangrijk op 04/02/2013 20:47:48:
Je doet een aanname die mogelijk niet relevant is. Misschien maken de gebruikers ook zelf de events aan. Anderzijds is er misschien een (jaar)tabel met events, bijvoorbeeld verjaardagen. Beide gevallen geen cron nodig. Ik realiseer me dat ik nu ook aannames doe....cronjob dus natuurlijk. ehm on the fly de relevante info uit de database halen: ja, maar nieuwe records toevoegen zodat bijvoorbeeld een event om de veertien dagen opnieuw aan de tabel wordt toegevoegd en deze een uniek ID krijgt zodat gebruikers zich kunnen inschrijven voor deze ene unieke datum, dat zou ik denk ik toch met een cronjob doen.
Ga er voor het gemak even van uit dat ik alles wat nu bestaat verwijder.
met andere woorden ik ga het opnieuw maken want alles, echt alles, wordt een voor een handmatig gemaakt.
Dus begin lekker bij 0.
Ik heb geen DATE field voor zover ik kan zien.
Het is een WP website waar lekker aan gesleuteld kan en mag worden.
Heb inmiddels volledige toegang tot Wp-admin en FTp server.
Het volgende wil ik bereiken
Ik heb een tabel nodig die per week alleen de zondag laat zien.
De gebruiker ziet 12 weken vooruit.
Nu is het de bedoeling dat als de eerste week geweest is deze uit de database moet/mag verdwijnen en er een nieuwe week moet worden toegevoegd.
Leef jullie uit :-)
Michel van B op 07/02/2013 14:16:09:
Leef jullie uit :-)
Het is de bedoeling dat JIJ je uitleeft, en als je dan concrete vragen hebt dan kun je die hier stellen. Het is niet zo dat je hier om een kant-en-klaar script kunt vragen. "U vraagt wij draaien" zo werkt het hier niet. Mocht je dit toch willen dan kun je een vacature plaatsen.
Succes!
Ik wil het ook zelf doen, maar loop hier een beetje vast.
Ik heb er niets aan als jullie het doen en ik alles kopier. Ik wil ook snappen wat ik doe....
Dus om misopvatting te voorkomen was het niet de bedoeling om een compleet script te krijgen maar een schop in de goede richting.
Excuus.
oké... bij deze rechtgezet ;)
Iemand nog ideeën?
Wat heb je ondertussen al?
:-)
Het is nu zo dat ik heb afgesproken dit gedeelte eerst even in theorie uit te zoeken en dan pas gaan doen.
Dus alles wat nu bestaat laten voor wat het is en opnieuw beginnen.
Eigenlijk zat ik te denken om maar een datum in de database te plaatsen en een teller mee te laten lopen die iedere keer +7 laat zien.
De vraag die we ons moeten stellen is: Hoe krijgen we nu automatisch die nieuwe records in onze tabel?
De antwoorden zijn hier al gegeven. Naar mijn idee zijn er twee mogelijkheden:
1. een Cronjob. Dit is een php script dat bijv. op iedere zondag door de server automatisch uitgevoerd wordt. In het script moet dan heel simpel een lusje komen te staan die tot acht weken vooruit records aan de database toevoegt indien die nog niet bestaan:
2. on the fly: Telkens als er een gebruiker op de agenda (zo noem ik jouw pagina nu maar even) beland dan wordt tijdens het genereren van de pagina (met PHP) een zijstapje gemaakt naar een lus die checkt of er nog minimaal 8 records in de database staan, en zo niet dan vult hij ze aan tot acht.
Jij mag kiezen welke van de twee het wordt. Daarnaast laat ons eens weten hoe je tabellen er uit moeten komen te zien:
Ik kan me zo voorstellen een tabel met users, een tabel met events, en een koppeltabel users-events opdat een user kan inschrijven op meerdere events maar ook dat elke event meerdere users kan laten inschrijven.
Opzet voorbeeld zoals het zou kunnen:
Users:
- user_id
- loginnaam
- wachtwoord (versleuteld)
- fullname
Events:
event_id
- event_date
- event_name
- event_description (uitgebreide omschrijving)
- (eventueel) event_location
- (eventueel) even_starttime
- enzovoorts
Users_Events:
- user_id
- event_id
In ieder geval is het de vraag wat de bedoeling is, moeten alle data van de komende periode getoond worden, of alleen de event die binnen die periode plaats vinden. In het laatste geval heb je sowieso dat tabelletje niet nodig, en in het eerste in principe ook niet. Overigens zou ik in het eerste geval het oplossen in stored procedure.
PS.
@Frank, ik persoonlijk zou de fullname opsplitsen.
Fullname opsplitsen is wat ik ook doe.
Heb jij een voorbeeldje van wat jij bedoelt met EVENT in mysql?
en welk 'tabelletje' is niet nodig?
Groet, Frank
Code (php)
1
2
3
4
2
3
4
CREATE EVENT get_rid_of_event
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 12 HOUR
DO
DELETE FROM events WHERE datefield <= CURRENT_DATE();
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 12 HOUR
DO
DELETE FROM events WHERE datefield <= CURRENT_DATE();
Het tabelletje:
Een db is bedoeld om dynamische data op te slaan, dus als het vandaag 8 februari is, is het over 2 weken (pak 'm beet) 22 februari. Dit ga je niet in en db opslaan.
Had er wel even google bij nodig om wat meer uitleg te krijgen.
voor anderen geïnteresseerden: http://phpmaster.com/working-with-mysql-events/
Quote:
Jij mag kiezen welke van de twee het wordt. Daarnaast laat ons eens weten hoe je tabellen er uit moeten komen te zien:
Hoewel ik het ontzettend wardeer dat je me helpt wil ik voor mijzelf ook de doelstelling zetten om er nog wat van te leren.
Echter zou ik heeeeeeel blij zijn met een opzetje.
Here goes wat betreft de structuur van tabellen.
Het is een WordPress install dus vandaaruit moet ik ook rekening houden betreft gegevens aanvragen. Voor alle gebruikers heb ik die namelijk al :-)
Het gaat hier om een "agenda" om dit maar even aan te houden voor een groepje golfers.
Deze mensen vinden het fijn om vooruit te plannen. Dit doen ze door iedere zondag een baan ergens te reserveren en aan te geven of zij wel of niet komen.
Dus de pagina waar op aan gegeven wordt of zij wel of niet komen is als volgt:
- Naam speler waarde: radio ja(1) of nee(0)
- Golfbaan waarde: dropdown met 5 banen
- Tijd van afslaan waarde: text veld
- Eerste Hole waarde: text veld
- Flight-indeling waarde: afhankelijk van aantal spelende mensen (ja(1) of nee(0) optellen)
Users:
- user_id
- loginnaam
- wachtwoord (versleuteld)
- fullname
Deze gegevens bestaan al en zijn zo op te vragen
Dat zou het in theorie moeten zijn.
Ik hoop dat het allemaal duidelijk is. En graag als jullie een reactie hebben met een voorbeeld leg het dan aub ook een beetje uit.
Nogmaals het is wel de bedoeling dat ik hier iets van leer!
Gewijzigd op 11/02/2013 15:31:50 door Michel van B
Ger van Steenderen op 08/02/2013 21:13:15:
Event in mysql is heel eenvoudig:
Het tabelletje:
Een db is bedoeld om dynamische data op te slaan, dus als het vandaag 8 februari is, is het over 2 weken (pak 'm beet) 22 februari. Dit ga je niet in en db opslaan.
Code (php)
1
2
3
4
2
3
4
CREATE EVENT get_rid_of_event
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 12 HOUR
DO
DELETE FROM events WHERE datefield <= CURRENT_DATE();
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 12 HOUR
DO
DELETE FROM events WHERE datefield <= CURRENT_DATE();
Het tabelletje:
Een db is bedoeld om dynamische data op te slaan, dus als het vandaag 8 februari is, is het over 2 weken (pak 'm beet) 22 februari. Dit ga je niet in en db opslaan.
Super interesant.
Geen idee hoe en wat verder nog maar wel erg leuk!!!
Ben een STAP verder gekomen.
Ik moet nu een manier hebben om data op te slaan bij de datum
Als volgt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
echo '<table cellpadding="0" cellspacing="0" border="1">';
echo'<tr>';
$sunday_date = strtotime("next sunday");
$current_date = date("d-m-y");
echo '<td width="250">' . $current_date .'</td>';
for ($i=0; $i<=10; $i++){
echo '<td width="250">' . date('d-m-y',$sunday_date). '</td>';
$sunday_date = strtotime("next sunday", $sunday_date);
}
echo'</tr>';
echo'</table>';
?>
echo '<table cellpadding="0" cellspacing="0" border="1">';
echo'<tr>';
$sunday_date = strtotime("next sunday");
$current_date = date("d-m-y");
echo '<td width="250">' . $current_date .'</td>';
for ($i=0; $i<=10; $i++){
echo '<td width="250">' . date('d-m-y',$sunday_date). '</td>';
$sunday_date = strtotime("next sunday", $sunday_date);
}
echo'</tr>';
echo'</table>';
?>
Dit maakt een mooi tabelletje waar de komende 12 zondagen worden getoond.
Hoe zou ik nu de data aan de hand van de datum op kunnen slaan?
Gewijzigd op 14/02/2013 10:32:44 door Michel van B