• Inloggen
  • Registreer
  • Zoeken
Dit topic
  • Overal
  • Dit topic
  • Dit forum
  • Artikelen
  • Pagina's
  • Forum
  • Downloads
  • Meer opties

ICTscripters

Dé plek voor IT

Dé plek voor IT

Aanmelden

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • Herkent deze Notion-structuurscan echte problemen?

    FreelanceAP 6 oktober 2026 om 16:48
  • 🚀 WE ZOEKEN TESTERS! 🚀

    Servertjee 3 oktober 2026 om 10:56
  • Port Father: beta van een browsergame in Antwerpen 1931, feedback welkom

    Syntax 1 oktober 2026 om 11:11
  • Luchtvaartsoftware: Hoe technologie de moderne luchtvaart verandert

    saggy2829 30 september 2026 om 19:31
  • Hoe gebruiken jullie WhatsApp voor marketing en klantopvolging?

    aiqanobzfsej5 29 september 2026 om 12:55
  • [PROJECT] Gamekeuring.nl - Hét onafhankelijke keuringsplatform voor maffiagames & RPG's!

    frio 22 september 2026 om 16:40
  • Ictscripters / Koen

    Aaron 22 september 2026 om 15:07
  • Kweekrijk - van stekje tot Imperium

    Lijno 14 september 2026 om 23:00

Marktplaats

  • Te koop: Port Father, afgewerkt online maffiaspel in PHP/MySQL, klaar voor de Play Store

    frio 11 oktober 2026 om 14:02
  • [TE KOOP] Likeboost24.nl: complete SMM-webshop met eigen merk, volautomatische levering en betalen op de eigen pagina

    frio 11 oktober 2026 om 13:43
  • Verschillende domeinen te koop (sommige hebben website / content)

    frio 2 oktober 2026 om 14:45

