Datum check ouder dan 30 dagen
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
}
$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
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.
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.
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.
Ik heb jou methode gebruikt..maar het werkt niet goed.
Hoe wordt de if getoond?
Hier de mijne..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
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
}
$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
}
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?
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.
Hiermee wordt alles ouder dan (!) 30 dagen geselecteerd.
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
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.
}
$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
$datum heeft altijd de laatste waarde uit de foreach. Wat de foreach voor nut heeft is mij een raadsel.
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
En mischien even quote gebruiken ipv code
Gewijzigd op 01/01/1970 01:00:00 door Jacco Engel
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)
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
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);
}
}
$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);
}
}
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
En gaat nu wel werken met date als mand_datum ipv varchar?
Gaat heen en probeert het
Wat een domme foutje..ik had het moeten kunnen weten..:-s
Sander schreef op 06.08.2008 10:43:
was inderdaad een foutje in MySQL.
Nee, was jouw foutje. ;-)
Ghehe..