[CMS] Pagina aangepast

Pagina: 1
Acties:
  • 100 views sinds 30-01-2008
  • Reageer

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik heb 2 pagina voor het aanpassen en toevoegen van pagina's.

beide PHP script schrijven de data weg naar een MySQL database.

In de database staat voor nieuwe pagina's een tabel met daarin de velden "pagdatum" voor wanneer de page is aangemaakt en "wijzdatum" voor wanneer de pagina is aangepast. Beide zij DATETIME velden.

Als ik nu een pagina toevoeg zet MySQL daar al "0000-00-00 00:00:00" in. Dit is niet echt de bedoeling want ik wil namelijk alleen laten zien als een pagina gewijzigd is als er een datum in staat en anders moet er nix getoont worden. Dit doe ik met:
code:
1
2
3
4
if (strlen ($wijzdatum) > 0 )
        {
        echo ("<i>Laatste wijziging: $wijzdatum</i>");
        }


Maar omdat MySQL overal "0000-00-00 00:00:00" inzet wordt overal wat getoont om het nergens "0" is.

Hoe kan ik een systeem goed maken voor wanneer een pagina is aangepast? Iemand ervaringen/tips ??

  • coubertin119
  • Registratie: Augustus 2002
  • Laatst online: 20-08 15:43
Als je nu eens kijkt of $wijzdatum gelijk is aan "0000-00-00 00:00:00"? Want zo haal je toch als er nog niets in dat veld gezet is de datum eruit, kan je dus matchen op dat.

It's as easy as that :).

Skat! Skat! Skat!


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Hoe kan ik een systeem goed maken voor wanneer een pagina is aangepast?
Zoals coubertin119 al aangeeft, gewoon de ongewenste data eruit filteren.
Voor je "wijzdatum" veld kan je het type timestamp gebruiken aangezien Mysql dan automatisch de datum aanpast indien het record gewijzigd wordt. :) (Hoef je dit vervolgens ook niet in je app. te doen)

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik heb het nu zo opgelost. Ik heb een extra veld aangemaakt genaamd "edit". Als edit 0 bevat dan staat er gewoon 0000-00-00 in het "wijzdatum" veld. Wordt de pagina aangepast dan wordt edit op "11" gezet en staat de juiste datum er in.

Vervolgens doe ik:

code:
1
2
3
4
if (strlen ($edit) > 1 )
        {
        echo ("<i>Laatste wijziging: $wijzdatum</i>");
        }


En voila. De juiste datum staat overal waar een pagina is aangepast en er staat nix als de pagina nooit geedit is.

Dank voor jullie input.

[ Voor 9% gewijzigd door ViNyL op 15-11-2003 11:28 ]


  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
eeh... waarom volgde je niet gewoon de oplossing van coubertin? Die leek me veel voor de hand liggender en beter?

If you can't beat them, try harder


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

DeverauX schreef op 15 november 2003 @ 10:41:
...aangezien Mysql dan automatisch de datum aanpast indien het record gewijzigd wordt. :) (Hoef je dit vervolgens ook niet in je app. te doen)
moet je even mee uitkijken, want stel mysql wordt in de toekomst beter en als ze dit niet meer doen dan moet je je progsel aanpassen. Gewoon altijd zelf zetten, krijg je later geen problemen ;)

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ok dat kan ik doen, maar hoe zorg ik er dan voor dat ik geen tijd + datum te zien krijg van 0000-00-00 00:00:00 ?

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ViNyL schreef op 15 november 2003 @ 20:31:
Ok dat kan ik doen, maar hoe zorg ik er dan voor dat ik geen tijd + datum te zien krijg van 0000-00-00 00:00:00 ?
PHP:
1
2
3
4
$editdate = getDateFromDatabaseFunction();
if ($editdate=='0000-00-00 00:00:00'){
  $editdate='';
}


zo moeilijk is dat toch niet :?

  • MisterData
  • Registratie: September 2001
  • Laatst online: 15:23
