2016-03-11 25 views
1

我想将fullcalendar整合到我的PHP应用程序中。POST变量没有提交从jQuery到PHP的日期

但是,我有问题将它们保存到数据库,数据库不接受标题和URL,除非它们在双引号中。

开始日期和结束日期仍为NULL。所以当我刷新数据的时候,我们用开始和结束时间元素的空值添加到数据库中。这引起了关注,因为当我刷新页面时,所有事件从日历中消失,当它们仍然在数据库。

当我调整新插入事件的空变量的值时,所有事件再次出现。

这是default.html中的ajax调用。

selectable: true, 
selectHelper: true, 
select: function(start, end, allDay) { 
    var title = prompt('Event Title:'); 
    var url = prompt('Type Event url, if exits:'); 
    if (title) { 
     var start = $.fullCalendar.moment(start); 
     var end = $.fullCalendar.moment(end); 
     console.log("Event Triggered"); 
     $.ajax({ 
       url: 'add_events.php', 
       data: 'title='+ encodeURIComponent(title)+ 
         '&start='+ encodeURIComponent(start)+ 
         '&end='+ encodeURIComponent(end)+ 
         '&url='+ encodeURIComponent(url), 
       type: "POST", 
       dataType: 'text', 
       success: function(json) { 
        alert('Added Successfully'); 
       }, 
       error: function(xhr, textStatus, errorThrown) { 
        alert(xhr.responseText); 
       } 
     }); 
     calendar.fullCalendar('renderEvent', 
     { 
      title: title, 
      start: start, 
      end: end, 
      url:url, 
      allDay: allDay 
     }, 
      true // make the event "stick" 
     ); 
    } 
    calendar.fullCalendar('unselect'); 
} 

这是add_events.php(请注意,这没有任何错误,只是它不接受邮寄)。

<?php 
    // Values received via ajax 

     $data = $_POST; 
    $json_array["title"]=json_decode($data["title"], true); 
    $json_array["start"]=json_decode($data["start"], true); 
    $json_array["end"]=json_decode($data["end"], true); 
    $json_array["url"]=json_decode($data["url"], true); 


    $title =$json_array["title"]; 
    $start =$json_array["start"]; 
    $end = $json_array["end"]; 
    $url = $json_array["url"]; 

    // connection to the database 
try { 
    $bdd = new PDO('mysql:host=localhost;dbname=fullcalendar', '....', '.......'); 
} catch(Exception $e) { 
    exit('Unable to connect to database.'); 
} 



    $sql = 'INSERT INTO `evenement` (`title`,`start`,`end`,`url`) VALUES(?, ?, ?, ?)'; 
    $stmt = $pdo->prepare($sql); 
    $stmt->execute(array($title, $start, $end, $url)); 

    // check for errors 
    if($stmt->errorCode() == 0) { 
     $id = $pdo->lastInsertId(); 

    } 
    else { 
    // had errors 
     $errors = $stmt->errorInfo(); 
     print_r($errors); 
    } 

?> 

任何帮助,怎么会实现,将不胜感激。

主文件(default.html中)的标题是这样的:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
<link href='css/fullcalendar.css' rel='stylesheet' /> 
<link href='css/fullcalendar.print.css' rel='stylesheet' media='print' /> 
<script src='js/moment.min.js'></script> 
<!--<script src='js/jquery.min.js'></script>--> 
<script src='js/fullcalendar.min.js'></script> 

但POST不适合投放日期: - 我这样说是因为我改变了所有的字段允许NULL,但比它确实允许NULL并在数据库中创建一个NULL,NULL,NULL,NULL条目。

+0

第一件事:你有没有在你的web控制台中看过ajax调用,以确保值实际上被传递? – dgig

+1

@dgig 他们正在通过..控制台显示,它来'FormatData' –

回答

0

有很多事情可能出错,所以让我们开始使用的基本知识。

步骤1: -检查$_POST变量是否正在接收预期数据。如果日期没有达到php那么你知道你必须摆弄前端js

echo "<pre>"; 
    print_r($_POST); 
    echo "</pre>"; 
    die(); 

步骤2: -如果日期是本$_POST阵列内反射,也许日期格式为不匹配,特别是如果因为它期望的时间在数据库内的时间列的数据类型被设置为DATETIME格式为"Y-m-d H:i:s"

$start =date("Y-m-d H:i:s", strtotime($json_array["start"])); 
    $end =date("Y-m-d H:i:s", strtotime($json_array["end"])); 

注: - 这仅仅是算法的代码,它不是生产做好准备,因为必须需要大量的检查,以确保没有任何警告/错误被抛出。例如。在将其传递给strtotime()函数之前检查日期字符串是否为空。

第3步: -也许尝试echo输出正在执行的mysql查询。等等

+1

这听起来像是一个有趣的发现......给我几分钟,那可能是错误的东西 –

+0

Network Header选项卡中的FormatData参数显示: 'title:“Some Title” start:Thu Mar 10 2016 00:00:00 GMT + 0000 结束:周五2016年3月11日00:00:00 GMT + 0000 url:“www.com”' –

+0

这意味着php端的接收日期没有正确配置。 –

0

现在你这样做是:

data: 'title='+ title+'&start='+ start +'&end='+ end +'&url='+ url , `

这不是一个POST发送参数的正确方法。这看起来更像你期望的GET,其中参数被附加到url。相反,创建一个对象,并把它传递给数据字段:

var obj = { 
    title: title, 
    start: start, 
    end: end, 
    url: url 
} 

然后:

data: obj

+0

让我试试看! –

+0

我会很有兴趣看到,因为我期望查询字符串格式可以与“dataType:'文本'”一起作为参数设置。也许他需要做你说的,但将数据类型改为“JSON”? – dgig

+1

我试过'数据类型:json',但它没有发布,所以我被建议将其更改为'数据类型:文本' –