POST变量没有将日期从jQuery提交到php

时间:2016-03-11 16:43:18

标签: javascript php jquery mysql ajax

我正在尝试将fullcalendar集成到我的php应用程序中。

但是,我在将数据保存到数据库时遇到问题,数据库不接受标题和网址,除非它们是双引号。

开始和结束日期仍为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条目。

2 个答案:

答案 0 :(得分:0)

现在你正在这样做:

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

这不是在POST上发送参数的正确方法。这看起来更像您在GET上所期望的参数附加到网址的内容。而是创建一个对象并将其传递给数据字段:

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

然后:

data: obj

答案 1 :(得分:0)

有很多事情可能会出错,所以我们先来了解基础知识。

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

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

第2步: - 如果日期反映在$_POST数组中,可能日期格式不匹配,特别是如果数据库中日期列的数据类型设置为{ {1}}因为它希望日期为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"])); 函数之前检查日期字符串是否为空。

第3步: - 也许尝试strtotime()正在执行的mysql查询。等