我正在使用FullCalendar.io,并允许用户选择一个事件,并成功发布到网页。下面是日历逻辑的代码。
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
plugins: [ 'dayGrid', 'interaction' ],
//Behavior of calendar object
selectable: true,
selectMirror: true,
unselectAuto: true,
eventLimit: true,
header:
{
left: 'prevYear,prev',
center: 'title',
right: 'next,nextYear'
},
footer:
{
center: 'today'
},
//Logic for clicking on a date
dateClick: function(event_click)
{
var event_name = prompt("Enter a title for this event", "New Event");
//Add event to the calendar
calendar.addEvent({
title: event_name,
start: event_click.date,
allDay: true
});
},
//Logic for clicking on an event
eventClick: function(event_click)
{
alert(event_click.event.title + ' event removed'),
//Remove event from calendar
event_click.remove(),
calendar.render()
}
});
calendar.render();
});
我还有一个连接到数据库的php文件,并有一个如下所示的insert语句。
<?php
$server_name = "localhost";
$username = 'root';
$password = 'root'
$db_name = 'testCalendardb';
$table_name = 'Event';
//Opens connection to the db
function openConn()
{
try {
$conn = new PDO("mysql:host=$server_name;dbname=$db_name", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected to DB";
return $conn;
} catch(PDOException $exception) {
echo "Connection Failed: Error: ".$exception->getMessage();
}
}
function insert($date, $name) {
try {
$conn = openConn();
$sql = "INSERT INTO $table_name(date, name) VALUES (:date, :name)";
$sql->bindParam(':date', $date);
$sql->bindParam(':name', $name);
$conn->exec($sql);
echo "New Record Added";
} catch(PDOException $exception) {
echo $sql."<br>".$exception->getMessage();
}
}
//Closes the door
function closeConn($conn)
{
$conn = null;
}
?>
我的问题是我很难将事件存储在mysql数据库中。我在网上看了很多教程,并且有基础进行Web开发。我觉得我错过了将数据实际发送到数据库的步骤,这是我在任何教程中都找不到的。我使用的教程已经过时,并不适用于最新版本的mysql / php / js。
总结一下,我如何使用我的php脚本将事件插入我的数据库?
我将不胜感激任何帮助。
听起来你想要创建一个AJAX脚本来将数据发送到你的php文件。就像是:
//jquery required for this approach
$.ajax({
url: 'add_events.php',
data: 'event_name='+ title+'&event_date='+ start2 +'&event_end='+ end2,
type: "POST"
});
然后在你的php文件中你可以添加这个来获取存储在php变量中的数据:
$event_date = $_GET['event_date'];
$event_name = $_GET['event_name'];
然后你的功能变成了:
function insert() {
try {
$table_name = 'Event';
$conn = openConn();
$sql = "INSERT INTO $table_name(date, name) VALUES ($event_date, $event_name)";
$conn->execute($sql);
echo "New Record Added";
} catch(PDOException $exception) {
echo $sql."<br>".$exception->getMessage();
}
}
insert();
希望这有助于或帮助您走上正轨。
*编辑以包括函数调用和地址错误以及Dharman指出的其他问题。
**另外查看javascript,看起来你也有删除事件的代码。您还需要添加ajax请求以查找并删除任何已创建事件的行。我建议让Event表结构遵循以下内容:
id, event_name, event_start, event_end, user_id
这样,当您编写删除行功能时,您将获得删除相应记录所需的信息。
您需要在js文件中的dataClick函数末尾添加:
//AJAX function to comunicate to PHP script
$.ajax({
type: "POST",
url: your_url_php_script.php,
data: {name:event_name, date: event_click.date},
success: function (data) {
console.log(data);
},
dataType: json
});
改变一点插入php功能:
function insert($date, $name) {
try {
$conn = openConn();
$sql = "INSERT INTO $table_name(date, name) VALUES (:date, :name)";
$sql->bindParam(':date', $date);
$sql->bindParam(':name', $name);
$conn->exec($sql);
return "New Record Added";
} catch(PDOException $exception) {
return $sql."<br>".$exception->getMessage();
}
}
而且你还需要将它添加到php脚本的末尾:
....
//Closes the door
function closeConn($conn)
{
$conn = null;
}
$name= $_POST['name'];
$date = $_POST['date'];
$query_result = insert($date, $name);
$result = array('name' => $_POST['name'], 'date' => $_POST['date'], 'message' =>$query_result);
//Always Return Encode the array into JSON for debuging
echo json_encode($result);
?>
此代码未经过测试