login  Naam:   Wachtwoord: 
Registreer je!
 Forum

functie met datum error (Opgelost)

Offline prienstra - 14/09/2009 16:58
Avatar van prienstraMySQL interesse Beste mensen,

ik heb een datumfunctie. Ik post een startdatum en een einddatum.
Vanaf de startdag tot en met de einddag worden de dagen berekend. Om eeen reden (de fout weet ik niet) wordt er soms een datum dubbel ingezet. Nu wil ik een soort controle dat er van elke datum maar 1 in de database gezet wordt.
Ik dacht zelf om dit toe te voegen ( $arr = array_unique($arr); ) in de functie, maar dat werkt niet, heeft iemand een tip?

Dit is de functie:
  1. function dates_between3($startdate, $enddate){
  2. $format = "Y-m-d";
  3. (is_int($startdate)) ? 1 : $startdate = strtotime($startdate);
  4. (is_int($enddate)) ? 1 : $enddate = strtotime($enddate);
  5.  
  6. if($startdate > $enddate){
  7. return false;
  8. }
  9.  
  10. while($startdate < $enddate){
  11. $arr[] = $startdate;
  12. $startdate += 86400;
  13.  
  14. }
  15.  
  16. $arr[] = $enddate;
  17. return $arr;
  18. }


En het script:
  1. $_POST["uniekprijs"] = str_replace(",",".",$_POST["uniekprijs"]);
  2.  
  3. $dat = explode("-", $_POST["vandatum"]);
  4. $vandatum1 = $dat[2] . "-" . $dat[1] . "-" . $dat[0];
  5. $dat = explode("-", $_POST["totdatum"]);
  6. $totdatum1 = $dat[2] . "-" . $dat[1] . "-" . $dat[0];
  7.  
  8. $datBetwArr = dates_between3($_POST["vandatum"],$_POST["totdatum"]);
  9.  
  10. if($insert){
  11. foreach($datBetwArr as $time){
  12. $date = date("Y-m-d", $time);
  13.  
  14. $iDayNr = (int) date("w", $time);
  15.  
  16. $beschikbaar = $_POST['beschikbaar'][$iDayNr];
  17. $uniekprijs = $_POST['uniekprijs'][$iDayNr];
  18. $min = $_POST['min'][$iDayNr];
  19. $max = $_POST['max'][$iDayNr];
  20.  
  21. mysql_query("INSERT INTO test (hotel_id,kamer_id,datum,beschikbaar,uniekprijs,min,max)
  22. VALUES('$hotel','$kamer','$date','$beschikbaar','$uniekprijs','$min','$max');",$link) or mooie_mysql_error($_SERVER['PHP_SELF']);
  23. }

6 antwoorden

Gesponsorde links
Offline marten - 14/09/2009 19:25
Avatar van marten Beheerder Waarom zou je uberhaupt dit willen?

Je database is erg goed in rekenen met datums. Je start- en einddatum is dus meer dan genoeg om op te slaan in de database.
Offline prienstra - 14/09/2009 19:29
Avatar van prienstra MySQL interesse elke datum moet in de database omdat voor elke dag een beschikbaarheid en prijs hangt.
Offline marten - 14/09/2009 19:30
Avatar van marten Beheerder Is elke dag de prijs verschillend dan? of per 'periode'
Offline prienstra - 14/09/2009 19:34 (laatste wijziging 14/09/2009 22:04)
Avatar van prienstra MySQL interesse elke dag is anders. Ook de beschikbaarheid is voor elke dag anders.

Het is een soort voorraadsysteem voor een webshop, alleen dan voor bungalows (dus nachten).

Update:

Het probleem is dat als ik de volgende functie/script aanroep er soms een dubbele dag in de DB gaat. In het onderstaande voorbeeld wordt 25-10-2009 dubbel aangemaakt:

  1. <?php
  2. include("templates/connect.php");
  3.  
  4.  
  5. function dates_between3($startdate, $enddate){
  6. $format = "Y-m-d";
  7. (is_int($startdate)) ? 1 : $startdate = strtotime($startdate);
  8. (is_int($enddate)) ? 1 : $enddate = strtotime($enddate);
  9.  
  10. if($startdate > $enddate){
  11. return false;
  12. }
  13.  
  14. while($startdate < $enddate){
  15. $arr[] = $startdate;
  16. $startdate += 86400;
  17.  
  18. }
  19.  
  20. $arr[] = $enddate;
  21. return $arr;
  22. }
  23.  
  24. $kamer = 39;
  25. $hotel = 20;
  26.  
  27. ?>
  28. <?php
  29.  
  30. $vandatum = 20 . "-" . 10 . "-" . 2009;
  31. $totdatum = 30 . "-" . 10 . "-" . 2009;
  32.  
  33. $dat = explode("-", $vandatum);
  34. $vandatum1 = $dat[2] . "-" . $dat[1] . "-" . $dat[0];
  35. $dat = explode("-", $totdatum);
  36. $totdatum1 = $dat[2] . "-" . $dat[1] . "-" . $dat[0];
  37.  
  38. $datBetwArr = dates_between3($vandatum,$totdatum);
  39.  
  40.  
  41. foreach($datBetwArr as $time){
  42. $date = date("Y-m-d", $time);
  43.  
  44.  
  45.  
  46. mysql_query("INSERT INTO test (hotel_id,kamer_id,datum)
  47. VALUES('$hotel','$kamer','$date');",$link) or mooie_mysql_error($_SERVER['PHP_SELF']);
  48.  
  49. }
  50.  
  51. ?>
Offline Aar - 15/09/2009 11:59
Avatar van Aar PHP interesse maar is het echt niet verstandiger om eens te kijken daar DateTime in MySQL?
Dat bespaart een hele lap code, en werkt vele malen efficienter.  
Offline prienstra - 15/09/2009 15:01
Avatar van prienstra MySQL interesse nieuwe functie geschreven, probleem opgelost.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.222s