I’ve finally figured out how to read data into my calendar from my mysql database. I’m struggling trying to figure out how and where to add code to update and add new events. Here’s the code I am using to try to update a record:
?php
$connect=mysqli_connect(“localhost”,“username”,“password”,“database”);if(isset($_POST[“id”]))
{
$query = "
UPDATE events
SET title=:title, start=:start, end=:end, allDay=:allDay, color=:color
WHERE id=:id";
$statement = $connect->prepare($query);
$statement->execute(
array(
‘:title’ => $_POST[‘title’],
‘:start’ => $_POST[‘start’],
‘:end’ => $_POST[‘end’],
‘:allDay’ => $_POST[‘allDay’],
‘:color’ => $_POST[‘color’],
‘:id’ => $_POST[‘id’]
)
);
}
?
I’ve tried to add this on all 3 of the updateEvent sections in the demo below to no avail. I’m not able to find any ‘back end’ documentation and have been struggling for 6 days on google trying to find a solution. I am hoping someone in the community could point me in the right direction.
Thanks in advance!
mobiscroll.setOptions({
theme: ‘ios’,
themeVariant: ‘light’
});var oldEvent,
tempEvent = {},
deleteEvent,
restoreEvent,
colorPicker,
tempColor,
titleInput = document.getElementById(‘event-title’),
descriptionTextarea = document.getElementById(‘event-desc’),
allDaySwitch = document.getElementById(‘event-all-day’),
freeSegmented = document.getElementById(‘event-status-free’),
busySegmented = document.getElementById(‘event-status-busy’),
deleteButton = document.getElementById(‘event-delete’),
colorSelect = document.getElementById(‘event-color-picker’),
pickedColor = document.getElementById(‘event-color’),
colorElms = document.querySelectorAll(‘.crud-color-c’),
datePickerResponsive = {
medium: {
controls: [‘calendar’],
touchUi: false
}
},
datetimePickerResponsive = {
medium: {
controls: [‘calendar’, ‘time’],
touchUi: false
}
},
myData = <?php
// create a connection to the DB using the server address, username, password, and database name.
$connect=mysqli_connect(“localhost”,“username”,“password”,“database”);if ($connect) {
echo “”;
} else {
die("Connection failed. Reason: ".mysqli_connect_error());
}$sql=“SELECT DATE_FORMAT(start, ‘%Y-%m-%dT%TZ’) AS start, DATE_FORMAT(end, ‘%Y-%m-%dT%TZ’) AS end, title, allDay, color FROM eventsCal”;
$result = mysqli_query($connect, $sql);
$json_array = array();while($row = mysqli_fetch_assoc($result)) { $json_array[] = $row; } echo json_encode($json_array);
?>;
function createAddPopup(elm) {
// hide delete button inside add popup
deleteButton.style.display = ‘none’;deleteEvent = true; restoreEvent = false; // set popup header text and buttons for adding popup.setOptions({ headerText: 'New event', buttons: ['cancel', { text: 'Add', keyCode: 'enter', handler: function () { calendar.updateEvent({ id: tempEvent.id, title: tempEvent.title, description: tempEvent.description, allDay: tempEvent.allDay, start: tempEvent.start, end: tempEvent.end, color: tempEvent.color, }); // navigate the calendar to the correct view calendar.navigate(tempEvent.start); deleteEvent = false; popup.close(); }, cssClass: 'mbsc-popup-button-primary' }] }); // fill popup with a new event data mobiscroll.getInst(titleInput).value = tempEvent.title; mobiscroll.getInst(descriptionTextarea).value = ''; mobiscroll.getInst(allDaySwitch).checked = true; range.setVal([tempEvent.start, tempEvent.end]); mobiscroll.getInst(busySegmented).checked = true; range.setOptions({ controls: ['date'], responsive: datePickerResponsive }); pickedColor.style.background = ''; // set anchor for the popup popup.setOptions({ anchor: elm }); popup.open();
}
function createEditPopup(args) {
var ev = args.event;// show delete button inside edit popup deleteButton.style.display = 'block'; deleteEvent = false; restoreEvent = true; // set popup header text and buttons for editing popup.setOptions({ headerText: 'Edit event', buttons: ['cancel', { text: 'Save', keyCode: 'enter', handler: function () { var date = range.getVal(); // update event with the new properties on save button click calendar.updateEvent({ id: ev.id, title: titleInput.value, description: descriptionTextarea.value, allDay: mobiscroll.getInst(allDaySwitch).checked, start: date[0], end: date[1], free: mobiscroll.getInst(freeSegmented).checked, color: ev.color, }); // navigate the calendar to the correct view calendar.navigate(date[0]);; restoreEvent = false; popup.close(); }, cssClass: 'mbsc-popup-button-primary' }] }); // fill popup with the selected event data mobiscroll.getInst(titleInput).value = ev.title || ''; mobiscroll.getInst(descriptionTextarea).value = ev.description || ''; mobiscroll.getInst(allDaySwitch).checked = ev.allDay || false; range.setVal([ev.start, ev.end]); pickedColor.style.background = ev.color || ''; if (ev.free) { mobiscroll.getInst(freeSegmented).checked = true; } else { mobiscroll.getInst(busySegmented).checked = true; } // change range settings based on the allDay range.setOptions({ controls: ev.allDay ? ['date'] : ['datetime'], responsive: ev.allDay ? datePickerResponsive : datetimePickerResponsive }); // set anchor for the popup popup.setOptions({ anchor: args.domEvent.currentTarget }); popup.open();
}
var calendar = mobiscroll.eventcalendar(‘#demo-add-delete-event’, {
clickToCreate: ‘double’,
dragToCreate: true,
dragToMove: true,
dragToResize: true,
view: {
calendar: { labels: true }
},
data: myData,
onEventClick: function (args) {
oldEvent = Object.assign({}, args.event);
tempEvent = args.event;if (!popup.isVisible()) { createEditPopup(args); } }, onEventCreated: function (args) { popup.close(); // store temporary event tempEvent = args.event; createAddPopup(args.target); }, onEventDeleted: function () { mobiscroll.snackbar({ button: { action: function () { calendar.addEvent(args.event); }, text: 'Undo' }, message: 'Event deleted' }); }
});
var popup = mobiscroll.popup(‘#demo-add-popup’, {
display: ‘bottom’,
contentPadding: false,
fullScreen: true,
onClose: function () {
if (deleteEvent) {
calendar.removeEvent(tempEvent);
} else if (restoreEvent) {
calendar.updateEvent(oldEvent);
}
},
responsive: {
medium: {
display: ‘anchored’,
width: 400,
fullScreen: false,
touchUi: false
}
}
});titleInput.addEventListener(‘input’, function (ev) {
// update current event’s title
tempEvent.title = ev.target.value;
});descriptionTextarea.addEventListener(‘change’, function (ev) {
// update current event’s title
tempEvent.description = ev.target.value;
});allDaySwitch.addEventListener(‘change’, function () {
var checked = this.checked
// change range settings based on the allDay
range.setOptions({
controls: checked ? [‘date’] : [‘datetime’],
responsive: checked ? datePickerResponsive : datetimePickerResponsive
});// update current event's allDay property tempEvent.allDay = checked;
});
var range = mobiscroll.datepicker(‘#event-date’, {
controls: [‘date’],
select: ‘range’,
startInput: ‘#start-input’,
endInput: ‘#end-input’,
showRangeLabels: false,
touchUi: true,
responsive: datePickerResponsive,
onChange: function (args) {
var date = args.value;
// update event’s start date
tempEvent.start = date[0];
tempEvent.end = date[1];
}
});document.querySelectorAll(‘input[name=event-status]’).forEach(function (elm) {
elm.addEventListener(‘change’, function () {
// update current event’s free property
tempEvent.free = mobiscroll.getInst(freeSegmented).checked;
});
});deleteButton.addEventListener(‘click’, function () {
// delete current event on button click
calendar.removeEvent(oldEvent);
popup.close();// save a local reference to the deleted event var deletedEvent = tempEvent; mobiscroll.snackbar({ button: { action: function () { calendar.addEvent(deletedEvent); }, text: 'Undo' }, message: 'Event deleted' });
});
colorPicker = mobiscroll.popup(‘#demo-event-color’, {
display: ‘bottom’,
contentPadding: false,
showArrow: false,
showOverlay: false,
buttons: [
‘cancel’,
{
text: ‘Set’,
keyCode: ‘enter’,
handler: function (ev) {
setSelectedColor();
},
cssClass: ‘mbsc-popup-button-primary’
}
],
responsive: {
medium: {
display: ‘anchored’,
anchor: document.getElementById(‘event-color-cont’),
buttons: {}
}
}
});function selectColor(color, setColor) {
var selectedElm = document.querySelector(‘.crud-color-c.selected’);
var newSelected = document.querySelector(‘.crud-color-c[data-value="’ + color + ‘"]’);if (selectedElm) { selectedElm.classList.remove('selected') } if (newSelected) { newSelected.classList.add('selected') } if (setColor) { pickedColor.style.background = color || ''; }
}
function setSelectedColor() {
tempEvent.color = tempColor;
pickedColor.style.background = tempColor;
colorPicker.close();
}colorSelect.addEventListener(‘click’, function () {
selectColor(tempEvent.color || ‘’);
colorPicker.open();
});colorElms.forEach(function (elm) {
elm.addEventListener(‘click’, function () {
tempColor = elm.getAttribute(‘data-value’);
selectColor(tempColor);if (!colorPicker.s.buttons.length) { setSelectedColor(); } });
});