login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Geen status meer na 20 dagen

Offline SimonDW - 18/02/2009 21:53 (laatste wijziging 18/02/2009 21:55)
Avatar van SimonDWNieuw lid Hoi, ik ben een beginner op php gebied en zit met een vraagje. Ik weet niet of dit mogelijk is, heb al een beetje rondgekeken op de site, maar vind niet direct een antwoord. Hier komt ie:

In mijn datebase zit een datum in YYYY-MM-DD formaat.
Er zit eveneens een status in de database (nieuwe dvd, oude dvd, vhs).
Ik lees alles uit, tot hier geen probleem.
Nu zou ik graag de status na 20 dagen veranderd zien bij 'nieuwe dvd' naar geen status. Dit zou het eenvoudiger maken om na 20 dagen te zien wat nieuw is en wat niet nieuw is. De datum in mijn database zou ongewijzigd moeten blijven, het veranderen van 'status' zou dus bij het uitlezen moeten gebeuren.

Kan dit in PHP?? Ik heb de tut 'Datum en tijd in MySQL' al doornomen, maar geraak er niet uit 

Dit gebruik/probeer ik nu:

  1. <?
  2. if ($statusdatum == '$datum("+20day")' and $status=="nieuwe dvd") echo ""; else echo "nieuwe dvd";
  3. ?>


Maar dit werkt niet.. Wat doe ik fout??

Citaat:
Sliphead Edit: Code tags gebruiken aub!

12 antwoorden

Gesponsorde links
Offline ranco - 19/02/2009 12:06
Avatar van ranco PHP gevorderde Je kunt dit niet in een query maken. Dit zul je met behulp van php moeten gaan doen. Je bovenstaande phpcode kun je dus blijven gebruiken.

Wanneer je middels een query alleen oudere dvd's wilt tonen, dan is dit wel mogelijk door in de where clause te gaan rekenen met datums.
Offline SimonDW - 19/02/2009 12:59
Avatar van SimonDW Nieuw lid Mijn gegevens in de database moeten wel ongewijzigd blijven.

Ik zal dus ergens de huidige datum moeten zetten en die vergelijken met de datum in de database. Als daar 20 dagen verschil opzitten moet de status weg...

Simpel in verwoording, maar in PHP  
Offline Wim - 19/02/2009 13:07 (laatste wijziging 19/02/2009 13:16)
Avatar van Wim Crew algemeen Dit kan dus wel via een query.
Je kan hiervoor een IF gebruiken in je database, en werken met een INTERVAL:
MySQL.com: if
MySQL.com: interval

Een voorbeeldje:
  1. SELECT IF(datum < NOW() - INTERVAL 20 DAY; 'nieuwe dvd', 'oude dvd') AS leeftijd, veld2, veld3
  2. FROM tabel
  3. WHERE ...


Je moet de query nog een klein beetje aanpassen, de IF zou echter moeten werken...

in "leeftijd" zit nu een string "oude dvd" of een string "nieuwe dvd"

//edit:
Had perongeluk een gereserveerd keyword gebruikt, eventjes vervangen...
Offline SimonDW - 19/02/2009 16:44
Avatar van SimonDW Nieuw lid Ik geraak er niet uit 
Onderstaand lijkt mij het meest voor de hand liggend, maar de functie van de datum die in mijn database zit + 20 dagen lukt niet.

Bij voorkeur in PHP en niet via een query.

Als de status "nieuw" is en de datum tussen datum in database + 20 dagen moet de status "nieuw" blijven staan. Anders niks.


  1. <?
  2. $datumX = $datum(+ 20 day);
  3. if ($status=='Nieuw' and $datum == BETWEEN 'datum' AND $datumX) echo "NIEUW" else echo "";
  4. ?>
Offline Wim - 19/02/2009 17:03
Avatar van Wim Crew algemeen Selecteer je datum op deze manier als het veld "datum" heet:
SELECT (datum + INTERVAL 20 DAY) as datumolddvd

als datumolddvd dan verder weg is dan de huidige datum is de dvd ouder dan 20 dagen, anders is hij nieuwer

Als je het je nog niet zou lukken met dit, gelieve dan iets meer code te posten...
Offline SimonDW - 19/02/2009 23:18 (laatste wijziging 19/02/2009 23:19)
Avatar van SimonDW Nieuw lid OK! Het is gelukt.

Ik kan nu 2 datumwaardes uitlezen. De datum in de database (datum 1) en de datum uit de database + 20 dagen (datum 2)! Oef!

Nog één probleempje: nu zou ik de status willen weergeven enkel tussen datum 1 en tussen datum 2, nadien hoeft er geen status meer weergegeven te worden.

Ik heb dit geprobeerd via volgende code, maar zonder succes:


  1. <?
  2. if ($datum1 == BETWEEN 'datum1' AND $datum2) echo "NIEUW" else echo "";
  3. ?>
Offline Wim - 20/02/2009 01:58
Avatar van Wim Crew algemeen kan je wat meer code geven?
Offline SimonDW - 20/02/2009 13:12
Avatar van SimonDW Nieuw lid
  1. <?
  2. include ("include/database.php");
  3. $query = "SELECT *, (datum + INTERVAL 20 DAY) as 'datum_tot' FROM collectie ORDER BY `id` DESC";
  4. $result = mysql_query($query);
  5.  
  6. while ($row = mysql_fetch_array($result)) {
  7.  
  8. ?>
  9.  
  10. Dan begin ik met het uitlezen uit de database.
  11. Enkel: dit lukt niet:
  12. <?
  13. if ($row[datum] == BETWEEN $row[datum] AND $row[datum_tot]) echo "NIEUW" else echo "";
  14. ?>
  15.  
  16. <? } ?>
Offline ranco - 20/02/2009 13:38
Avatar van ranco PHP gevorderde
  1. <?
  2. include ("include/database.php");
  3. $query = "SELECT *, (datum + INTERVAL 20 DAY) as 'datum_tot' FROM collectie ORDER BY `id` DESC";
  4. $result = mysql_query($query);
  5.  
  6. while ($row = mysql_fetch_assoc($result)) {
  7.  
  8. ?>
  9.  
  10. Dan begin ik met het uitlezen uit de database.
  11. Enkel: dit lukt niet:
  12. <?
  13. if ($row[datum] == BETWEEN $row[datum] AND $row[datum_tot]) echo "NIEUW" else echo "";
  14. ?>
  15.  
  16. <? } ?>


Mysql_fetch_assoc en mysql_fetch_array heb je door elkaar gehaald.
Offline SimonDW - 21/02/2009 00:31
Avatar van SimonDW Nieuw lid Dit geeft geen verschil   
Offline Koen - 21/02/2009 09:51
Avatar van Koen PHP expert Waarom gebruik je dan ook "BETWEEN" in je if? 
  1. <?php
  2. function between($first, $last, $foo) {
  3. if($first >= $foo && $foo >= $last) {
  4. return true;
  5. } elseif($first <= $foo && $foo <= $last) {
  6. return true;
  7. } else {
  8. return false;
  9. }
  10. }
  11. if(between($row['datum'], $row['datum_tot'], $row['datum'])) {
  12. echo "NIEUW";
  13. }
  14. ?>
Offline SimonDW - 21/02/2009 11:54
Avatar van SimonDW Nieuw lid Bedankt voor de hulp  

Wat kan ik aan volgende foutmelding doen:

  1. Fatal error: Cannot redeclare between() (previously declared in status.php:6) in status on line 6


Line 6 is de function  
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.244s