Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Kalendarz rezerwacji - Ajax Calendar
Forum PHP.pl > Forum > Przedszkole
casperii
Panowie mam kalendarz rezerwacji nie swojego autorstwa:
Rezerwacja poszczególnego dnia wygląda w htmlu tak:

dla nie potwierdzonej rezerwacji:
  1. <li class="booked_pr" id="date_2017-09-03" title="03/09/2017 - Niepotwierdzone" data-date="3/09/2017" style="cursor: pointer;">3</li>


dla potwierdzonej rezewacji:
  1. <li class="booked" id="date_2017-09-03" title="03/09/2017 - Rezerwacja" data-date="3/09/2017" style="cursor: pointer;">3</li>


dla wolnego dnia:
  1. <li class="" id="date_2017-09-03" title="03/09/2017 - Wolne" data-date="3/09/2017" style="cursor: pointer;">3</li>


tak wygląda baza:
id |desc_pl | code | state| list_order |class |show_in_key
4 | Niepotwierdzone | pr | 1 | 0 |booked_pr | 1
1 | Rezerwacja | b | 1 | 1 |booked | 1

Po kliknięciu w poszczególny dzień poprzez ajax getem jest wykonywana komenda:
update_calendar.ajax.php?id_item=2&the_date=2017-09-04&lang=pl&id_state=

tylko, że zawsze po kliknięciu nie chwyta id_state i zawsze updatuje pierwszy z bazy czyli id_state=4,
doszedłem do tego ,że za ten błąd odpowiada JS:


  1. function update_calendar(el,date_num){
  2. var el=document.id(''+el.id+'');
  3. var id_pre_state="";
  4.  
  5. if(document.id('id_predefined_state')){
  6. id_pre_state=$('id_predefined_state').get('value');
  7. }
  8.  
  9. var req = new Request({
  10. method: 'get',
  11. url: url_ajax_update,
  12. data: {
  13. 'id_item':id_item,
  14. 'the_date':el.id.replace("date_",""),
  15. 'lang':lang,
  16. 'id_state':id_pre_state
  17. },
  18. evalScripts:true,
  19. onRequest: function() {
  20. // loading image
  21. },
  22. onSuccess: function(response) {
  23. // split response to get class,date and desc
  24. tmp=response.split('|');
  25.  
  26. // add returned class
  27. el.addClass(tmp[0]);
  28.  
  29. // change title to reflect new state
  30. el_title=el.getProperty('title');
  31. new_title=tmp[1]+" - "+tmp[2];
  32. el.setProperty('title',new_title);
  33.  
  34. // show message
  35. if(show_message) new_msg(tmp[1]+" "+tmp[2]);
  36. }
  37. }).send();
  38. }
  39.  


