在我的网页上,我有许多与 MySQL 数据库中的表列相关的按钮(按钮的 id 和表列名称完全相同)。
我想做的是捕获数组中的 ID,并通过 AJAX 发回与那些具有相同名称的表列关联的值数组。 AJAX 调用没有问题,但是我很难理解如何转换数据以便在我的服务器代码中使用 PHP。
我的代码如下:
jQuery:
var username = USERNAME;
var array = [1, 2, 3, 4, 5];
$.ajax ({
cache: false,
url: PHP_FILE,
dataType: "json",
type: "post",
data: {username: username, array: array},
success: function(data) {
console.log(data);
}
});
PHP:
<?php
$dbc = DATABASE CONNECTION;
$username = mysqli_real_escape_string($dbc, trim($_POST['username']));
$auth = mysqli_real_escape_string($dbc, trim($_POST['array']));
$array = json_decode($auth, true);
$query = "SELECT auths.".$array." FROM details INNER JOIN auths USING (code) WHERE un = '".$username."'";
$data = mysqli_query($dbc, $query);
$row = mysqli_fetch_array($data);
echo(json_encode($row));
?>
大概 json_decode
不是正确的路线,但我正在努力理解替代方案是什么。
最佳答案
您的 JS 部分需要更新
替换这个 block :
var $username = USERNAME;
var $array = array(1, 2, 3, 4, 5);
与:
var username = 'USERNAME';
var values = [1, 2, 3, 4, 5];
对于 PHP 部分,试试这个(假设您使用的是 PHP >= 5.3):
<?php
$username = trim($_POST['username']);
$fields = isset($_POST['array']) && is_array($_POST['array']) ? $_POST['array'] : array();
$dbc = mysqli_connect ('HOST', 'USERNAME', 'PASSWORD', 'DATABASE', 3306);
$username = mysqli_real_escape_string($dbc, $username);
$fields = array_map(function ($field) use($dbc) {
$field = mysqli_real_escape_string($dbc, trim($field));
return 'authors.'.$field;
}, $fields) ;
$fields = implode(',', $fields);
$query = sprintf("SELECT %s FROM details INNER JOIN auths AS authors USING (code) WHERE un = '%s'", $fields, $username);
$rows = array();
if($result = mysqli_query($dbc, $query)) {
while($row = mysqli_fetch_assoc($result)) {
$rows[] = $row;
}
}
echo json_encode($rows);
注意:您应该应用额外的验证以确保用户名和字段不为空,以及接收不正确的字段名称,因为如果发生任何这些情况,查询将抛出错误,并可能暴露有关您的代码和/或数据库的信息。
关于php - AJAX 数组与 MySQL 表交互时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20149169/