Datum check ouder dan 30 dagen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander C

Sander C

04/08/2008 11:53:00
Quote Anchor link
Ik heb de zoekfunctie al gebruikt..en van alles uitgeprobeerd..maar tot nu lukt mij niet om juiste output te krijgen.

De bedoeling is dat de klant die al reeds producten hebt besteld, binnen 30 dagen niet opnieuw mag bestellen..maar ouder dan 30 dagen wel.

Ik sla de datum op in database in Ymd formaat.

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
  $sql="SELECT mand_klant_id, DATE_FORMAT(`mand_datum`, '%Y%m%d') AS `_datum` FROM winkelmand WHERE mand_klant_id='".$_SESSION['user_id']."'";
  $database->setQuery( $sql );
   if ($get_extras = $database->loadObjectList() ) {
    foreach($get_extras as $get_extra){
     $laatstedatum = $get_extra->_datum;
    }
   }

$datum = date("Ymd",mktime(0,0,0,substr($laatstedatum,4,2),substr($laatstedatum,6,2)+30,substr($laatstedatum,0,4)));

if ($laatstedatum > $datum){
..wordt niet besteld
}else{
Wel besteld
}


Waar doe ik ergens fout?
Gewijzigd op 01/01/1970 01:00:00 door Sander C
 
PHP hulp

PHP hulp

24/12/2024 18:57:12
 
Jan Koehoorn

Jan Koehoorn

04/08/2008 12:29:00
Quote Anchor link
Sander schreef op 04.08.2008 11:53:
Ik sla de datum op in database in Ymd formaat.

Dat doe je fout. Een datum hoor je als yyyy-mm-dd op te slaan in je database. Als je dan zoiets doet:

SELECT klantnaam
FROM tabelnaam
WHERE laatste_bestelling > NOW() -INTERVAL 30 DAY

Als die query meer dan nul resultaten oplevert, mag je klant nog niet bestellen.
 
Sander C

Sander C

04/08/2008 12:46:00
Quote Anchor link
Dat is ook een optie..maar ik sla inderdaad op als yyyy-mm-dd..ik was iets te snel..

Maar heb inmiddels ook ander oplossing gevonden..

SELECT mand_klant_id, DATEDIFF(CURDATE(), mand_datum) AS verschil
FROM tabelnaam
WHERE mand_klant_id='".$_SESSION['user_id']."'

En je controleert die verschil of die niet binnen 30 dagen valt.
 
- SanThe -

- SanThe -

04/08/2008 12:47:00
Quote Anchor link
Jan Koehoorn schreef op 04.08.2008 12:29:
Een datum hoor je als yyyy-mm-dd op te slaan in je database.

En dan uiteraard in een veld met het juiste veldtype: DATE of DATETIME.
 
Jan Koehoorn

Jan Koehoorn

04/08/2008 12:49:00
Quote Anchor link
Ja, dat komt op hetzelfde neer. Je kunt ook nog dit doen, dan controleert je database het voor je:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT mand_klant_id
WHERE DATEDIFF(CURDATE(), mand_datum) < 30
AND mand_klant_id='".$_SESSION['user_id']."'
 
Sander C

Sander C

06/08/2008 08:47:00
Quote Anchor link
@Jan,

Ik heb jou methode gebruikt..maar het werkt niet goed.

Hoe wordt de if getoond?

Hier de mijne..
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
  $sql="SELECT mand_klant_id, mand_datum  FROM $boektab WHERE DATEDIFF(CURDATE(), mand_datum) < 30 AND mand_klant_id='".$_SESSION['user_id']."'";
  $database->setQuery( $sql );
   if ($get_extras = $database->loadObjectList() ) {
    foreach($get_extras as $get_extra){
     $datum = $get_extra->mand_datum;
    }
   }

if ($datum==false){
Ja, als het ouder is dan 30 dagen.
}else{
Nee, het is niet ouder dan 30 dagen
}
 
Jan Koehoorn

Jan Koehoorn

06/08/2008 08:51:00
Quote Anchor link
Sander schreef op 06.08.2008 08:47:
Ik heb jouw methode gebruikt..maar het werkt niet goed.

Wat gaat er fout dan?
Sander schreef op 06.08.2008 08:47:
Hoe wordt de if getoond?

Hoe bedoelt u?
 
Sander C

Sander C

06/08/2008 09:01:00
Quote Anchor link
Zie de code bovenin..

Gisteren heb ik test bestelling hebt gedaan en is opgeslagen. Vandaag weer bestelling gedaan en is ook goedgekeurd..terwijl het niet zo moet zijn..het kan pas over 30 dagen.
 
Frank -

Frank -

06/08/2008 09:08:00
Quote Anchor link
Waarom klooien met DATEDIFF ?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT
  *
FROM
  tabelnaam
