javascript - 如何通过 fullcalendar 使用 AJAX 将 boostrap 模式输入插入到 SQL 表中
问题描述
我已经尝试了一段时间来让这个工作。我正在努力从模式中获取用户输入并将其插入到我在 phpmyadmin 中的数据库中。任何帮助将不胜感激。
1)使用选择回调我提出了一个模式:
select: function(start, end, allDay)
{
$('#myModal').modal('show');
},
2) HTML 中的模态本身:
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Add Event</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form>
<div class="form-group">
<label for="FormControlInput1">Task Title</label>
<input type="text" class="form-control" id="title" placeholder="Enter Task Title">
</div>
<div class="form-group">
<label for="FormControlInput2">Task Number</label>
<input type="text" class="form-control" id="number" placeholder="Enter Task Number>
</div>
<div class="form-group">
<label for="FormControlInput3">Location</label>
<input type="text" class="form-control" id="location" placeholder="Enter Location">
</div>
<div class="form-group">
<label for="FormControlTextarea1">Tooling Required</label>
<textarea class="form-control" id="tooling" placeholder="Enter the tools required for the task here" rows="3"></textarea>
</div>
<div class="form-group">
<label for="FormControlTextarea2">Consumables</label>
<textarea class="form-control" id="consumables" placeholder="Enter the consumables required for the task here" rows="3"></textarea>
</div>
<div class="form-group">
<label for="FormControlSelect1">Safety Condition</label>
<select class="form-control" id="safety">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" id="buttonAddEvent">Add Event</button>
</div>
</div>
</div>
</div>
3)此时我想使用我制作的 insert.php 文件,该文件适用于代码中的其他函数:
<?php
//insert.php
$connect = new PDO('mysql:host=hostname;dbname=dbname', 'username', 'password');
if(isset($_POST["title"]))
{
$query = "
INSERT INTO events
(title, number, location, tooling, consumables, safety, start_event, end_event)
VALUES (:title, :number, :location, :tooling, :consumables, :safety, :start_event, :end_event)
";
$statement = $connect->prepare($query);
$statement->execute(
array(
':title' => $_POST['title'],
':number' => $_POST['number'],
':location' => $_POST['location'],
':tooling' => $_POST['tooling'],
':consumables' => $_POST['consumables'],
':safety' => $_POST['safety'],
':start_event' => $_POST['start'],
':end_event' => $_POST['end']
)
);
}
?>
我通常使用以下代码插入数据,但是这使用了我想用模态输入替换的 prompts() :
select: function(start, end, allDay)
{
var title = prompt("Enter Task Title");
if(title)
{
var number = prompt("Enter Task Number");
var location = prompt("Enter Train Location");
var tooling = prompt("Enter Tooling Required");
var consumables = prompt("Enter Consumables Required");
var start = $.fullCalendar.formatDate(start, "Y-MM-DD HH:mm:ss");
var end = $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss");
$.ajax({
url:"insert.php",
type:"POST",
data:{title:title, number:number, location:location, tooling:tooling, consumables:consumables, start:start, end:end},
success:function()
{
calendar.fullCalendar('refetchEvents');
}
})
}
},
解决方案
需要使用 .on() 将数据从模态输入传递到变量
select: function(start, end, allDay)
{
var start = $.fullCalendar.formatDate(start, "Y-MM-DD HH:mm:ss");
var end = $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss");
$('#myModal').modal('show')
$('#buttonAddEvent').on('click', function (){
var title = $("#myModal #title").val().trim();
var number = $("#myModal #number").val().trim();
var location = $("#myModal #location").val().trim();
var tooling = $("#myModal #tooling").val().trim();
var consumables = $("#myModal #consumables").val().trim();
var safety = $("#myModal #safety").val().trim();
var mockEvent = {title:title, number:number, location:location, tooling:tooling, consumables:consumables, safety:safety, start:start, end:end};
$('#calendar').fullCalendar('renderEvent', mockEvent);
$('#buttonAddEvent').unbind('click');
$('#myModal').modal('hide');
$.ajax({
url:"insert.php",
type:"POST",
data:{title:title, number:number, location:location, tooling:tooling, consumables:consumables, safety:safety, start:start, end:end},
success:function()
{
calendar.fullCalendar('refetchEvents');
}
});
});
},
感谢@ADyson 指出正确的方向。
推荐阅读
- sql - 插入行时有没有办法避免“此处不允许列”错误
- php - Ckeditor textarea 的值在第一次提交时未发布,但它适用于第二次提交,其他字段(如图像属性等)是不可编辑的
- reactjs - 使用 React 和 Firestore 数据库的无限循环图像 - 如何获取我的数据?
- next.js - Next JS nextjs 重写未按预期工作
- filepond - 对 Filepond 实例进行编辑后,如何绕过跳过还原和上传?
- ios - 一个模型如何通知另一个模型特定属性发生了变化?
- py2app - 在 py2app 中隐藏默认脚本
- python - pandas 比应用 lambda 在每一行中应用逻辑更快的方法?
- java - 如何修复“编译器为空,也许您在 JRE 环境中,请更改为 JDK 环境”
- python-3.x - 如何在后台运行机器学习训练?