PHP datum probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marvin H

Marvin H

17/06/2008 17:11:00
Quote Anchor link
Hallo PHP kenners :)

Ik heb een probleem met onderstaand script. Het betreft een verjaardag script wat ik heb geschreven, echter krijg ik hem niet geheel werkend.

Probleem = Ik heb in het script een verleden en toekomst toegevoegd, zodat je kan zien wie ook 10 dagen geleden jarig was en wie dus dan ook 10 dagen in de toekomst jarig zal zijn. Nu ontstaat het probleem, als het bijvoorbeeld de 25-06-2008 is en 10 dagen verder, het script alleen maand 07 weergeeft en dus de gehele maand 06 weg laat (terwijl die nog 5 dagen bevat). Hoe kan ik dit aanpassen in mijn script? Ik ben niet ver gevorderd in PHP, dus het script zal wat omslachtig zijn, maar werkt "bijna" wel :)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
include 'dbconnect.php';

// Datum in daggetal voor bepalen of iemand vandaag jarig is
$dag = date("d");

// Datum in maandgetal voor bepalen of iemand vandaag jarig is
$maand = date("m");

// Datum 10 dagen in de toekomst
$datumtoekomst = mktime(0, 0, 0, date("m") , date("d")+10, date("Y"));
$dagtoekomstuitkomst = date('d', $datumtoekomst);
$maandtoekomstuitkomst = date('m', $datumtoekomst);

// Datum 10 dagen in het verleden
$datumverleden = mktime(0, 0, 0, date("m") , date("d")-10, date("Y"));
$dagverledenuitkomst = date('d', $datumverleden);
$maandverledenuitkomst = date('m', $datumverleden);

$query  = "SELECT naam, geboorte, vestiging, datumindienst, geboortedag, geboortemaand FROM birthday
WHERE geboortedag BETWEEN $dagverledenuitkomst AND $dagtoekomstuitkomst
AND geboortemaand BETWEEN $maandverledenuitkomst AND $maandtoekomstuitkomst
ORDER BY geboortemaand, geboortedag"
;

$result = mysql_query($query);

while(list($naam,$geboorte,$vestiging,$datumindienst,$geboortedag,$geboortemaand)= mysql_fetch_row($result))
{

    if ($geboortedag == $dag && $geboortemaand == $maand) {
    echo "<b>$geboorte :: $naam ($vestiging)</b> <img src=\"birthday.gif\"><br>"; }
    
    else {
    echo "$geboorte :: $naam ($vestiging)<br><br>"; }
}


// *** controle onderaan de pagina, dit is overbodig ***
echo "$dagverledenuitkomst <br>";
echo "$maandverledenuitkomst <br>";
echo "$dagtoekomstuitkomst <br>";
echo "$maandtoekomstuitkomst <br>";
// *** controle onderaan de pagina, dit is overbodig ***

include 'closedbconnect.php';

?>
 
PHP hulp

PHP hulp

28/03/2024 16:40:19
 
- SanThe -

- SanThe -

17/06/2008 17:20:00
Quote Anchor link
Begin eens met foutafhandeling in te bouwen. In een query hoort data/tekst tussen enkele quotes. Verder haal alle $vars buiten de quotes. Gebruik je wel het juiste datatype in de database? (DATE of DATETIME)
 
Marvin H

Marvin H

17/06/2008 17:37:00
Quote Anchor link
Hallo SanThe,

Ik heb in ieder geval de code iets opgeschoond en de quotes veranderd, echter veranderd dit niet het probleem. In de database gebruik ik het datatype "DATE" > 2008-06-17.

Heb nu ook een errorcheck ingezet:

$result = mysql_query($query)
or die(mysql_error());

wat is er in me filter nou niet juist...
 
Jesper Diovo

Jesper Diovo

17/06/2008 17:44:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT *
FROM birthday
WHERE (geboortedag = NOW() - 10 DAY
OR geboortedag = NOW()
OR geboortedag = NOW() + 10 DAY)
ORDER BY geboortedag;


Je kunt het beter als een DATE opslaan, dat gaat ook makkelijker met het outputten.

Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
Table: Birthday
-------------------------------
id BIGINT PK
user_id BIGINT FK
geboortedag DATE
 
Marvin H

Marvin H

17/06/2008 18:00:00
Quote Anchor link
De datum is als DATE opgeslagen in de database, helaas krijg ik trouwens je query niet aan de gang..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$query
  = "SELECT * FROM birthday WHERE (geboorte = NOW() - 10 DAY OR geboorte = NOW() OR geboorte = NOW() + 10 DAY) ORDER BY geboortedag";

?>


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAY OR geboorte = NOW() OR geboorte = NOW() + 10 DAY) ORDER BY geboortedag' at line 1
Gewijzigd op 01/01/1970 01:00:00 door Marvin H
 
