【问题标题】:PHP/Ajax/jQuery - Passing a jquery value to a php scriptPHP/Ajax/jQuery - 将 jquery 值传递给 php 脚本
【发布时间】:2012-06-08 08:31:12
【问题描述】:

我有一个 bookings.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 的 switch case:

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 函数中查看是否正在传递变量,因为我可以在 firebug 控制台中看到“BR12345”。问题是这个查询:

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

没有获取任何结果。如果我说:

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

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

有什么建议吗?

【问题讨论】:

  • 作为 GET 请求,您不应该使用'scripts/php/bootstrp/all.request.php?data=BR12345' 吗?否则,可能不会发送数据(如果 AJAX 是 POST,它将在 $_POST 中)。因为我不知道 JQuery,所以我可能是错的。另外,你真的应该在 PHP 中的数据上使用mysql_real_escape_string()
  • 您是否尝试过使用完整路径 URL 请求? (例如domain.com/phpfile.php),还要注意跨域问题,ajax 不能在跨域上工作,特别是用 www 调用它。或没有 www。
  • @ScottS PDO::quote 是 mysql_real_escape_string() 的 PDO “等效”。阅读 PDO 或 mysqli_* 建议使用它们而不是 mysql_* 函数。
  • 我已经尝试了这里的所有建议,但似乎仍然无法使其正常工作,不明白为什么它不起作用? ://
  • @nsilva 你真的确定变量有正确的值吗?在您的代码中执行echo "DATA=[$rowdata]"; exit; 并仔细检查该值。

标签: php jquery ajax jqgrid


【解决方案1】:

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

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

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

【讨论】:

  • 嗨杰克,你是对的,当我添加上面的行时,页面显示 =====DEBUG====== string(0) "" =====DEBUG= ===== - 知道为什么这不起作用吗?
  • @nsilva 可能是因为它不是通过$_GET 传递的?您也可以通过var_dump($_GET) 来了解
  • 问题是如果我做 var_dump($rowdata); exit;,bookings.php 页面不会加载数据网格,因为 $rowdata 为空,$rowdata 只有在 dblClicked 行时才会有一个值,因为那是在发送 .ajax 请求时。这真的让我很头疼,如果我向您展示更多代码或通过给您链接向您展示问题,您能明白为什么会发生这种情况吗?
【解决方案2】:

使用函数

HtmlSpecialChar() 
Trim()

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

试试这个

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

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

PHP 可以看到变量没有 -> '

【讨论】:

  • 他的单引号在双引号里面,因此PHP会计算里面的变量。
  • 这是危险的代码,在这种情况下甚至不起作用,因为传递的值是字符串而不是数字......再次,危险
【解决方案3】:

首先尝试解决您的问题。你说你对firebug没有问题,试着把console.dir()的回复放在这里验证一下。

同时执行以下操作:

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

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

【讨论】:

    【解决方案4】:

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

    试试

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

    在 PHP 中,字符串中的 vars 是这样处理的:

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

    但是:

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

    【讨论】:

    • 但是他的单引号在双引号内,所以这不适用...见这里 --> ideone.com/x2JWt
    • @BenEverard 您是在谈论他的示例,他演示了如何回显变量或他对查询的解决方案?
    • 你的权利!这是一个在线编辑器链接,大家可以玩转:codepad.org/fvHM81Uh
    • 你的查询解法没有错。我自己在我的一个网站上使用它来从数据库中收集数据
    • 是的,但在这种情况下它是错误的,因为我的查询将与他的相同,所以它不是他问题的答案。所以在这种情况下答案是错误的。
    【解决方案5】:

    不确定 $rowdata 是否是一个数组,但我假设它不是。在那种情况下,你有没有试过:

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

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2011-04-18
      • 2013-06-18
      • 1970-01-01
      相关资源
      最近更新 更多