2012-06-08 219 views
6

我有一個bookings.php頁面,它有一個jqgrid,顯示所有網上預訂。當你雙擊一行時,這會打開一個jq對話框,顯示關於那裏預訂的所有細節。此外,當您雙擊,我有一個變量定義這是我想傳遞給PHP腳本的預訂編號:PHP/Ajax/jQuery - 將一個jQuery值傳遞給一個PHP腳本

var brData = rowData['bookref']; 

我通過AJAX發送此變量:

function getGridRow(brData) { 

    $.ajax({ 

    // Request sent from control panel, so send to cp.request.php (which is the handler) 
    url: 'scripts/php/bootstrp/all.request.php', 
    type: 'GET', 

    // Build data array - look at the '$_REQUEST' parameters in the 'insert' function 
    data: { 


     //ft: "getDGRow", 
     rowdata: 'fnme=getDGRow&row_data='+brData, 
     data: brData, 

     // Either pass a row id as the 'id' OR a where clause as the 'condition' never both 
     id: null, 
     condition: null 
    }, 
    dataType: 'text', 
    timeout: 20000, 
    error: function(){ 
     alert("It failed"); 
     $('#cp-div-error').html(''); 
     $('#cp-div-error').append('<p>There was an error inserting the data, please try again later.</p>'); 
     $('#cp-div-error').dialog('open'); 
    }, 
    success: function(response){ 

     // Refresh page 

     // response = brData; 
     // alert(response); 

    } 
}); 


} 

這裏是開關情況下all.inc.php:

case 'getDGRow': 
//header('Content-type: text/xml'); 
DatagridController::getGridRow($_REQUEST['rowdata']); 
break; 

這是我送的jQuery的變量,我在PHP代碼中使用PHP函數:

public static function getGridRow($rowdata) { 

    $rowdata = $_GET['data']; 
    echo $rowdata; 

    $pdo = new SQL(); 
    $dbh = $pdo->connect(Database::$serverIP, Database::$serverPort, Database::$dbName, Database::$user, Database::$pass); 

    try { 

     $query = ("SELECT * FROM tblbookings WHERE bookref = '$rowdata'"); 

     $stmt = $dbh->prepare($query); 

     $stmt->execute(); 

     $row = $stmt->fetch(PDO::FETCH_BOTH); 

     BookingDocket::set_id($row['id']); 
     BookingDocket::set_bookref($row['bookref']); 
     BookingDocket::set_bookdate($row['bookingdate']); 
     BookingDocket::set_returndate($row['returndate']); 
     BookingDocket::set_journeytype($row['journeytype']); 
     BookingDocket::set_passtel($row['passengertel']); 
     BookingDocket::set_returndate($row['returndate']); 



     $stmt->closeCursor(); 

    } 

    catch (PDOException $pe) { 
     die("Error: " .$pe->getMessage(). " Query: ".$stmt->queryString); 
    } 

    $dbh = null; 

} 


} 

我已經把echo $ rowdata;在PHP函數中查看是否正在傳遞變量,因爲我可以在螢火蟲控制檯中看到'BR12345'。問題是這個查詢:

$query = ("SELECT * FROM tblbookings WHERE bookref = '$rowdata'"); 

沒有獲取任何結果。如果我是放:

$query = ("SELECT * FROM tblbookings WHERE bookref = 'BR12345'"); 

它不取,我需要讓我無法理解,爲什麼這個查詢不工作時,被傳遞到$ rowdata

任何建議變量BRDATA結果?

+0

作爲一個GET請求,你不應該在做'scripts/php/bootstrp/all.request.php?data = BR12345'嗎?否則,數據可能不會被髮送(如果AJAX是POST,它將在$ _POST中)。由於我不知道JQuery,我可能是錯的。另外,你應該在PHP中的數據上使用'mysql_real_escape_string()'。 –

+0

