6

オンラインで行われたすべての予約を表示するjqgridがあるbookings.phpページがあります。行をダブルクリックすると、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;

これは、PHPコード内で使用するためにjquery変数を送信する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に渡されているときにこのクエリが機能しない理由を理解できません。

助言がありますか?

4

5 に答える 5

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;

これにより、値が書き込まれ、スクリプトがすぐに停止されるため、その値を詳細に調べることができます。

于 2012-06-08T08:47:05.983 に答える
1

関数を使用する

HtmlSpecialChar() 
Trim()

$rowdata 変数を表示し、文字列が正しい形式の場合は、

これを試して

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

また

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

PHP は -> ' なしで変数を見ることができます

于 2012-06-08T08:38:07.113 に答える
0

最初に問題を特定してみてください。あなたはfirebugに問題はないと言っていますconsole.dir()。検証するためにここに応答を入れてみてください.

その間、次のことを行います。

次に、あなた$_REQUESTの var をprint_r(). あなたの変数はそこにありますか?その場合は、aを実行しvar_dump($_REQUEST['rowdata'])て確認します。

エコーを見るために上書きpublic static function getGridRow($rowdata)することを参照してください。$rowdata最後に、すべて問題がなければ、クエリを正しく準備します

于 2012-06-08T17:18:58.947 に答える
0

$rowdata が配列であるかどうかは上記の形式からよくわかりませんが、そうではないと思います。その場合、あなたは試しましたか:

$query = "SELECT * FROM tblbookings WHERE bookref = " . $rowdata;
于 2012-06-08T15:59:25.270 に答える
0

私の答えは間違っています。私はそれを削除しないので、誰もこの間違った答えを投稿しません
私が間違っている証拠: http://codepad.org/fvHM81Uh

試す

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

PHP では、文字列の変数は次のように処理されます。

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

しかし:

 echo "'$variable'"; //=> 'Hello'
于 2012-06-08T08:41:32.023 に答える