2012-11-12 41 views
5

我正在嘗試使用fullCalendar和MySQL創建MySQL支持的事件接口。我試圖操作fullCalendar文檔中的示例,併成功從我的數據庫創建了一個事件源。fullCalendar事件發佈到MySQL的方法

我現在試圖創建一個eventDrop調用,它將一個事件ID,標題和開始時間發送到數據庫。我使用的代碼從以前的question創建eventDrop呼叫,這裏是JavaScript整個卡倫德頁:

$(document).ready(function() {  
    /* initialize the external events 
    -----------------------------------------------------------------*/ 

    $('#external-events div.external-event').each(function() { 

     // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/) 
     // it doesn't need to have a start or end 
     var eventObject = { 
      title: $.trim($(this).text()) // use the element's text as the event title 
     }; 

     // store the Event Object in the DOM element so we can get to it later 
     $(this).data('eventObject', eventObject); 

     // make the event draggable using jQuery UI 
     $(this).draggable({ 
      zIndex: 999, 
      revert: true,  // will cause the event to go back to its 
      revertDuration: 0 // original position after the drag 
     });      
    });  

    /* initialize the calendar 
    -----------------------------------------------------------------*/ 

    $('#calendar').fullCalendar({ 
     header: { 
      left: 'prev,next today', 
      center: 'title', 
      right: 'month,agendaWeek,agendaDay' 
     }, 
     editable: true, 
     droppable: true, // this allows things to be dropped onto the calendar !!! 
     drop: function(date, allDay) { // this function is called when something is dropped 

      // retrieve the dropped element's stored Event Object 
      var originalEventObject = $(this).data('eventObject'); 

      // we need to copy it, so that multiple events don't have a reference to the same object 
      var copiedEventObject = $.extend({}, originalEventObject); 

      // assign it the date that was reported 
      copiedEventObject.start = date; 
      copiedEventObject.allDay = allDay; 

      // render the event on the calendar 
      // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/) 
      $('#calendar').fullCalendar('renderEvent', copiedEventObject, true);     

      // if so, remove the element from the "Draggable Events" list 
      $(this).remove();      
     }, 

     // events from mysql database 
     events: "/json-events.php", 

     // submit to database 
     eventDrop: function(calEvent, jsEvent, view) { 
      var method = 'POST'; 
      var path = 'submit.php'; 
      var params = new Array(); 
      params['id'] = calEvent.id; 
      params['start'] = calEvent.start; 
      params['end'] = calEvent.end; 
      params['title'] = calEvent.title; 
      post_to_url(path, params, method); 
    } 
    });  
}); 

的PHP文件我希望會收到POST數據,並將其與最終插入到數據庫時間等於開始時間加上15分鐘(下面答案後編):

<?php 

mysql_connect("") or die(mysql_error()); 
mysql_select_db("") or die(mysql_error()); 

$id = $_POST["id"]; 
$title = $_POST["title"]; 
$start = $_POST["start"]; 
$end = date(Y-m-d T H:i:s , strtotime($start)+900); 

$query = "INSERT INTO `events` VALUES (`$id`, `$title`, `$start`, `$end`, ``)"; 
mysql_query($query); 
print $query; 
?> 

數據庫沒有接收到所述的事件數據。

回答

7

這是一個;是我提出的結論,我沒有任何問題在我的測試和公共服務器上運行。 我採取了FullCalendar,這是我使用的格式。

該數據庫非常簡單。

id integer 11 chars primary key auto-increment, 
title varchar 50, 
start varchar 50, 
end varchar 50, 
url varchar 50. 

這是index.phpindex.html文件。

<!DOCTYPE html> 
<html> 
<head> 
<link href='css/fullcalendar.css' rel='stylesheet' /> 
<link href='css/fullcalendar.print.css' rel='stylesheet' media='print' /> 
<script src='js/jquery-1.9.1.min.js'></script> 
<script src='js/jquery-ui-1.10.2.custom.min.js'></script> 
<script src='js/fullcalendar.min.js'></script> 
<script> 
    $(document).ready(function() { 
     $('#calendar').fullCalendar({ 
      header: { 
       left: 'prev,next today', 
       center: 'title', 
       right: 'month,agendaWeek,agendaDay' 
      }, 
      editable: true, 
      events: "json.php", 
      eventDrop: function(event, delta) { 
       alert(event.title + ' was moved ' + delta + ' days\n' + 
        '(should probably update your database)'); 
      }, 
      loading: function(bool) { 
       if (bool) $('#loading').show(); 
       else $('#loading').hide(); 
      } 
     }); 
    }); 
</script> 
<style> 
    body { 
     margin-top: 40px; 
     text-align: center; 
     font-size: 14px; 
     font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif; 
     } 
    #loading { 
     position: absolute; 
     top: 5px; 
     right: 5px; 
     } 
    #calendar { 
     width: 900px; 
     margin: 0 auto; 
     } 
</style> 
</head> 
<body> 
<div id='loading' style='display:none'>loading...</div> 
<div id='calendar'></div> 
<p>json.php needs to be running in the same directory.</p> 
</body> 
</html> 

這是json.php文件。

<?php 
mysql_pconnect("localhost", "root", "") or die("Could not connect"); 
mysql_select_db("calendar") or die("Could not select database"); 


$rs = mysql_query("SELECT * FROM events ORDER BY start ASC"); 
$arr = array(); 

while($obj = mysql_fetch_object($rs)) { 
$arr[] = $obj; 
} 
echo json_encode($arr); 
?> 
0

一旦刪除插入查詢中的列名並嘗試,如果您沒有得到,那就讓我們考慮一下吧。做這樣的事情

mysql_query(INSERT INTO `events` VALUES ('$id', '$title', '$start', '$end', '')); 

只需在插入前打印帖子值,如果看起來很清楚,然後檢查您的查詢。

回聲查詢並退出,你可能會得到這樣的事情

mysql_query(INSERT INTO `events` VALUES ('23', 'event title', 'start date', 'end date', '')); 

運行此查詢發現錯誤,如果任何

+0

感謝您的回答。我想我理解並開始用直接值測試我的提交文件,並且沒有運氣檢查數據庫。我已經將php文件更改爲:'$ id = $ _POST [「id」]; $ title = $ _POST [「title」]; $ start = $ _POST [「start」]; $結束日期=(Y-M-dŤH:I:S,的strtotime($開始)900); $查詢= 「INSERT INTO'events' VALUES('$ id','$ title','$ start','$ end','')」; mysql_query($ query); 打印$查詢'直接傳遞變量時,通過url我得到一個內部服務器錯誤? – SlartyBartfast

0

print $query - 應該在年底

+3

請在評論中提供這些類型的答案 –