Jesper Diovo

Jesper Diovo

17/06/2008 18:01:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT *
FROM birthday
WHERE (geboorte = CURRENT_DATE - 10 DAY
OR geboorte = CURRENT_DATE
OR geboorte = CURRENT_DATE + 10 DAY)
ORDER BY geboorte;


En zo?
 
Marvin H

Marvin H

17/06/2008 18:04:00
Quote Anchor link
ook een foutmelding

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAY OR geboorte = CURRENT_DATE OR geboorte = CURRENT_DATE + 10 DAY) ORDER BY geb' at line 1
 
Jesper Diovo

Jesper Diovo

17/06/2008 18:09:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT *
FROM birthday
WHERE (geboorte = NOW() - 10 DAY
OR geboorte = NOW()
OR geboorte = NOW() + 10 DAY)
ORDER BY geboorte;


Probeer het zo eens? En laat de enters er eens in staan, kijken welke lijn hij in de fout aangeeft.
 
Joren de Wit

Joren de Wit

17/06/2008 18:33:00
Quote Anchor link
@Jezpur: de query die je geeft klopt niet. Allereerst vergeet je het gebruik van INTERVAL en daarnaast zal de query ook niet doen wat de TS wenst. In de geboortedatum zit waarschijnlijk ook het jaartal opgeslagen en dus heb je aan een vergelijking met NOW() niet zo heel veel...

@Marvin: zoek eens op het forum, er zijn wel vaker queries voorbij gekomen om verjaardagen te bepalen...

ps. De query die je zou kunnen gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
  *
FROM
  birthday
WHERE
  geboorte + INTERVAL (YEAR(NOW()) - YEAR(geboorte)) YEAR
BETWEEN
  NOW() - INTERVAL 10 DAY
AND
  NOW() + INTERVAL 10 DAY
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Marvin H

Marvin H

17/06/2008 18:40:00
Quote Anchor link
Hallo Blanche,

In mijn database heb ik ook de dag en de maand appart vermeld, namelijk "geboortedag" en "geboortemaand"... ik heb overal de gehele dag lopen zoeken, maar kan niet hetgeen vinden wat ik wil bereiken in mijn script. Eigenlijk is het niet zo moielijk, gewoon alle mensen die binnen 10 dagen geleden en 10 dagen in de toekomst geboren zijn moeten tevoorschijn komen...

hoe doe ik dat?
 
Marvin H

Marvin H

17/06/2008 18:41:00
Quote Anchor link
Jezpur schreef op 17.06.2008 18:09:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT *
FROM birthday
WHERE (geboorte = NOW() - 10 DAY
OR geboorte = NOW()
OR geboorte = NOW() + 10 DAY)
ORDER BY geboorte;


Probeer het zo eens? En laat de enters er eens in staan, kijken welke lijn hij in de fout aangeeft.


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAY OR geboorte = NOW() OR geboorte = NOW() + 10 DAY) ORDER BY geboorte' at line 3
 
Joren de Wit

Joren de Wit

17/06/2008 18:43:00
Quote Anchor link
Quote:
n mijn database heb ik ook de dag en de maand appart vermeld, namelijk "geboortedag" en "geboortemaand"...
Dat is dus niet slim, de geboortedatum sla je gewoon als DATE op in de database, nooit als losse dagen of maanden.

Zie de edit van mijn vorige post voor de query die je zou kunnen gebruiken. De kolom 'geboorte' is van het type DATE.

ps. Die queries van Jezpur mag je vergeten. Hoe goed het ook bedoeld is, daar klopt niets van...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Marvin H

Marvin H

17/06/2008 19:16:00
Quote Anchor link
Blanche schreef op 17.06.2008 18:33:
@Jezpur: de query die je geeft klopt niet. Allereerst vergeet je het gebruik van INTERVAL en daarnaast zal de query ook niet doen wat de TS wenst. In de geboortedatum zit waarschijnlijk ook het jaartal opgeslagen en dus heb je aan een vergelijking met NOW() niet zo heel veel...

@Marvin: zoek eens op het forum, er zijn wel vaker queries voorbij gekomen om verjaardagen te bepalen...

ps. De query die je zou kunnen gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
  *
FROM
  birthday
WHERE
  geboorte + INTERVAL (YEAR(NOW()) - YEAR(geboorte)) YEAR
BETWEEN
  NOW() - INTERVAL 10 DAY
AND
  NOW() + INTERVAL 10 DAY


Echt helemaal toppie... me verjaardag systeem werkt perfect :)
THANKS!
 
Joren de Wit

Joren de Wit

17/06/2008 19:29:00
Quote Anchor link
Graag gedaan ;-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.