fullCalendar 事件发布方法到 MySQL
Posted
技术标签:
【中文标题】fullCalendar 事件发布方法到 MySQL【英文标题】:fullCalendar events post method to MySQL 【发布时间】:2012-10-31 14:06:15 【问题描述】:我正在尝试使用 fullCalendar 和 mysql 创建一个 MySQL 支持的事件接口。我尝试操作 fullCalendar 文档中的示例,并成功地从我的数据库中创建了一个事件源。
我现在正在尝试创建一个eventDrop
调用,它将事件ID、标题和开始时间发送到数据库。我使用之前question 中的代码来创建eventDrop
调用,这是整个callendar 页面的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;
?>
数据库没有接收到事件数据。
【问题讨论】:
【参考方案1】:这是我得出的结论,在我的测试和公共服务器上运行它没有问题。 我采用了 FullCalendar,这是我使用的格式。
数据库真的很简单。
id integer 11 chars primary key auto-increment,
title varchar 50,
start varchar 50,
end varchar 50,
url varchar 50.
这是index.php
或index.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);
?>
【讨论】:
【参考方案2】:print $query
- 最后应该有一个;
【讨论】:
请把这些单行答案放在评论里【参考方案3】:一旦删除插入查询中的列名并尝试,如果你没有得到那么让我们考虑一下。做这样的事情
mysql_query(INSERT INTO `events` VALUES ('$id', '$title', '$start', '$end', ''));
在插入之前打印帖子值,如果看起来很清楚,然后检查您的查询。
回显查询并退出,你可能会得到这样的结果
mysql_query(INSERT INTO `events` VALUES ('23', 'event title', 'start date', 'end date', ''));
运行此查询以查找错误(如果有)
【讨论】:
感谢您的回答。我想我理解并开始使用直接值测试我的提交文件并检查数据库,但没有运气。我已将 php 文件更改为:$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 `直接通过 url 传递变量时出现内部服务器错误?以上是关于fullCalendar 事件发布方法到 MySQL的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google 日历在 Fullcalendar 中选择事件
将事件添加到从服务器FullCalendar返回的事件数组中
FullCalendar 客户端事件发送到 Laravel 控制器