我正在尝试使用.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();
您有几个问题。
-
getJSON
发送GET
请求,但是您正在尝试从$_POST
阅读。 - 即使它使用了
POST
,您也在发送cfkey
,但在您的PHP代码中读取key
。 - 您没有在值逃脱该值,因此这将使您轻松地注入SQL。
特别是1和2,因此您的代码实际上并没有分支您的想法,因此它正在运行您的"所有内容"路径,而不是"选择一个记录"路径。
调试未来的提示:使用chrome或firefox并观看网络活动 - 您可以查看事物是否是 GET
或 POST
,然后在整个php倾倒数据中添加 var_dump
实际上是在那里。