Melding krijgen wanneer de datum verstreken is van een klant

  • Hallo,
    ik heb namelijk een vraag.


    Ik ben namelijk bezig met een klantensysteem te bouwen voor een fitnesscentrum.
    Nu de bedoeling is namelijk wanneer we een nieuwe abonnement toevoegen met een begin en een eind datum dat hij bij een verlopen abonnee een melding van verstuurd in het admin paneel.


    Heeft er iemand een idee of er een bestaand script zoals deze of hoe ik dit zou kunnen aanpakken.


    Mvg

  • Oke ik heb een cronjob gemaakt kan iemand me vertellen of dit een goeie manier is ?


    PHP:


    SQL:


    SQL
    CREATE TABLE `logs_klanten` (
      `id` int(10) NOT NULL,
      `klanten_id` int(10) NOT NULL,
      `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
      `lastname` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
      `melding` text CHARACTER SET utf8
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  • Wat je is is de time () vergelijken met de eind datum van het abonnement dus:


    If ($einddatumtimestamp < time ()){
    # verzend mail of dergelijke
    #log ook of bericht al verzonden is of net zoals je niet elke dag een mail binnen krijgt
    }
    Edit was iets te snel;
    Op manier dat je nu doet zou ik kijken naar join fucntie van mysqli om meteen in de query te checken of mail al keer verzonden is.

  • Zou ik dan niet beter date(); gebruiken met deze vergelijking ?

  • Het werkt bijna alleen heb ik nu ene probleem dat hij niet ziet of dat $date groter is of $end_date
    want hij voegt nu alle leden toe aan logs maar ook nog de klanten waarvan de dataum's nog niet verstreken zijn en hoger moeten zijn

    SQL
    CREATE TABLE `logs_klanten` (
      `id` int(10) NOT NULL,
      `klanten_id` int(10) NOT NULL,
      `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
      `lastname` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
      `melding` text CHARACTER SET utf8,
      `end_date` date NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;



  • Zou het niet handiger zijn dat je X dagen voor het verlopen van een abonnement hier iemand over bericht?


    Je hebt het over abonnementen, maar ik zie nergens een abonnementen-tabel? Als je die nou eens een maakt met:
    - klant-id
    - begindatum
    - einddatum
    - wellicht andere informatie zoals abonnementstype
    - een indicatie of er een reminder voor verlenging is verstuurd


    Dan heb je meteen een historie van iemand zijn fitness-verleden.


    Tevens zou je dan in je klantentabel een abonnements-id van het actieve abonnement kunnen bijhouden.


    Ik zou eerst eens goed nadenken over de organisatie van je data in de database, dit vormt namelijk het fundament van je applicatie.

  • @Jesse Maar waarom zou je continu data willen aanpassen? De start- en einddatum liggen toch vast. Controleren of je de einddatum nadert kan vrij simpel met native MySQL functies zoals DATEDDIFF().


    Hij vergelijkt nu namelijk 2 strings met elkaar en dat lukt niet.

    Dat werkt prima zolang je maar een juiste lexicografische (alfabetische) vergelijking doet. Laten timestamps (met een jaar-maand-dag format (in die volgorde)) dat principe nu prima volgen.


    Vergelijk:

    Oftewel: het cijfer 5 komt numeriek voor het getal 14, maar de string '5' komt alfabetisch na de string '14'.


    Indien je timestamps (die strings zijn) een alfabetische opbouw volgen (van hoog naar laag, van grote tijdseenheid (jaar) naar kleine (dag)) dan kun je prima datum-strings met elkaar vergelijken. Als je echter een of ander lijp custom datum format gebruikt dan ben je nat omdat je hiermee niet fatsoenlijk kunt filteren of sorteren.

  • Kan je eens een stukje code opmaken hoe het dan wel werkt om die 2 vergelijkingen te doen werken want ik weet niet meteen hoe eraan te beginnen nu ben ook nog maar een beginnende PHP scripter en ik doe me best om alles op te zoeken maar soms lukt dat niet altijd vrij wel :P

  • Ik heb het nog eens geprobeerd op een andere manier maar helaas blijft hij nog steeds de verschillen van datums niet zien :(

  • Als je het een date field is "end_date" dan kan je het volgende gebruiken:

    SQL
    SELECT 
      *
     FROM
       klanten
     WHERE
      -- Get all customers that are due
      DATEDIFF(end_date, CURDATE()) < 0
      -- Get all customers with 5 days left before due
      -- DATEDIFF(end_date, DATE_ADD(CURDATE(), INTERVAL -5 DAY) < 0

    Edit: Let wel op alle dates die worden opgeslagen in een MySQL databases worden in format yyyy-mm-dd opgeslagen, dus je ze naderhand om moeten zetten om dd-mm-yyyy te krijgen.

  • Bedankt patrick hij doet nu eindelijk wat ik wil!
    maar hoe moet ik mij query nu aanpakken ?


    Als je het een date field is "end_date" dan kan je het volgende gebruiken:

    SQL
    SELECT 
      *
     FROM
       klanten
     WHERE
      -- Get all customers that are due
      DATEDIFF(end_date, CURDATE()) < 0
      -- Get all customers with 5 days left before due
      -- DATEDIFF(end_date, DATE_ADD(CURDATE(), INTERVAL -5 DAY) < 0

    Edit: Let wel op alle dates die worden opgeslagen in een MySQL databases worden in format yyyy-mm-dd opgeslagen, dus je ze naderhand om moeten zetten om dd-mm-yyyy te krijgen.

  • Die qeury kan je gebruiken in je cronjob, de output die je krijgt zijn of allees wat vervallen is of alles wat bijna vervallen is.
    Wat je er verder mee doet is aan jou. Je zou er een extra tabel naast kunnen zetten met hoeveel herinneren etc je naar je klant hebt verzonden etc.


    Mocht je tabel klant_logs nog willen vullen dan zou ik de volgende query gebruiken:


    Deze laat alleen records zien die nog geen waarde hebben in klanten_logs welke de zelfde klant_id & end_date hebben.

  • oke bedankt patrick mijn probleem is verholpen! :)


    Die qeury kan je gebruiken in je cronjob, de output die je krijgt zijn of allees wat vervallen is of alles wat bijna vervallen is.
    Wat je er verder mee doet is aan jou. Je zou er een extra tabel naast kunnen zetten met hoeveel herinneren etc je naar je klant hebt verzonden etc.


    Mocht je tabel klant_logs nog willen vullen dan zou ik de volgende query gebruiken:


    Deze laat alleen records zien die nog geen waarde hebben in klanten_logs welke de zelfde klant_id & end_date hebben.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!