Waarom gebruik je niet gewoon een int-veld met de php functie time() ? Dat doe ik tenminste altijd...

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 28-02 19:26
MisterData schreef op 15 november 2003 @ 23:10:
Waarom gebruik je niet gewoon een int-veld met de php functie time() ? Dat doe ik tenminste altijd...
Je kunt heel goed gebruik maken van de datum functies in MySQL. Lekker snel en makelijk ingebruik. Echter het grootste probleem is dat mensen niet snappen hoe ze er mee om moeten gaan. Bij deze delink naar de manual: http://www.mysql.com/doc/en/DATETIME.html

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Erkens schreef op 15 november 2003 @ 19:46:
[...]

moet je even mee uitkijken, want stel mysql wordt in de toekomst beter en als ze dit niet meer doen dan moet je je progsel aanpassen. Gewoon altijd zelf zetten, krijg je later geen problemen ;)
Het hele idee achter timestamp is deze functionaliteit, dus ik denk niet dat ze dat wijzigen hoor. Iig is het nog hetzelfde voor mysql 4, en die zal nog wel een jaar of twee, drie meegaan, en daarna lijkt het me nog steeds sterk dat ze dat gaan wijzigen.

Wat wel een minpunt is, dat timestamp ook bij de insert al gezet wordt, dus voor de ts heeft het alsnog niet veel nut.

En dan nu over naar een oplossing. Je kunt zoals hier al gezegd die nul-datum eruit filteren, lijkt me niet moeilijk. Maar, werkt dat niet lekker, en je wilt et op jouw manier oplossen, doe et dan niet op zo'n butt-ugly manier als nu.

Als je per se ints wil gebruiken, ga je gang, alhoewel het enumeratie-type hier ook bijster goed werkt hoor. (enum('yes,','no') of enum('True','False') oid). Maar, als je met integers werkt ga dan niet strlen-nen, dat is uitermate lomp.

Zet hem op 0, als ie niet ge-edit is. En verhoog hem bij elke edit. Verder doe je dan if($edit) ipv if strlen($edit) Als edit een positief getal is groter dan nul evalueert ie altijd naar true. Hoef je niet te strlen-nen enzo, das nogal ranzig zo, naar mijn bescheiden mening. Verder, als je hem bij elke edit 1 ophoogt, zoals ik je zeg, heeft dat veld ook nog nut, naast het aangeven of het ding al-dan-niet ge-edit is. En kun je daar, in de toekomst, als je er nut in ziet, nog iets mee doen ook.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Grijze Vos schreef op 16 november 2003 @ 00:06:
Het hele idee achter timestamp is deze functionaliteit, dus ik denk niet dat ze dat wijzigen hoor. Iig is het nog hetzelfde voor mysql 4, en die zal nog wel een jaar of twee, drie meegaan, en daarna lijkt het me nog steeds sterk dat ze dat gaan wijzigen.

Wat wel een minpunt is, dat timestamp ook bij de insert al gezet wordt, dus voor de ts heeft het alsnog niet veel nut.
Zelf gebruik ik normaal gesproken liever timestamps dan date/time fields om datums op te slaan, maar dan moet de sql server niet achter mijn rug om deze data gaan veranderen als ik iets update |:(

Uit pure wanhoop moet ik dus een extra timestamp field gaan toevoegen (als een van de eerste fields) om de door mij gewenste functionaliteit te krijgen, of ik moet dat veld expliciet weer opnieuw zetten, nee handig :Y)

Als ik wil dat er iets veranderd dan wil ik dat dus zelf aanpassen, en niet anders. (maargoed dit was ff licht offtopic)

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Erkens schreef op 16 november 2003 @ 00:12:
[...]

Zelf gebruik ik normaal gesproken liever timestamps dan date/time fields om datums op te slaan, maar dan moet de sql server niet achter mijn rug om deze data gaan veranderen als ik iets update |:(

Uit pure wanhoop moet ik dus een extra timestamp field gaan toevoegen (als een van de eerste fields) om de door mij gewenste functionaliteit te krijgen, of ik moet dat veld expliciet weer opnieuw zetten, nee handig :Y)

