2016-03-11 61 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',但它沒有發佈,所以我被建議將其更改爲'數據類型:文本' –