首页 > 其他分享 >FullCalendar 五:FullCalendar应用——编辑与删除日程事件

FullCalendar 五:FullCalendar应用——编辑与删除日程事件

时间:2023-05-17 19:37:46浏览次数:45  
标签:function 日程 删除 FullCalendar else 事件 POST php id


FullCalendar可以灵活运用到项目开发中,本站上一篇文章中,我们介绍了如何在FullCalendar新建日程事 件,今天我要给大家介绍的是如何在FullCalendar中编辑和删除日程事件,这样我们就完成了FullCalendar上的“增删改查”一系列操 作。



HTML

和上一篇文章FullCalendar应用——新建日程事件一样,HTML页面我们仍然使用cal_opt.html,这里HTML代码及相关js和css文件的载入就不再详述,如果您是第一次阅读本文,请先从FullCalendar系列文章第一篇看起。

jQuery

在日历视图中,我们通过单击需要编辑的日程事件项,调用fancybox弹出编辑层。FullCalendar提供了事件单击eventClick方法,请看代码:



$(function() { 
    $('#calendar').fullCalendar({ 
        //单击事件项时触发 
        eventClick: function(calEvent, jsEvent, view) { 
            $.fancybox({ 
                'type':'ajax', 
                'href':'event.php?action=edit&id='+calEvent.id 
            }); 
        } 
    }); 
});



 

单击事件项,调用了fancybox,和新建事件一样,采用ajax方式,通过传参,请求了编辑表单页面。

event.php

event.php根据请求过来的参数,读取对应id的日历事件,并将数据完整的现实在编辑表单中。我们将整个读取与显示编辑层的代码混编在 event.php中,当然实际开发中,你可能会使用zend、thinkphp等框架,让PHP和html模板分离。下面的代码我们将编辑模块写在了自 定义函数editform()中,那么event.php是根据传递的action参数来调用editform()的。

<?php 
function editform($id){ 
    $query = mysql_query("select * from calendar where id='$id'"); 
    $row = mysql_fetch_array($query); 
    if($row){ 
        $id = $row['id']; 
        $title = $row['title']; 
        $starttime = $row['starttime']; 
        $start_d = date("Y-m-d",$starttime); 
        $start_h = date("H",$starttime); 
        $start_m = date("i",$starttime); 
         
        $endtime = $row['endtime']; 
        if($endtime==0){ 
            $end_d = $startdate; 
            $end_chk = ''; 
            $end_display = "style='display:none'"; 
        }else{ 
            $end_d = date("Y-m-d",$endtime); 
            $end_h = date("H",$endtime); 
            $end_m = date("i",$endtime); 
            $end_chk = "checked"; 
            $end_display = "style=''"; 
        } 
         
        $allday = $row['allday']; 
        if($allday==1){ 
            $display = "style='display:none'"; 
            $allday_chk = "checked"; 
        }else{ 
            $display = "style=''"; 
            $allday_chk = ''; 
        } 
    } 
?> 
<link rel="stylesheet" type="text/css" href="css/jquery-ui.css"> 
<div class="fancy"> 
    <h3>编辑事件</h3> 
    <form id="add_form" action="do.php?action=edit" method="post"> 
    <input type="hidden" name="id" id="eventid" value="<?php echo $id;?>"> 
    <p>日程内容:<input type="text" class="input" name="event" id="event" style="width:320px"  
placeholder="记录你将要做的一件事..." value="<?php echo $title;?>"></p> 
    <p>开始时间:<input type="text" class="input datepicker" name="startdate"  
id="startdate" value="<?php echo $start_d;?>" readonly> 
    <span id="sel_start" <?php echo $display;?>><select name="s_hour"> 
        <option value="<?php echo $start_h;?>" selected><?php echo $start_h;?></option> 
        <option value="00">00</option> 
        ...//这里省略多个option,下同 
    </select>: 
    <select name="s_minute"> 
        <option value="<?php echo $start_m;?>" selected><?php echo $start_m;?></option> 
        <option value="00">00</option> 
        ... 
    </select> 
    </span> 
    </p> 
    <p id="p_endtime" <?php echo $end_display;?>>结束时间:<input type="text" class="input datepicker"  
name="enddate" id="enddate" value="<?php echo $end_d;?>" readonly> 
    <span id="sel_end"  <?php echo $display;?>><select name="e_hour"> 
        <option value="<?php echo $end_h;?>" selected><?php echo $end_h;?></option> 
        ... 
    </select>: 
    <select name="e_minute"> 
        <option value="<?php echo $end_m;?>" selected><?php echo $end_m;?></option> 
        ... 
    </select> 
    </span> 
    </p> 
    <p> 
    <label><input type="checkbox" value="1" id="isallday" name="isallday" <?php echo $allday_chk;?>>  
全天</label> 
    <label><input type="checkbox" value="1" id="isend" name="isend" <?php echo $end_chk;?>> 结束时间</label> 
    </p> 
    <div class="sub_btn"><span class="del"><input type="button" class="btn btn_del" id="del_event"  
value="删除"></span><input type="submit" class="btn btn_ok" value="确定">  
<input type="button" class="btn btn_cancel" value="取消" onClick="$.fancybox.close()"></div> 
    </form> 
</div> 
<?php }?>

 

