• Login
  • Register
  • Zoek
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Filebase Entry
  • More Options

ICTscripters

Dé plek voor IT

Dé plek voor IT

Login

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  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
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  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
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  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
  9. Goedkope domeinnamen
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • Na 15 jaar terug van weggeweest: iCriminals.nl is terug (BETA)!

    Syntax 30 december 2025 om 22:29
  • Developer Gezocht

    K.Rens 30 december 2025 om 12:32
  • Op zoek naar de legends

    Jeffrey.Hoekman 9 december 2025 om 09:41
  • [FREE] WeFact Hosting module

    Jeroen.G 13 oktober 2025 om 14:09
  • Help testers nodig voor android app Urgent

    urgentotservices 26 september 2025 om 10:21
  • Versio vervanger

    Jeroen.G 25 augustus 2025 om 15:56
  • Afspraken systeem met planbeperking

    Lijno 1 augustus 2025 om 23:04
  • Partner Gezocht om meerdere NFT Collecties op Open Sea te Plaatsen

    NFT Art Designer 1 maart 2025 om 14:08

Marktplaats

  • 321 Nieuwe Domeinnamen December 2025

    shiga 1 januari 2026 om 10:26
  • Meerdere mafia game template te koop

    Syntax 28 december 2025 om 21:20
  • Van een pixelige afbeelding naar een strakke, moderne website

    Syntax 21 december 2025 om 17:05

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

  • ThomasBlom
    Student
    Ontvangen Reacties
    19
    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);
    }
    
    
    ?>
    Toon Meer


    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
    Student
    Ontvangen Reacties
    8
    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
    Student
    Ontvangen Reacties
    8
    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']."')");
    
    
    	}
    }
    
    
    ?>
    Toon Meer
    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');
    Toon Meer
  • MOnkNL
    Student
    Ontvangen Reacties
    8
    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
    Ontvangen Reacties
    196
    Articles
    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
    Ontvangen Reacties
    14
    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
    Ontvangen Reacties
    196
    Articles
    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)
    Toon Meer

    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)
    Toon Meer

    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']."')");
    	}
    }
    
    
    ?>
    Toon Meer
  • Thisguyisgone
    Elite members
    Ontvangen Reacties
    197
    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
    Ontvangen Reacties
    52
    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
    Ontvangen Reacties
    52
    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
    Toon Meer

    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
    Toon Meer

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

  • AarClay
    Intermediate
    Ontvangen Reacties
    34
    Berichten
    423
    • 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.

Participate now!

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

Maak een account aan Login

ICT Nieuws

  • Fijne feestdagen

    tcbhome 28 december 2025 om 13:55
  • Kritieke update voor Really Simple Security-plug-in

    K.Rens 16 november 2024 om 16:12
  • ING Nederland streeft naar ondersteuning van Google Pay tegen eind februari

    K.Rens 2 november 2024 om 16:09

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. Privacy Policy
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen | Beste Zetes eid kaartlezer webshop
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design