Melding krijgen wanneer de datum verstreken is van een klant

  • webdude
  • 25 mei 2016 om 02:59
  • webdude
    Beginner
    Berichten
    13
    • 25 mei 2016 om 02:59
    • #1

    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

    Bewerkt één keer, laatst door webdude (25 mei 2016 om 11:57).

  • Gast, wil je besparen op je domeinnamen? (ad)
  • ThomasBlom
    Leerling
    Berichten
    137
    • 25 mei 2016 om 06:42
    • #2

    Je zou in een cronjob elke dag een check uit kunnen voeren.

  • webdude
    Beginner
    Berichten
    13
    • 25 mei 2016 om 11:54
    • #3

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

    PHP:

    PHP
    <?php
    require "config.php";
    
    
    	$dertig_dagen = "SELECT * FROM klanten WHERE maanden = 1 AND start_date BETWEEN DATE_SUB(NOW(),INTERVAL 29 DAY) AND DATE_SUB(NOW(), INTERVAL 30 DAY)";
    	$execute = mysql_query($dertig_dagen);
    
    
    		while($row = mysql_fetch_array($execute)){
    		$sql = "INSERT INTO `logs_klanten` (`klanten_id`,`name`, `lastname`, `melding`) VALUES ('".$row['id']."','".$row['name']."', '".$row['lastname']."', 'zijn abonnement is verlopen')";
    
    
    	mysql_query($sql);
    }
    
    
    ?>
    Meer tonen


    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;
  • MOnkNL
    Leerling
    Berichten
    69
    • 25 mei 2016 om 12:16
    • #4

    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.

    The law is what I write down on paper

  • webdude
    Beginner
    Berichten
    13
    • 25 mei 2016 om 13:22
    • #5

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

    Citaat van MOnkNL

    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.

  • MOnkNL
    Leerling
    Berichten
    69
    • 25 mei 2016 om 14:01
    • #6

    persoonlijk vind ik dat time bewerkeijker als date. Maar dan heb ik het wel over de php functie. En niet of de sql

    The law is what I write down on paper

  • webdude
    Beginner
    Berichten
    13
    • 25 mei 2016 om 14:23
    • #7

    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;
    PHP
    <?php
    require "config.php";
    $ophalen = "SELECT * FROM klanten";
    $execute = mysql_query($ophalen);
    $end_date = "".$execute['end_date']."";
    $date = date("Y-m-d");
    
    
    	if ($date > $end_date){
    		while($row = mysql_fetch_array($execute)){
    		mysql_query("INSERT INTO `logs_klanten` (`klanten_id`,`name`, `lastname`, `melding`,`end_date`) VALUES ('".$row['id']."','".$row['name']."', '".$row['lastname']."', 'zijn abonnement is verlopen','".$row['end_date']."')");
    
    
    	}
    }
    
    
    ?>
    Meer tonen
    SQL
    CREATE TABLE `klanten` (
      `id` int(10) UNSIGNED NOT NULL,
      `email` varchar(255) DEFAULT NULL,
      `name` varchar(255) DEFAULT NULL,
      `lastname` varchar(255) DEFAULT NULL,
      `phone` varchar(255) DEFAULT NULL,
      `adress` varchar(255) DEFAULT NULL,
      `country` varchar(255) DEFAULT NULL,
      `start_date` date DEFAULT NULL,
      `end_date` date DEFAULT NULL,
      `maanden` varchar(255) NOT NULL DEFAULT '1'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    --
    -- Gegevens worden geëxporteerd voor tabel `klanten`
    --
    INSERT INTO `klanten` (`id`, `email`, `name`, `lastname`, `phone`, `adress`, `country`, `start_date`, `end_date`, `maanden`) VALUES
    (1, '[email protected]', 'dean', 'werveke', '0471242180', 'straat 29 8450 bredene', 'belgë', '2016-04-25', '2016-04-24', '1'),
    (2, '[email protected]', 'Koenraad', 'Desaever', '0486051187', 'straat 18 8400 Oostende', 'België', '2016-05-25', '2017-05-25', '1');
    Meer tonen
  • MOnkNL
    Leerling
    Berichten
    69
    • 25 mei 2016 om 14:37
    • #8

    Zit nu op mobiel zal vanavond even stukjecode schrijven als ik thuis ben.
    Hij vergelijkt nu namelijk 2 strings met elkaar en dat lukt niet. hij zou twee int meten vergelijken.

    The law is what I write down on paper

  • FangorN
    Professional
    Artikelen
    2
    Berichten
    737
    • 25 mei 2016 om 14:59
    • #9

    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
    Elite members
    Berichten
    339
    • 25 mei 2016 om 15:06
    • #10

    Of je maakt een veld in je tabel -aantal dagen dat het abonnement is en die laat je iedere nacht door een cronjob aftellen. Je schrijft vervolgens dat wanneer dat veld gelijk is aan x aantal dagen dat hij dan een mail verstuurd naar de klant.

    klus4pc.nl
    bananenkoning.nl
    De Klus4pc Academy voor gratis tutorials --- Bewerk beveiliging word 2016

  • FangorN
    Professional
    Artikelen
    2
    Berichten
    737
    • 25 mei 2016 om 15:15
    • #11

    @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().

    Citaat van MOnkNL

    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:

    SQL
    mysql> SELECT 5 < 14;
    +--------+
    | 5 < 14 |
    +--------+
    |      1 |
    +--------+
    1 row in set (0.00 sec)
    
    
    mysql> SELECT '5' < '14';
    +------------+
    | '5' < '14' |
    +------------+
    |          0 |
    +------------+
    1 row in set (0.00 sec)
    Meer tonen

    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.

    Bewerkt 3 keer, laatst door FangorN (25 mei 2016 om 15:55).

  • webdude
    Beginner
    Berichten
    13
    • 25 mei 2016 om 19:13
    • #12

    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

    Citaat van FangorN

    @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().

    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:

    SQL
    mysql> SELECT 5 < 14;
    +--------+
    | 5 < 14 |
    +--------+
    |      1 |
    +--------+
    1 row in set (0.00 sec)
    
    
    mysql> SELECT '5' < '14';
    +------------+
    | '5' < '14' |
    +------------+
    |          0 |
    +------------+
    1 row in set (0.00 sec)
    Meer tonen

    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.

  • webdude
    Beginner
    Berichten
    13
    • 25 mei 2016 om 20:19
    • #13

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

    PHP
    <?php
    require "config.php";
    
    
    $sql = "SELECT * FROM klanten";
    $pic_up = mysql_query($sql);
    $curdate = strtotime (date('Y-m-d'));
    $expired = strtotime($pic_up['end_date']);
    
    
    if($curdate > $expired)
    {
    	while($row = mysql_fetch_array($pic_up)){
    	
    	mysql_query("INSERT INTO `logs_klanten` (`klanten_id`,`name`, `lastname`, `melding`,`end_date`) VALUES ('".$row['id']."','".$row['name']."', '".$row['lastname']."', 'zijn abonnement is verlopen','".$row['end_date']."')");
    	}
    }
    
    
    ?>
    Meer tonen
  • Thisguyisgone
    Elite members
    Berichten
    7.880
    • 25 mei 2016 om 20:53
    • #14

    mysql. Really ?
    Euhm het gemakkelijkste is inderdaad; bv 30 dagen toevoegen en elke dag laten aftellen. Dat is wat je momenteel wel al kunt doen :-).

  • Patrick
    Back in the game
    Berichten
    1.417
    • 25 mei 2016 om 21:09
    • #15

    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.

  • webdude
    Beginner
    Berichten
    13
    • 25 mei 2016 om 21:32
    • #16

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

    Citaat van Patrick

    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.

  • Patrick
    Back in the game
    Berichten
    1.417
    • 25 mei 2016 om 21:37
    • #17

    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:

    SQL
    SELECT 
      klanten.*
    FROM
      klanten
      LEFT JOIN klanten_logs ON klanten.klant_id = klanten_logs.klant_id AND klanten.end_date = klanten_logs.end_date
    WHERE
       klanten_logs.klant_id IS NULL
     -- Get all customers that are due
       AND DATEDIFF(end_date, CURDATE()) < 0
     -- Get all customers with 5 days left before due
     -- AND DATEDIFF(end_date, DATE_ADD(CURDATE(), INTERVAL -5 DAY) < 0
    Meer tonen

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

    Bewerkt één keer, laatst door Patrick (25 mei 2016 om 21:42).

  • webdude
    Beginner
    Berichten
    13
    • 25 mei 2016 om 21:46
    • #18

    oke bedankt patrick mijn probleem is verholpen! :)

    Citaat van Patrick

    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:

    SQL
    SELECT 
      klanten.*
    FROM
      klanten
      LEFT JOIN klanten_logs ON klanten.klant_id = klanten_logs.klant_id AND klanten.end_date = klanten_logs.end_date
    WHERE
       klanten_logs.klant_id IS NULL
     -- Get all customers that are due
       AND DATEDIFF(end_date, CURDATE()) < 0
     -- Get all customers with 5 days left before due
     -- AND DATEDIFF(end_date, DATE_ADD(CURDATE(), INTERVAL -5 DAY) < 0
    Meer tonen

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

  • AarClay
    Gevorderd
    Berichten
    424
    • 26 mei 2016 om 16:16
    • #19

    Trowens.... waarom gebruik je de oude mysql_*() functies?
    Deze zullen over een paar jaar echt verleden tijd zijn. Stap liever op op MySQLi of PDO.

Registratie

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

Nu registreren Aanmelden

Blogs

  • Functioneel ontwerp

    Dees 28 december 2014 om 12:38
  • Access Control List implementatie in PHP/MySQL - deel 1/2

    FangorN 28 december 2018 om 12:35
  • Access Control List implementatie in PHP/MySQL - deel 2/2

    FangorN 29 december 2018 om 12:37
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacyverklaring
  10. Contact
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design