关键是处理日期和时间的显示,当然这也不是本文重点,大家可以下载源码慢慢研究。

我们还需要加入代码处理表单提交和验证,和上文的新建事件一样,我们使用了jquery.form.js插件,代码也基本和新建事件一样。



$(function(){ 
    $(".datepicker").datepicker({minDate: -3,maxDate: 3}); 
    $("#isallday").click(function(){ 
        if($("#sel_start").css("display")=="none"){ 
            $("#sel_start,#sel_end").show(); 
        }else{ 
            $("#sel_start,#sel_end").hide(); 
        } 
    }); 
     
    $("#isend").click(function(){ 
        if($("#p_endtime").css("display")=="none"){ 
            $("#p_endtime").show(); 
        }else{ 
            $("#p_endtime").hide(); 
        } 
        $.fancybox.resize();//调整高度自适应 
    }); 
     
    //提交表单 
    $('#add_form').ajaxForm({ 
        beforeSubmit: showRequest, //表单验证 
        success: showResponse //成功返回 
    });  
     
}); 
 
function showRequest(){ 
    var events = $("#event").val(); 
    if(events==''){ 
        alert("请输入日程内容!"); 
        $("#event").focus(); 
        return false; 
    } 
} 
 
function showResponse(responseText, statusText, xhr, $form){ 
    if(statusText=="success"){     
        if(responseText==1){ 
            $.fancybox.close(); 
            $('#calendar').fullCalendar('refetchEvents'); //重新获取所有事件数据 
        }else{ 
            alert(responseText); 
        } 
    }else{ 
        alert(statusText); 
    } 
}



 

do.php

do.php用来处理新建、编辑和删除事件。编辑事件主要是通过接收表单post过来的数据,更新数据表中对应id的事件数据内容,如果更新成功就返回1,那么前端接收到更新成功的消息就会自动关闭fancybox层,并刷新日历视图。

include_once('connect.php');//连接数据库 
 