WHERE
  DATE(datumveld) < CURRENT_DATE - INTERVAL 30 DAY

Hiermee wordt alles ouder dan (!) 30 dagen geselecteerd.
 
Sander C

Sander C

06/08/2008 09:18:00
Quote Anchor link
Bedankt Frank..

Het werkt ook niet.

Als ik de bestellingsdatum op 20080705 zet en ga vandaag bestellen..en krijg de melding dat ik nog niet mag bestellen..maar mag pas op 04-08-2008 bestellen terwijl vandaag 06-08 is.

Het is in ieder geval wel ouder dan 30 dagen.

Of is ergens een foutje in if else.

Hier de code nogmaals..
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
  $sql="SELECT mand_klant_id, mand_datum  FROM $boektab WHERE DATE(mand_datum) < CURRENT_DATE - INTERVAL 30 DAY AND mand_klant_id='".$_SESSION['user_id']."'";
  $database->setQuery( $sql );
   if ($get_extras = $database->loadObjectList() ) {
    foreach($get_extras as $get_extra){
     $datum = $get_extra->mand_datum;
    }
   }

if ($datum==true){
Nee, het is niet ouder dan 30 dagen
}else{
Ja, als het ouder is dan 30 dagen.
}
Gewijzigd op 01/01/1970 01:00:00 door Sander C
 
- SanThe -

- SanThe -

06/08/2008 09:29:00
Quote Anchor link
$datum heeft altijd de laatste waarde uit de foreach. Wat de foreach voor nut heeft is mij een raadsel.
 
Jacco Engel

Jacco Engel

06/08/2008 09:44:00
Quote Anchor link
Quote:
Als ik de bestellingsdatum op 20080705 zet


Een kriebel in mn ondebuik zegt dat er toch iets met zn datamodel enorm mis is

Edit:

En mischien even quote gebruiken ipv code
Gewijzigd op 01/01/1970 01:00:00 door Jacco Engel
 
Sander C

Sander C

06/08/2008 10:10:00
Quote Anchor link
Oke, hier de volledig code..en een nader uitleg..

De bedoeling is dat je uit database de oude bestelling opzoekt en als die niet binnen 30 dagen valt..wordt het opgeslagen. Zo ja..dan wordt het verwijderd.

Ik heb de mand_datum eerst op varchar 50 gezet. Nu heb ik veranderd in date. Heeft dit soms iets te maken? De datumoutput is nu 2008-08-06 ipv 20080806

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
  $sql="SELECT mand_klant_id, mand_datum  FROM $boektab WHERE DATE(mand_datum) < CURRENT_DATE - INTERVAL 30 DAY AND mand_klant_id='".$_SESSION['user_id']."'";
  $query = mysql_query($sql);
   $tellen = mysql_num_rows($query);

   if ($tellen==TRUE){
   $sql = "DELETE FROM $boektab WHERE mand_uid='".$UID."'";
    $database->setQuery($sql);
    if (!$database->query()) {
      echo $database->stderr();
    }
//    $msg = "Uw bestelling is nu geannuleerd. U heeft binnen 1 maand artikel besteld.";
    mosRedirect("index.php?action=error", $sql);

   }else{

  $query = "UPDATE $boektab SET mand_klant_id='".$_SESSION['user_id']."' WHERE mand_uid='" . $UID . "'";
  $database->setQuery($query);
   if (!$database->query()) {
    echo "<script> alert('" . $database->getErrorMsg() . "'); window.history.go(-1); </script>\n";
   }

//   $msg = "Uw bestelling is met succes verzonden. Tot volgend maand.";
    mosRedirect("index.php?action=succes", $sql);
   }
  }
 
Jacco Engel

Jacco Engel

06/08/2008 10:17:00
Quote Anchor link
Quote:
Ik heb de mand_datum eerst op varchar 50 gezet. Nu heb ik veranderd in date. Heeft dit soms iets te maken?


Dat heeft er alles mee te maken
 
Sander C

Sander C

06/08/2008 10:17:00
Quote Anchor link
En gaat nu wel werken met date als mand_datum ipv varchar?
 
Jacco Engel

Jacco Engel

06/08/2008 10:37:00
Quote Anchor link
Gaat heen en probeert het
 
Sander C

Sander C

06/08/2008 10:43:00
Quote Anchor link
Het lijkt nu alles opgelost te zijn..was inderdaad een foutje in MySQL. Nu met date als type ipv varchar.

Wat een domme foutje..ik had het moeten kunnen weten..:-s
 
- SanThe -

- SanThe -

06/08/2008 10:48:00
Quote Anchor link
Sander schreef op 06.08.2008 10:43:
was inderdaad een foutje in MySQL.

Nee, was jouw foutje. ;-)
 
Sander C

Sander C

06/08/2008 11:12:00
Quote Anchor link
Ghehe..
 



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.