Beste mensen,

Als ik de volgende functie/script aanroep wordt er soms een datum dubbel in de database gepost.
In het onderstaande voorbeeld wordt 25-10-2009 dubbel in de database gezet:


<?php
include("templates/bovenkant.php");


function dates_between3($startdate, $enddate){
	$format = "Y-m-d";
	(is_int($startdate)) ? 1 : $startdate = strtotime($startdate);
	(is_int($enddate)) ? 1 : $enddate = strtotime($enddate);

	if($startdate > $enddate){
		return false;
	}

	while($startdate < $enddate){
	$arr[] = $startdate;
	$startdate += 86400;
		
	}

	$arr[] = $enddate;
	return $arr;
}

$kamer = 39;
$hotel = 20;

?>
<?php

$vandatum = 20 . "-" . 10 . "-" . 2009;
$totdatum = 30 . "-" . 10 . "-" . 2009;

        $dat = explode("-", $vandatum);
        $vandatum1 = $dat[2] . "-" . $dat[1] . "-" . $dat[0];
        $dat = explode("-", $totdatum);
        $totdatum1 = $dat[2] . "-" . $dat[1] . "-" . $dat[0];

        $datBetwArr = dates_between3($vandatum,$totdatum);


            foreach($datBetwArr as $time){
            $date = date("Y-m-d", $time);
           
           

	mysql_query("INSERT INTO test (hotel_id,kamer_id,datum) 
                VALUES('$hotel','$kamer','$date');",$link) or mooie_mysql_error($_SERVER['PHP_SELF']);
            
}

?>


Wie weet wat er fout is?
Wat is er mis met MySQL datetime functies die velemalen efficienter werken?
Mijn webbouwer heeft dit ooit zo opgezet. Ik heb er niet veel verstand van. Kan datetime functie in bovenstaand verwerkt worden?
Is het niet mogelijk om het in bovenstaand script te verwerken of om het juist te maken omdat anders de hele site veranderd moet worden en daar is op korte termijn geen tijd voor.
Ik vraag me af, hoe wil je nu op deze manier met een string in de notatie: Y-m-d gaan rekenen?

Stel, je wilt er een maand ofwat erbij optellen bijv,
Nu moet je rekening houden met het feit dat een jaar 12 maanden heeft, en dat hij moet doortellen bij het volgende jaar. Met MySQL DATETIME is niet niet meer nodig, en kan je dit een hele sloot aan code schelen.

Inbouw is niet moeilijk. Laat je developer maar eens die pagina lezen die ik noemde.

Edit Kom er net achter dat je met timestamps werkt. Maar goed.
Laten we zeggen dat he nog morgen is ;-). Wil alleen niet zeggen dat het wat het nu is niet fout is.
"mooie_mysql_error($_SERVER['PHP_SELF']);"

Een mooie MySQL error met $_SERVER['PHP_SELF']? Dat bestaat niet...
De "mooie_mysql_error($_SERVER['PHP_SELF']);" bestaat wel. Dit is een functie dat er automatisch een e-mail gestuurd wordt naar de admin met de error.

Het zijn idd timestamps. Als ik print_r($datBetwArr); toevoeg, dan zie ik elke timestamp maar 1 keer, maar wel 0 tot en met 11. Dit zijn er twaalf dus 1 teveel. Het gaat dus fout de database in vermoed ik. Is er iemand die bovenstaand script eens wil proberen op zijn server?
Ik denk dat het probleem bij 25/26 oktober zit.
Als ik het volgende gebruik:

<?php

$vandatum = 25 . "-" . 10 . "-" . 2009;
$totdatum = 26 . "-" . 10 . "-" . 2009;

        $dat = explode("-", $vandatum);
        $vandatum1 = $dat[2] . "-" . $dat[1] . "-" . $dat[0];
        $dat = explode("-", $totdatum);
        $totdatum1 = $dat[2] . "-" . $dat[1] . "-" . $dat[0];

        $datBetwArr = dates_between3($vandatum1,$totdatum1);
	print_r($datBetwArr);

            foreach($datBetwArr as $time){
            $date = date("Y-m-d", $time);
       
           

	mysql_query("INSERT INTO test (hotel_id,kamer_id,datum) 
                VALUES('$hotel','$kamer','$date');",$link) or mooie_mysql_error($_SERVER['PHP_SELF']);
            
}

?>


Krijg ik het volgende:
Array ( [0] => 1256421600 [1] => 1256508000 [2] => 1256511600 )

Reageren