$action = $_GET['action']; 
if($action=='add'){ 
    //新建事件 
}elseif($action=="edit"){ 
    //编辑事件 
    $id = intval($_POST['id']); 
    if($id==0){ 
        echo '事件不存在!'; 
        exit;     
    } 
    $events = stripslashes(trim($_POST['event']));//事件内容 
    $events=mysql_real_escape_string(strip_tags($events),$link); //过滤HTML标签,并转义特殊字符 
 
    $isallday = $_POST['isallday'];//是否是全天事件 
    $isend = $_POST['isend'];//是否有结束时间 
 
    $startdate = trim($_POST['startdate']);//开始日期 
    $enddate = trim($_POST['enddate']);//结束日期 
 
    $s_time = $_POST['s_hour'].':'.$_POST['s_minute'].':00';//开始时间 
    $e_time = $_POST['e_hour'].':'.$_POST['e_minute'].':00';//结束时间 
 
    if($isallday==1 && $isend==1){ 
        $starttime = strtotime($startdate); 
        $endtime = strtotime($enddate); 
    }elseif($isallday==1 && $isend==""){ 
        $starttime = strtotime($startdate); 
        $endtime = 0; 
    }elseif($isallday=="" && $isend==1){ 
        $starttime = strtotime($startdate.' '.$s_time); 
        $endtime = strtotime($enddate.' '.$e_time); 
    }else{ 
        $starttime = strtotime($startdate.' '.$s_time); 
        $endtime = 0; 
    } 
 
    $isallday = $isallday?1:0; 
    mysql_query("update `calendar` set `title`='$events',`starttime`='$starttime',`endtime`='$endtime', 
`allday`='$isallday' where `id`='$id'"); 
    if(mysql_affected_rows()==1){ 
        echo '1'; 
    }else{ 
        echo '出错了!';     
    } 
}elseif($action=="del"){ 
    //删除事件 
}else{ 
     
}

 

删除日程事件

在弹出的编辑表单层中,还有一个删除按钮,当我们点击删除按钮时,同样的发送ajax请求到do.php中,由do.php根据请求删除数据表中对应的日程记录,并返回成功的信息。

在event.php中还应该加上一段js:



$(function(){ ... //删除事件 $("#del_event").click(function(){ if(confirm("您确定要删除吗?")){ var eventid = $("#eventid").val(); $.post("do.php?action=del",{id:eventid},function(msg){ if(msg==1){//删除成功 $.fancybox.close(); $('#calendar').fullCalendar('refetchEvents'); //重新获取所有事件数据 }else{ alert(msg); } }); } }); });



 

do.php也要加上删除操作。

... 
}elseif($action=="del"){//删除 
    $id = intval($_POST['id']); 
    if($id>0){ 
        mysql_query("delete from `calendar` where `id`='$id'"); 
        if(mysql_affected_rows()==1){ 
            echo '1'; 
        }else{ 
            echo '出错了!';     
        } 
    }else{ 
        echo '事件不存在!'; 
    } 
}

 

好了,本文介绍了编辑和删除fullCalendar日历事件,文中给出的代码不是连贯的,建议不要直接复制使用,您可以看明白了再测试,当然,如 果你够懒,可以下载本文提供的打包文件,包括读取、新建、编辑和删除日程事件功能。Hellwoeba.com感谢您的关注,接下来月光光会对 fullCalendar的最后一个操作:拖动及保存日程事件做讲解以及总结,敬请关注。



 

标签:function,日程,删除,FullCalendar,else,事件,POST,php,id
From: https://blog.51cto.com/u_8895844/6293310

相关文章

  • FullCalendar 四:FullCalendar应用——新建日程事件
    FullCalendar用日历的形式直观的展示了日程安排、代办事宜等事件,那么日历中的事件是怎么添加进去的呢?本文将结合实例使用PHP+MySQL+jQuery讲解如何在FullCalendar中新建事件。本站之前已经推出的FullCalendar应用系列文章中,有介绍FullCalendar的基本使用,FullCalendar的选项配......
  • FullCalendar 三:FullCalendar应用——读取JSON数据
    开发者可以使用FullCalendar创建强大的日历日程应用,FullCalendar提供了丰富的选项设置和方法调用,使得开发者可以轻松的创建各种功能的日历程序。本文将结合实例使用PHP读取MySQl数据,显示在FullCalendar日历中。 根据FullCalendar日历插件说明文档中的介绍,日历主体事件数据的......
  • FullCalendar 一: 日程安排FullCalendar
    FullCalendar是一款基于jQuery的日历插件,适用于各种日程安排、工作计划等场景,您可以很方便的查看查看待办事项,标记重要事项以及绑定点击和拖动事件,能快速的整合到您的项目中,本文将简单介绍FullCalendar的使用。HTML首先第一步就是在需要调用FullCalendar日历的页面中载入必要的......
  • Oracle删除列操作:逻辑删除和物理删除
    概念逻辑删除:逻辑删除并不是真正的删除,而是将表中列所对应的状态字段(status)做修改操作,实际上并未删除目标列数据或恢复这些列占用的磁盘空间。比如0是未删除,1是删除。在逻辑上数据是被删除了,但是数据本身还在数据库中,只是不进行对外提供了,逻辑删除的本质是修改操作(将is_delete的......
  • 删除数据文件
    用户在rac环境当中添加数据文件时文件存放位置没有存放到asm磁盘组存放到文件系统上,上去处理时文件已处于offline状态,expdp导出某张表时报ORA-31693,ORA-01110错误导致某张表没有备份出来查看需要恢复的数据文件select*fromv$recover_file118OFFLINEOFFLINE 18248608502......
  • el禁止已选中select删除指令
    importVuefrom'vue'//和main.js同级,自定义指令控制select已选的不给删除Vue.directive('defaultSelect',{componentUpdated(el,bindings){const[defaultValues]=bindings.valueconstdealStyle=function(tags){//因为......
  • pb中删除事件, ue_del 删除数据窗口某列的值或全部行
    //删除“开松工艺单”Longll_rowCount,ll_temp=1,ll_row,ll_idStringls_openCraftls_openCraft=this.tab_1.tabpage_1.dw_1.Object.open_craft[1]ll_id=Tab_1.Tabpage_1.dw_1.Object.order_id[1]ll_rowCount=this.tab_1.tabpage_1.dw_4.RowCount()ll......
  • 根据inode删除文件
    参考:https://blog.csdn.net/smilejiasmile/article/details/121162741文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。......
  • sqlite 删除数据后文件size并不会减小,解决办法:
    E:\sqlite3>sqlite3db_stu.sqlite3"VACUUM;"E:\sqlite3>dir驱动器E中的卷没有标签。卷的序列号是0672-3CDAE:\sqlite3的目录2023/05/1617:33<DIR>.2023/05/1617:33<DIR>..2023/05/1617:33169,776,128......
  • Laravel5.8-添加、更新、删除数据库字段
    在设计表的时候,往往不能一次性到位,很多的时候会根据需求重新补充缺少的字段   一、添加字段1phpartisanmake:migrationadd_testmore_add_siteid--table=testmore2phpartisanmake:migration#固定格式3add_testmore_add_siteid#对应的生成文件名称,在其中加入......