tylko skąd się to ma brać: id_predefined_state ? przecież w kodzie html nie ma tego , przypominam, że skrypt nie jest mojego autorstwa.
trueblue
W 6-tej linijce pobierana jest wartość elementu o id=id_predefined_state (z jakiegoś inputa).
Gdybyś wskazał na źródło tego kalendarza, byłoby łatwiej.
casperii
kalendarz jest generowany poprzez php:
  1. function draw_cal($id_item, $month, $year, $manage_type="Wolne"){
  2. global $lang;
  3.  
  4. $month=sprintf("%02s", $month);
  5. $today_timestamp = mktime(0,0,0,date('m'),date('d'),date('Y'));
  6. $this_month = getDate(mktime(0, 0, 0, $month, 1, $year));
  7. $first_week_day = $this_month["wday"];
  8. $days_in_this_month = cal_days_in_month(CAL_GREGORIAN, $month, $year);
  9. $day_counter_tot = 0;
  10.  
  11.  
  12. $month_last = $month - 1;
  13. $year_last = $year;
  14. if($month_last < 1){
  15. $month_last = 12;
  16. $year_last = $year - 1;
  17. }
  18. $days_in_last_month = cal_days_in_month(CAL_GREGORIAN, $month_last, $year_last);
  19.  
  20. if($show_week_num) $list_day_titles='<li class="weeknum_spacer"></li>';
  21.  
  22. if(AC_START_DAY=="sun"){
  23. for($k=0; $k<7; $k++){
  24. $weekday = mb_substr($lang["day_".$k.""],0,1,'UTF-8');
  25. $list_day_titles.='<li class="cal_weekday"> '.$weekday.'</li>';
  26. }
  27. }else{
  28. if ($first_week_day == 0) $first_week_day =7;
  29. for($k=1; $k<=7; $k++){
  30. if($k==7) $weekday = mb_substr($lang["day_0"][0],0,1,'UTF-8');
  31. else $weekday = mb_substr($lang["day_".$k.""],0,1,'UTF-8');
  32. $list_day_titles.='<li title="'.$lang["day_".$k.""].'"> '.$weekday.'</li>';
  33. }
  34. }
  35.  
  36. $j=1;
  37. if(AC_START_DAY=="sun")
  38. $first_week_day_start = $first_week_day; # start niedziela
  39.  
  40. else
  41. $first_week_day = $first_week_day-1; # start poniedziałek
  42.  
  43. $row_counter=0;
  44.  
  45. if($first_week_day!=7){
  46. if($show_week_num) $list_days.='<li class="weeknum">-</li>';
  47. $last_month_start_num=$days_in_last_month-$first_week_day+1;
  48. for($week_day = 0; $week_day < $first_week_day; $week_day++){
  49. $list_days.='<li class="cal_empty">'.$last_month_start_num.'</li>';
  50. ++$last_month_start_num;
  51. ++$j;
  52. ++$day_counter_tot;
  53.  
  54. if($day_counter_tot % 7==1) ++$row_counter;
  55. }
  56. }
  57. $week_day=$j;
  58.  
  59. $booked_days=array();
  60. $pdo = new db_connect();
  61. $sql = $pdo->prepare("
  62. SELECT
  63. t1.the_date,
  64. t2.class,
  65. t2.desc_pl AS the_state
  66. FROM
  67. bookings AS t1
  68. LEFT JOIN bookings_states AS t2 ON t2.id=t1.id_state
  69. WHERE
  70. t1.id_item=".$id_item."
  71. AND MONTH(t1.the_date)=".$month."
  72. AND YEAR(t1.the_date)=".$year."
  73. ");
  74. $sql->execute();
  75.  
  76. while($row = $sql->fetch()){
  77. $booked_days[$row["the_date"]]=array("class"=>$row["class"],"state"=>$row["the_state"]);
  78. }
  79.  
  80.  
  81. for($day_counter = 1; $day_counter <= $days_in_this_month; $day_counter++){
  82.  
  83. $day_classes = "";
  84. $day_title_state= " - ".$lang["available"];
  85.  
  86. $day_classes.=' clickable';
  87. $date_timestamp = mktime(0,0,0, $month,($day_counter),$year);
  88.  
  89. $week_num=date("W",$date_timestamp);
  90. if($week_num!=$last_week_num){
  91. }
  92.  
  93. if($date_timestamp==$today_timestamp) $day_classes.=' today';
  94.  
  95. $date_db = $year."-".sprintf("%02s",$month)."-".sprintf("%02s",$day_counter);
  96.  
  97. if(AC_DATE_DISPLAY_FORMAT=="us") $date_format = $month."/".$day_counter."/".$year;
  98. else $date_format = $day_counter."/".$month."/".$year;
  99.  
  100. if(array_key_exists($date_db,$booked_days)){
  101. $day_classes.=" ".$booked_days[$date_db]["class"];
  102. $day_title_state=" - ".$booked_days[$date_db]["state"];
  103. }
  104.  
  105. if( $date_timestamp<$today_timestamp){
  106. $day_classes.=" past";
  107.  
  108. if(AC_ACTIVE_PAST_DATES=="off"){
  109. $day_classes=str_replace(' clickable','',$day_classes);
  110. }
  111. }
  112.  
  113. $getdate=getdate($date_timestamp);
  114. $day_num=$getdate["wday"]+1;
  115. if ($day_num % 7 == 1) $day_classes.=' weekend';
  116. elseif ($day_num % 6 == 1) $day_classes.=' weekend';
  117.  
  118. $list_days .= '
  119. <li class="'.$day_classes.' " id="date_'.$date_db.'" title="'.$date_format.$day_title_state.'" data-date="'.$date_format.'">'.$day_counter.'</li>';
  120.  
  121. $week_day %= 7;
  122. ++$week_day;
  123. ++$day_counter_tot;
  124.  
  125. if($show_week_num){
  126. if ($week_day==1) $list_days .= '<li class="weeknum">'.$week_num.'</li>';
  127. }
  128. $last_week_num=$week_num;
  129. if($day_counter_tot % 7==1) ++$row_counter;
  130. }
  131. $next_month_day=1;
  132.  
  133. while($row_counter<6){
  134.  
  135. for($till_day = $week_day; $till_day <=7; $till_day++){
  136. $list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
  137. ++$next_month_day;
  138. ++$day_counter_tot;
  139.  
  140. if($day_counter_tot % 7==1) ++$row_counter;
  141. }
  142. $week_day=1;
  143.  
  144. }
  145.  
  146. if($week_day > 1){
  147. for($till_day = $week_day; $till_day <=7; $till_day++){
  148. $list_days .= '<li class="cal_empty">'.$next_month_day.'</li>';
  149. ++$next_month_day;
  150. ++$day_counter_tot;
  151. }
  152. }
  153.  
  154. $the_cal='
  155. <div id="'.$month.'_'.$year.'" class="cal_title">'.$lang["month_".$month.""].' '.$year.'</div>
  156. <ul class="cal_weekday">
  157. '.$list_day_titles.'
  158. </ul>
  159. <ul>
  160. '.$list_days.'
  161. </ul>
  162. <div class="clear"></div>
  163. ';
  164. return $the_cal;
  165. }


Nie widzę, tutaj inputa
Źródło: link
trueblue
Miałem na myśli pochodzenie tego kalendarza, link. Ale wygląda na to, że to jakiś customowy skrypt.
Input nie musi być w kodzie PHP, może być wstrzykiwany dynamicznie w JS. Kod JS, który pokazałeś na pewno nie jest cały, widać to chociażby po tym, że w requeście przesyłane są zmienne, które w tym fragmencie nie są pobierane (id_item czy lang). Poszukaj id_predefined_state gdzieś w pozostałej części kodu JS.
casperii
@trueblue źródlo podałem wyżej:
lang , item pobieram są tutaj i pchane do js.

  1.  
  2. <script type="text/javascript" src="/js/calendar/mootools-core-1.3.2-full-compat-yc.js"></script>
  3. <script type="text/javascript" src="/js/calendar/mootools-cal-admin.js"></script>
  4. <script type="text/javascript">
  5. var date_hover = true;
  6. var show_message = true;
  7. var lang = 'pl';
  8. var url_ajax_cal = '/calendar.ajax.php';
  9. var url_ajax_update = '/update_calendar.ajax.php';
  10. var img_loading_day = '../images/calendar/ajax-loader-day.gif';
  11. var img_loading_month = '../images/calendar/ajax-loader-month.gif';
  12. var id_item = '2';
  13. var months_to_show = 5;
  14. var clickable_past = 'on';
  15. </script>


Przeszukałem wszystkie JS i nie ma: id_predefined_state
trueblue
Jest <select> o takim id w \ac-admin\bookings.admin.php
A swoją drogą, czy Tobie nie jest potrzebne id_item do identyfikacji rekordu, a nie id_predefined_state?
casperii
id_item to numer oferty, ja potrzebuje id_state (czyli nazwa rezerwacja / nie potwierdzona)

Nie rozumiem co robię, źle jeśli mam zwykłe mysql_query jest ok, jeśli zastąpie to pdo to tylko 1 pobiera:


działa mysql_query:
  1. if(!$db_lnk = mysql_connect($db_host,$db_user,$db_pass))
  2. {
  3. echo("Nie udało się nawiązać połączenia z serwerem MySQL!<br/>");
  4. };
  5.  
  6. if(!mysql_select_db("$db_base"))
  7. {
  8. echo("Baza danych niedostępna!<br/>");
  9. };
  10.  
  11. $the_date = $_GET["the_date"];
  12. $id_item = $_GET["id_item"];
  13.  
  14.  
  15. if( ($_REQUEST["id_item"]=="") || ($_REQUEST["the_date"]=="")){
  16. die("Error");
  17. }
  18.  
  19. $list_states=array();
  20.  
  21. $sql="SELECT * FROM bookings_states WHERE state=1 ORDER BY list_order ASC";
  22. $res=mysql_query($sql) or die("Error getting states");
  23. while($row=mysql_fetch_assoc($res)){
  24. $list_states[$row["id"]]=array("class"=>"".$row["class"]."","desc"=>"".$row["desc_pl"]."");
  25. }
  26.  
  27. if($_GET["id_state"]=="Wolne"){
  28. $update="DELETE FROM bookings WHERE id_item='".$id_item."' AND the_date='".$the_date."' LIMIT 1";
  29. $new_class="";
  30. $new_desc =$lang["available"];
  31. }else{
  32. $sql="SELECT id_state FROM bookings WHERE id_item='".$id_item."' AND the_date='".$the_date."'";
  33. $res=mysql_query($sql);
  34. if(mysql_num_rows($res)==0){
  35.  
  36. if($_GET["id_state"]!="") $new_state = $_GET["id_state"];
  37. else $new_state = key($list_states);
  38. if($debug) echo "<br>New state first key ".$new_state;
  39. $new_desc = $list_states[$new_state]["desc"];
  40. $new_class = $list_states[$new_state]["class"];
  41. $update = "INSERT INTO bookings SET id_item='".$id_item."',the_date='".$the_date."', id_state='".$new_state."'";
  42. }else{
  43. $row=mysql_fetch_assoc($res);
  44. if($debug) echo "<br>".print_r($row);
  45.  
  46. $current_state_id=$row["id_state"];
  47. if($debug) echo "<br>Current ID: ".$current_state_id;
  48.  
  49. foreach($list_states as $id=>$val){
  50. if($id==$current_state_id) break;
  51. next($list_states);
  52. }
  53.  
  54. if($_GET["id_state"]!="") $new_state = $_GET["id_state"];
  55. else $new_state = key($list_states);
  56. if($debug) echo "<br>New State: ".$new_state;
  57. if($new_state==""){
  58.  
  59. $update="DELETE FROM bookings WHERE id_item='".$id_item."' AND the_date='".$the_date."' LIMIT 1";
  60. $new_class="";
  61. $new_desc =$lang["available"];
  62. }else{
  63. $update="UPDATE bookings SET id_state='".$new_state."' WHERE id_item='".$id_item."' AND the_date='".$the_date."' LIMIT 1";
  64.  
  65. $new_desc = $list_states[$new_state]["desc"];
  66. $new_class = $list_states[$new_state]["class"];
  67. }
  68.  
  69. }
  70. }
  71.  
  72. if(!mysql_query($update));
  73.  
  74.  
  75. $sql="SELECT * FROM bookings_last_update WHERE id_item='".$id_item."'";
  76. if(!$res=mysql_query($sql)) die("ERROR GETTING CHECKING UPDATE DATE.<br>".mysql_error());
  77. if(mysql_num_rows($res)==0) $update="INSERT INTO bookings_last_update SET id_item='".$id_item."', date_mod=now()";
  78. else $update="UPDATE bookings_last_update SET date_mod=now() WHERE id_item='".$id_item."' LIMIT 1";
  79.  
  80. mysql_query($update);
  81.  
  82.  
  83. $date_bits=explode("-",$the_date);
  84. $date_format=$date_bits[2]."/".$date_bits[1]."/".$date_bits[0];
  85.  
  86. echo $new_class."|".$date_format."|".$new_desc;




nie działa pdo:
  1. $the_date = $_GET["the_date"];
  2. $id_item = $_GET["id_item"];
  3.  
  4.  
  5. if( ($_GET["id_item"]=="") || ($_GET["the_date"]=="")){
  6. die("Error");
  7. }
  8.  
  9. $list_states=array();
  10. $pdo = new db_connect();
  11. $sql = $pdo->prepare("SELECT * FROM bookings_states WHERE state=1 ORDER BY list_order ASC");
  12. $sql->execute();
  13. while($row = $sql->fetch()){
  14. $list_states[$row["id"]]=array("class"=>"".$row["class"]."","desc"=>"".$row["desc_pl"]."");
  15. }
  16.  
  17. if($_GET["id_state"]=="Wolne"){
  18. $update = $pdo->prepare("DELETE FROM bookings WHERE id_item='".$id_item."' AND the_date='".$the_date."' LIMIT 1");
  19. $update->execute();
  20. $new_class="";
  21. $new_desc = $lang["pl"];
  22. }else{
  23. $sql = $pdo->prepare("SELECT id_state FROM bookings WHERE id_item='".$id_item."' AND the_date='".$the_date."'");
  24. $sql->execute();
  25. $res = $sql->fetchColumn();
  26.  
  27. if($res==0){
  28. if($_GET["id_state"]!=""){
  29. $new_state = $_GET["id_state"];
  30. }else{
  31. $new_state = key($list_states);
  32. }
  33. if($debug) echo "New state first key ".$new_state;
  34. $new_desc = $list_states[$new_state]["desc"];
  35. $new_class = $list_states[$new_state]["class"];
  36. $update = $pdo->prepare("INSERT INTO bookings SET id_item='".$id_item."',the_date='".$the_date."', id_state='".$new_state."'");
  37. $update->execute();
  38. }else{
  39. $row = $sql->fetch();
  40. if($debug) echo "<br>".print_r($row);
  41.  
  42. $current_state_id = $row["id_state"];
  43. if($debug) echo "Current ID: ".$current_state_id;
  44.  
  45. foreach($list_states as $id=>$val){
  46. if($id == $current_state_id) break;
  47. next($list_states);
  48. }
  49.  
  50. if($_GET["id_state"]!="")
  51. $new_state = $_GET["id_state"];
  52. else
  53. $new_state = key($list_states);
  54. if($debug) echo "New State: ".$new_state;
  55.  
  56. if($new_state==""){
  57. $update = $pdo->prepare("DELETE FROM bookings WHERE id_item='".$id_item."' AND the_date='".$the_date."' LIMIT 1");
  58. $update->execute();
  59. $new_class="";
  60. $new_desc = $lang["available"];
  61. }else{
  62. $update = $pdo->prepare("UPDATE bookings SET id_state='".$new_state."' WHERE id_item='".$id_item."' AND the_date='".$the_date."' LIMIT 1");
  63. $update->execute();
  64. $new_desc = $list_states[$new_state]["desc"];
  65. $new_class = $list_states[$new_state]["class"];
  66. }
  67.  
  68. }
  69. }
  70.  
  71. $sql = $pdo->prepare("SELECT * FROM bookings_last_update WHERE id_item='".$id_item."'");
  72. $sql->execute();
  73. if($sql->fetchColumn() == 0){
  74. $update = $pdo->prepare("INSERT INTO bookings_last_update SET id_item='".$id_item."', date_mod=now()");
  75. $update->execute();
  76. }else{
  77. $update = $pdo->prepare("UPDATE bookings_last_update SET date_mod=now() WHERE id_item='".$id_item."' LIMIT 1");
  78. $update->execute();
  79. }
  80.  
  81.  
  82.  
  83. if($debug) echo "SQL: ".$update."New Class: ";
  84. $date_bits = explode("-",$the_date);
  85. $date_format = $date_bits[2]."/".$date_bits[1]."/".$date_bits[0];
  86.  
  87. echo $new_class."|".$date_format."|".$new_desc;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.