BETWEEN 2 datums van mysql.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mario Lamers

Mario Lamers

14/12/2008 17:23:00
Quote Anchor link
Beste,

Ik zit met een probleem bij mijn coupon systeem.

Ik gebruik onderstaande functie voor het opvragen van de coupon "status":

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
<?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;
      }
    }
  }

?>

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
 
PHP hulp

PHP hulp

23/12/2024 09:03:26
 
Joren de Wit

Joren de Wit

14/12/2008 17:27:00
Quote Anchor link
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?
 
Noppes

Noppes

14/12/2008 17:30:00
Quote Anchor link
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
 
Joren de Wit

Joren de Wit

14/12/2008 17:33:00
Quote Anchor link
@Noppes: in geval van een DATE veld kun je ook gewoon NOW() gebruiken, het tijd gedeelte wordt dan simpelweg genegeerd ;-)
 
Mario Lamers

Mario Lamers

14/12/2008 17:34:00
Quote Anchor link
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 :)
Gewijzigd op 01/01/1970 01:00:00 door Mario Lamers
 
Mario Lamers

Mario Lamers

14/12/2008 17:42:00
Quote Anchor link
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.

Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.


Excuses, zal niet weer gebeuren.
Gewijzigd op 01/01/1970 01:00:00 door Mario Lamers
 
Frank -

Frank -

15/12/2008 09:19:00
Quote Anchor link
Noppes schreef op 14.12.2008 17:30:
En als gedlig_van / gedlig_tot een date type is dan moet je CURDATE() gebruiken
Gebruik dan de constante CURRENT_DATE, daar heb je meer aan dan een totaal onbekende en overbodige functie CURDATE().

CURRENT_DATE pakt uitsluitend de datum en is ook bruikbaar in echte databases.
 



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.