PHP/Ajax/jQuery - 将 jquery 值传递给 php 脚本


PHP/Ajax/jQuery - Passing a jquery value to a php script

我有一个预订.php页面,其中包含一个jqgrid,显示所有在线预订。当您双击一行时,这将打开一个 jq 对话框,其中显示有关该预订的所有详细信息。另外,当您双击时,我定义了一个变量,这是我想传递给 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;
}

}

我已经在PHP函数中放置了echo $rowdata;以查看变量是否正在传递,就像我在firebug控制台中看到的"BR12345"一样。问题是这个查询:

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

未获取任何结果。如果我说:

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

它确实获取了我需要的结果,所以我无法理解为什么当变量 brData 传递给 brData 时这个查询不起作用$rowdata

有什么建议吗?

想知道为什么你的代码中有一个准备好的语句,但实际上并没有正确使用它。

$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;

这将写入值并立即停止脚本,以便您可以详细检查其值。

使用函数

HtmlSpecialChar() 
Trim()

然后显示$rowdata变量,如果字符串格式正确,则

试试这个

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

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

PHP 可以在没有 -> ' 的情况下看到变量

先尝试解决你的问题。你说你对火虫没有问题,试着把console.dir()响应放在这里进行验证。

执行以下操作时的意思:

然后看到你$_REQUEST带有print_r()的 var .你的变量在那里吗?如果是这样,请执行var_dump($_REQUEST['rowdata'])并检查。

public static function getGridRow($rowdata)看到你覆盖$rowdata以查看回声。最后,如果您现在一切正常,请正确准备您的查询

我的答案是错误的,我不会删除它,所以没有其他人发布这个错误的答案
证明我错了:http://codepad.org/fvHM81Uh

尝试

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

在 PHP 变量中,字符串是handlet,所以:

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

但:

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

不太确定上面是否$rowdata是一个数组,但我假设它不是。在这种情况下,您是否尝试过:

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