您是否嘗試過使用完整路徑URL請求? (例如http://domain.com/phpfile.php),並且要小心跨域問題,ajax最不能在跨域上工作,用www調用它。或沒有www。 –

+0

@ScottS [PDO :: quote](http://php.net/manual/en/pdo.quote.php)是mysql_real_escape_string()的PDO「等價物」。閱讀PDO,或mysqli_ *建議使用它們而不是mysql_ *函數。 –

回答

0

嘗試首先解決您的問題。你說你用螢火蟲沒有問題,試着把這裏的console.dir()迴應驗證。

平均同時做到以下幾點:

然後看到侑$_REQUEST VAR與print_r()。你的變數在那裏嗎?如果是這樣,做一個var_dump($_REQUEST['rowdata'])並檢查。

public static function getGridRow($rowdata)看到你覆蓋$rowdata看到回聲。最後,如果你現在已經準備好了,請準備好你的查詢

1

使用功能

HtmlSpecialChar() 
Trim() 

然後顯示$ rowdata變量,如果字符串是正確的格式,然後

試試這個

$query = ("SELECT * FROM tblbookings WHERE bookref = '$rowdata'"); 

$query = ("SELECT * FROM tblbookings WHERE bookref = '".$rowdata."'"); 

能PHP本身Ë變量沒有 - >'

+0

他的單引號是在雙引號內,因此PHP會評估裏面的變量。 –

+0

證明 - > http://ideone.com/x2JWt –

+0

這是危險的代碼,甚至不會在這種情況下工作,因爲傳遞的值是一個字符串,而不是一個數字...再次,危險 –

0

我的答案是錯的,我不要刪除它,沒有人張貼這種錯誤的答案
證明我是錯的:http://codepad.org/fvHM81Uh

嘗試

$query = ("SELECT * FROM tblbookings WHERE bookref = '" . $rowdata . "'");

在PHP中瓦爾字符串是handlet這樣:

$variable = "Hello"; 
echo "$variable"; //=> Hello 
echo '$variable'; //=> $variable 

但是:

echo "'$variable'"; //=> 'Hello' 
+0

但他的單引號是在雙引號內,所以這不適用...看到這裏 - > http://ideone.com/x2JWt –

+0

@BenEverard你在談論他的例子,他演示瞭如何迴應變量或他的解決方案查詢? – ClydeFrog

+0

你的權利!這裏是一個在線編輯器鏈接,所以你可以玩遍:http://codepad.org/fvHM81Uh – SCBoy

2

奇怪,爲什麼你有一個事先準備好的聲明中你的代碼,但實際上並沒有使用正確。

$stmt = $dbh->prepare("SELECT * FROM tblbookings WHERE bookref = :data"); 
$stmt->execute(array(
    ':date' => trim($rowdata), 
)); 

我添加trim()以確保有它周圍,可以胡來沒有空格或換行符。

更新

它的調試時間:

public static function getGridRow($rowdata) { 

    $rowdata = $_GET['data']; 
    echo $rowdata; 

添加以下行:

echo "=====DEBUG====== "; 
    var_dump($rowdata); 
    echo " =====DEBUG====== "; 
    exit; 

這將寫入值,並立即停止你的腳本,以便您可以檢查它的價值詳細。

+0

嗨,傑克,你是對的,當我添加上面的行,頁面顯示===== DEBUG ======字符串(0)「」===== DEBUG ====== - 任何想法爲什麼這不起作用? – nsilva

+0

@nsilva可能是因爲它沒有通過'$ _GET'傳遞?你可以做'var_dump($ _ GET)'以找出 –

+0

問題是,如果我做var_dump($ rowdata); exit ;, bookings.php頁面不會加載數據網格,因爲$ rowdata爲空,$ rowdata只有在dblClicked行發生時纔會有值,這是發送.ajax請求時的情況。這真的讓我很頭疼,如果我向你展示更多代碼或通過給你鏈接顯示你的問題,你能看出爲什麼會發生這種情況嗎? – nsilva

0

上面不確定是否$ rowdata是一個數組,但我假設它不是。在這種情況下,您是否嘗試過:

$query = "SELECT * FROM tblbookings WHERE bookref = " . $rowdata; 
相關問題