2012-06-08 13 views
6

Tengo una página bookings.php que tiene un jqgrid que muestra todas las reservas que se han realizado en línea. Cuando hace doble clic en una fila, se abre un cuadro de diálogo jq que muestra todos los detalles sobre la reserva. Además, cuando se hace doble clic, he una variable definida, que es la referencia de la reserva, que quiero pasar a un script PHP:PHP/Ajax/jQuery - Pasar un valor jquery a un script php

var brData = rowData['bookref']; 

Estoy enviando esta variable a través de 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); 

    } 
}); 


} 

Aquí es el caso de conmutación para all.inc.php:

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

Ésta es la función PHP que estoy enviando a la variable jQuery, para usar dentro de mi código 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; 

} 


} 

He puesto echo $ rowdata; en la función de PHP para ver si se está pasando la variable que es como puedo ver 'BR12345' en la consola de Firebug. El problema es que esta consulta:

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

no está obteniendo ningún resultado. Si tuviera que poner:

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

que no traiga los resultados que necesito, así que no puedo entender por qué esta consulta no está funcionando cuando la variable brData se está pasando a $ rowdata

Cualquier sugerencia ?

+0

Como una solicitud GET, ¿no debería estar haciendo ''scripts/php/bootstrp/all.request.php? Data = BR12345''? De lo contrario, probablemente no se enviarán los datos (estaría en $ _POST, si el AJAX estaba en POST). Como no conozco a JQuery, podría estar equivocado. Además, realmente debería usar 'mysql_real_escape_string()' en los datos en PHP. –

+0

¿Ha intentado utilizar la solicitud de URL de ruta completa? (ej. http://domain.com/phpfile.php), y también tenga cuidado con los problemas de dominio cruzado, ajax no funcionará en el dominio cruzado más especialmente, llamándolo con www. o sin www. –

+0

@ScottS [PDO :: quote] (http://php.net/manual/en/pdo.quote.php) es el PDO "equivalente" para mysql_real_escape_string(). Lea en PDO, o mysqli_ *, se recomienda su uso en lugar de las funciones mysql_ *. –

Respuesta

0

Primero trate de aislar su problema. Usted dice que no tiene ningún problema con Firebug, intente poner aquí la respuesta console.dir() para validar.

La media de tiempo haga lo siguiente:

luego ver yor $_REQUEST var con una print_r(). ¿Tu variable está ahí? Si es así, haga un var_dump($_REQUEST['rowdata']) y verifique.

En public static function getGridRow($rowdata) vea que sobrescribe $rowdata para ver el eco. Y finalmente, si ya tiene todo bien, prepare correctamente su consulta

1

Uso de las funciones

HtmlSpecialChar() 
Trim() 

a continuación, mostrar la variable $ rowdata y si la cadena está en el formato correcto, entonces

probar esto

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

o

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

PHP puede SE e variable sin -> '

+0

Sus comillas simples estaban entre comillas dobles, por lo que PHP evaluaría la variable dentro. –

+0

Prueba -> http://ideone.com/x2JWt –

+0

Este es un código peligroso y ni siquiera funciona en este caso, porque el valor pasado es una cadena y no un número ... de nuevo, peligroso –

0

Mi respuesta es incorrecta, no lo elimine, para que nadie más Mensajes Esta respuesta equivocada
prueba que estoy equivocado: http://codepad.org/fvHM81Uh

Trate

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

en PHP variables entre las cadenas son tan handlet:

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

PERO:

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

Pero su único las comillas están entre comillas dobles, por lo que esto no se aplica ... ver aquí -> http://ideone.com/x2JWt –

+0

@BenEverard ¿Estás hablando de su ejemplo donde demuestra cómo se repite la variable o su solución a ¿la consulta? – ClydeFrog

+0

¡Su derecho! Aquí hay un enlace de editor en línea, para que todos puedan jugar: http://codepad.org/fvHM81Uh – SCBoy

2

Se pregunta por qué tiene una declaración preparada en el código, pero en realidad no utilizarlo correctamente.

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

He añadido trim() para asegurarse de que no hay espacios o saltos de línea alrededor que podría estropear las cosas.

actualización

Es hora de depuración:

public static function getGridRow($rowdata) { 

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

Añadir las siguientes líneas:

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

Esto escribirá el valor y parar inmediatamente la secuencia de comandos para que pueda inspeccionar su valor en detalle.

+0

Hola Jack, tenías razón, cuando agrego las líneas de arriba, la página muestra ===== DEPURACIÓN ====== cadena (0) "" ===== DEPURACIÓN ====== - cualquier idea por qué esto no está funcionando? – nsilva

+0

@nsilva probablemente porque no se pasa a través de '$ _GET'? También puede hacer un 'var_dump ($ _ GET)' para averiguar –

+0

El problema es que si hago var_dump ($ rowdata); exit ;, la página bookings.php no carga la cuadrícula de datos ya que $ rowdata es nulo, $ rowdata solo tendrá un valor una vez que una fila esté dblClicked, ya que es cuando se está enviando la solicitud .ajax. Esto realmente me está dando dolor de cabeza. ¿Sería capaz de ver por qué sucede esto si le enseño más código o le enseño el problema al proporcionarle el enlace? – nsilva

0

No estoy seguro de lo anterior si $ rowdata es una matriz, pero asumo que no es así. En ese caso, ha intentado:

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