BETWEEN 2 datums van mysql.
Beste,
Ik zit met een probleem bij mijn coupon systeem.
Ik gebruik onderstaande functie voor het opvragen van de coupon "status":
Echter krijg ik telkens false terug.
Ik zie de fout niet, wie van jullie kan mij hierbij helpen?
Hartelijk bedankt, Mario Lamers.
Ik zit met een probleem bij mijn coupon systeem.
Ik gebruik onderstaande functie voor het opvragen van de coupon "status":
Code (php)
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
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
<?php
function check_coupon($code) { // $code is bijvoorbeeld: EC_12345-123#
if (strlen($code) == 13) {
$query = mysql_query("SELECT
id
FROM
shop_coupons
WHERE
coupon_code = '". mysql_real_escape_string($code) ."'
AND
user_id = '". $_SESSION['id'] ."'
AND
(
NOW()
BETWEEN
geldig_van
AND
geldig_tot
)");
if (mysql_num_rows($query) == 1) {
return true;
} else {
return false;
}
}
}
?>
function check_coupon($code) { // $code is bijvoorbeeld: EC_12345-123#
if (strlen($code) == 13) {
$query = mysql_query("SELECT
id
FROM
shop_coupons
WHERE
coupon_code = '". mysql_real_escape_string($code) ."'
AND
user_id = '". $_SESSION['id'] ."'
AND
(
NOW()
BETWEEN
geldig_van
AND
geldig_tot
)");
if (mysql_num_rows($query) == 1) {
return true;
} else {
return false;
}
}
}
?>
Echter krijg ik telkens false terug.
Ik zie de fout niet, wie van jullie kan mij hierbij helpen?
Hartelijk bedankt, Mario Lamers.
Gewijzigd op 01/01/1970 01:00:00 door Mario Lamers
Blijkbaar geeft de query niet precies 1 resultaat terug. Voor hem eens uit in bijvoorbeeld phpMyAdmin en kijk eens wat het resultaat van deze query wel is?
Tja foutafhandeling zal al genoeg moeten opleveren en een echo'tje van het sql statement dan kan je zien welke query er gebakken wordt.
En als gedlig_van / gedlig_tot een date type is dan moet je CURDATE() gebruiken
En als gedlig_van / gedlig_tot een datetime type is dan kan je NOW() gebruiken
En als gedlig_van / gedlig_tot een date type is dan moet je CURDATE() gebruiken
En als gedlig_van / gedlig_tot een datetime type is dan kan je NOW() gebruiken
@Noppes: in geval van een DATE veld kun je ook gewoon NOW() gebruiken, het tijd gedeelte wordt dan simpelweg genegeerd ;-)
Geeft (zoals verwacht) 1 resultaat terug met id = 1.
Ik dacht dat het aan die between lag, schijnbaar niet.
Alle datum velden in mijn database zijn datetime velden, deze 2 dus ook :)
Ik dacht dat het aan die between lag, schijnbaar niet.
Alle datum velden in mijn database zijn datetime velden, deze 2 dus ook :)
Gewijzigd op 01/01/1970 01:00:00 door Mario Lamers
Tevens heb ik bij een insert query (die hij niet uit wil voeren?) gezet: or die (mysql_error());
Maar het lijkt erop dat hij niet door de check functie heen komt, want de code wordt niet uitgevoerd.
Excuses, zal niet weer gebeuren.
Maar het lijkt erop dat hij niet door de check functie heen komt, want de code wordt niet uitgevoerd.
'Niet:
Excuses, zal niet weer gebeuren.
Gewijzigd op 01/01/1970 01:00:00 door Mario Lamers
'Noppes:
Gebruik dan de constante CURRENT_DATE, daar heb je meer aan dan een totaal onbekende en overbodige functie CURDATE().En als gedlig_van / gedlig_tot een date type is dan moet je CURDATE() gebruiken
CURRENT_DATE pakt uitsluitend de datum en is ook bruikbaar in echte databases.





