2015-04-26 47 views
-1

所以我正在做一個AJAX調用(從YouTube的播放器的JavaScript)到一個PHP頁面,其中包含一些功能(主要插入到數據庫),我正在做一個case語句在我的PHP看到正在調用函數的帖子。Ajax調用數據庫PHP

下面是一個包含在我發出Ajax調用JavaScript我的PHP頁面:

<script> 
function get(name){ 
    if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search)) 
     return decodeURIComponent(name[1]); 
} 

//Load player api asynchronously. 
var tag = document.createElement('script'); 
tag.src = "https://www.youtube.com/iframe_api"; 
var firstScriptTag = document.getElementsByTagName('script')[0]; 
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 
var done = false; 
var player; 
function onYouTubeIframeAPIReady() { 
    player = new YT.Player('player', { 
     height: '390', 
     width: '640', 
     videoId: get('url'), 
     events: { 
     'onReady': onPlayerReady, 
     'onStateChange': onPlayerStateChange 
     } 
    }); 
} 
function onPlayerReady(evt) { 
    // evt.target.playVideo(); 
} 
function onPlayerStateChange(evt) { 
    if (evt.data == YT.PlayerState.PLAYING && !done) { 
     $.ajax({ url:'insertToDBFromVid.php', 
      data: {action : 'insertStart' }, 
      type: 'post', 
      success: function (result){ 
       alert(result); 
       } 
       }); 
    } 
    if (evt.data == YT.PlayerState.PAUSED && !done) { 
    } 

} 
function stopVideo() { 
    player.stopVideo(); 
} 

正如你可以看到我從URL行獲得視頻的ID,這工作正常。

這是我的PHP代碼,Ajax調用應該打電話來:

<?php 
require("config.php"); 

if(isset($_POST['action']) && !empty($_POST['action'])){ 
    $action = $_POST['action']; 
    switch($action){ 
     case 'insertStart' : insertStart(); break; 
     // case 'anotheraction' : anotheraction(); break; 
    } 
} 
function getUserID() { 
    $query = " SELECT 1 FROM users WHERE username = :username"; 
    $query_params = array(':username' => $_POST['username']); 

    try { 
     $stmt = $db->prepare($query); 
     $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 
    $row = $stmt->fetch(); 
    if($row){ echo "cant get user id" die("Cannot get User ID"); } 

    $row = $result->fetchObject(); 
    $userid = $row->user_id; 
} 

function getVideoID() { 
    $query = " SELECT 1 FROM video WHERE url = :url"; 
    $query_params = array(':url' => $_GET["url"]); 

    try { 
     $stmt = $db->prepare($query); 
     $result = $stmt->execute($query_params); 
    } 
    catch(PDOException $ex){ die("Failed to run query: " . $ex->getMessage()); } 
    $row = $stmt->fetch(); 
    if($row){ die("Cannot get Video URL"); } 

    $row = $result->fetchObject(); 
    $videoid = $row->video_id; 
} 

function insertStart(){ 
getUserID(); 
getVideoID(); 
$query = " INSERT INTO session (user_id, video_id) VALUES ( 
      :userid, :videoid)"; 
$query_params = array(':userid' => $userid, ':videoid' => $videoid); 

}  
?> 

有人能看到我在那裏出了問題?

+0

所有的邏輯步驟中拋出什麼錯誤? – jhansen

+0

問題是什麼? – jeroen

+0

如何查看引發的錯誤?我使用記事本++作爲我的IDE。問題是插入不能在對insertStart()函數的ajax調用中工作。查看我的代碼是否有任何明顯錯誤? – lifeisaloop

回答

0

一個主要問題是您的變量在insertStart()中未定義。即使他們是從來沒有處理實際插入或向瀏覽器發送任何響應。

您正在致電getUserId()getVideoId()但未將返回值分配給任何東西。 然後你介紹未定義的變量到查詢參數數組

嘗試改用:

function insertStart(){ 
    //declare the 2 variables first using return values of associated functions 
    $userid = getUserID(); 
    $videoid = getVideoID(); 


    $query = " INSERT INTO session (user_id, video_id) VALUES ( 
       :userid, :videoid)"; 
    $query_params = array(':userid' => $userid, ':videoid' => $videoid); 
// now do the insert and send response to browser 

} 

現在的功能還沒有做與查詢參數的任何或返回任何東西,或產生任何輸出,所以你需要完成實際插入併發迴響應數據。

總體來說,我建議你重溫一步