Als ik wil dat er iets veranderd dan wil ik dat dus zelf aanpassen, en niet anders. (maargoed dit was ff licht offtopic)
Dan gebruik je het veld gewoon verkeerd. Het veld is gemaakt om automagisch up te daten bij een update. Dat is de functie van het timestamp veld. Anders gebruik je gewoon een integer veld, of, netter, een datetime veld.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Grijze Vos schreef op 16 november 2003 @ 00:43:
[...]

Dan gebruik je het veld gewoon verkeerd. Het veld is gemaakt om automagisch up te daten bij een update. Dat is de functie van het timestamp veld. Anders gebruik je gewoon een integer veld, of, netter, een datetime veld.
offtopic:
toch vreemd dat alleen de eerste timestamp geupdate wordt ;)
een timestamp is om een datum/tijd in op te slaan, net als een date/time field, daarnaast kan je met een timestamp aangeven wat je wilt opslaan ;)

TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY

lijkt me opzich wel handig :Y)


overigens ondesteund mySQL het dus wel:
When MySQL is running in MAXDB mode, TIMESTAMP behaves like DATETIME. No automatic updating of TIMESTAMP columns occurs.........

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Erkens schreef op 15 november 2003 @ 21:00:
[...]

PHP:
1
2
3
4
$editdate = getDateFromDatabaseFunction();
if ($editdate=='0000-00-00 00:00:00'){
  $editdate='';
}


zo moeilijk is dat toch niet :?
Het werkt in ieder geval niet 8)7

Verder werkt mijn systeem tot nu toe goed. Met een extra kolom dus die bijhoudt of er wijzigingen zijn gemaakt.

Ik snap niet helemaal hoe ik dat van jou toe moet passen.

Ik heb in een kolom in me database een wijzdatum staan doe op 0000-00-00 00:00:00 staat.

Deze vraag ik op met een query net als de andere data van de pagina (titel, inhoud etc) De wijzigingsdatum komt onder de titel te staan, MITS de pagina is aangepast.
Hoe zorg ik er nou voor dat daar NIETS staat als de pagina NIET is aangepast en wel wat staat als de pagina aangepast is... ?

[ Voor 50% gewijzigd door ViNyL op 16-11-2003 12:53 ]


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ViNyL schreef op 16 november 2003 @ 12:48:
[...]


Het werkt in ieder geval niet 8)7

Verder werkt mijn systeem tot nu toe goed. Met een extra kolom dus die bijhoudt of er wijzigingen zijn gemaakt.

Ik snap niet helemaal hoe ik dat van jou toe moet passen.

Ik heb in een kolom in me database een wijzdatum staan doe op 0000-00-00 00:00:00 staat.

Deze vraag ik op met een query net als de andere data van de pagina (titel, inhoud etc) De wijzigingsdatum komt onder de titel te staan, MITS de pagina is aangepast.
Hoe zorg ik er nou voor dat daar NIETS staat als de pagina NIET is aangepast en wel wat staat als de pagina aangepast is... ?
als de pagina niet aangepast is staat die datum op 0?
zoja, dan kan je dat afvangen en dan die datum dus niet outputten, hoe moeilijk kan het zijn?
beetje basic php werk als je het mij vraagt...

  • Stilgar
  • Registratie: Maart 2002
  • Niet online
ViNyL schreef op 15 november 2003 @ 09:59:
Als ik nu een pagina toevoeg zet MySQL daar al "0000-00-00 00:00:00" in. Dit is niet echt de bedoeling want ik wil namelijk alleen laten zien als een pagina gewijzigd is als er een datum in staat en anders moet er nix getoont worden.
MySQL maakt hier "0000-00-00 00:00:00" omdat je bij het definieren van het veld aan hebt gegeven dat het veld geen NULL-waarden mag bevatten. Als je dat veranderd in de definitie van de tabel, zal MySQL hier geen waarde meer invullen bij het invoegen van een nieuw record.
Pagina: 1