Getjson将一个发布值的结果返回2个结果



我正在尝试使用.getjson将一个值发布到URL,并返回该值的所有相应值。

所有值都存储在mysql myisam表中。

请求是:

$.getJSON('queries.php', { key: $("#cfkey").val()},  
function(result) {
$.each(result, function(i,r) {
    console.log("user:" + r.username + "Addr:" + r.addr);
    setItem("_cfuser", r.username);
    //console.log("user:" + r.username + "saved");
});
});

cfkey是对每个"用户"的唯一键,其想法是使此功能仅返回相应的结果到该密钥。

PHP代码:

//error_reporting(E_ALL); ini_set("display_errors", 1);
include 'db/dbcon.php';
$input = $_GET['key'];
$input2 = $_GET['val'];
if($_GET) {
$q = "SELECT * FROM `cfaddrbook` WHERE '".$input."' = '".$input2."'";
} else {
$q = "SELECT * FROM `cfaddrbook`";
}
//Start connection with SQL
$res = $mysqli->query($q) or trigger_error($mysqli->error."[$q]");
$array = array(); // initialize
while($row = $res->fetch_array(MYSQLI_BOTH)) {
 $array[] = array(
'key' => $row[0],
'username' => $row[1],
'password' => $row[2],
'nick'     => $row[3],
'addr'     => $row[4],
'facebook' => $row[5],
'twitter'  => $row[6],
'linkedin' => $row[7],
'youtube'  => $row[8]
// ... continue like this
);
}
header('Content-Type: application/json');
echo json_encode($array);
$res->free();
$mysqli->close();

当前,该功能返回所有用户名,一个单个密钥的所有地址。我想发送键的请求,并仅获取相应的数据,而不是其他键的数据。我也想能够输入查询?key =并以此方式恢复相应的数据。

编辑:工作代码:

include 'db/dbcon.php';
$thekey = $_GET['key'];
$input = $mysqli->real_escape_string($thekey);
if($_GET) {
$q = "SELECT * FROM `cfaddrbook` WHERE `key` = ".$input."";
} else {
$q = "SELECT * FROM `cfaddrbook`";
}
//Start connection with SQL
$res = $mysqli->query($q) or trigger_error($mysqli->error."[$q]");
$array = array(); // initialize
while($row = $res->fetch_array(MYSQLI_BOTH)) {
  $array[] = array(
'key' => $row[0],
'username' => $row[1],
'password' => $row[2],
'nick'     => $row[3],
'addr'     => $row[4],
'facebook' => $row[5],
'twitter'  => $row[6],
'linkedin' => $row[7],
'youtube'  => $row[8]
);
}
header('Content-Type: application/json');
echo json_encode($array);
$res->free();
$mysqli->close();

您有几个问题。

  1. getJSON发送GET请求,但是您正在尝试从$_POST阅读。
  2. 即使它使用了POST,您也在发送cfkey,但在您的PHP代码中读取key
  3. 您没有在值逃脱该值,因此这将使您轻松地注入SQL。

特别是1和2,因此您的代码实际上并没有分支您的想法,因此它正在运行您的"所有内容"路径,而不是"选择一个记录"路径。

调试未来的提示:使用chrome或firefox并观看网络活动 - 您可以查看事物是否是 GETPOST,然后在整个php倾倒数据中添加 var_dump实际上是在那里。

最新更新