php - AJAX 数组与 MySQL 表交互时出现问题

标签 php jquery mysql ajax json

在我的网页上,我有许多与 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/

相关文章:

javascript - 如何使用 getJSON 将 javascript 变量传递给 php

php - Codeigniter 多维数组插入数据库

javascript - 为什么这个select在触发JS时会额外添加一个空选项?

jquery - 理解 Jquery 执行流程的技巧

javascript - 使用 jQuery 选择第一个元素

php - 检查 MySQL 中是否存在记录(使用 PHP)?

mysql - 检查用户匹配数组是否作为具有匹配列的链接表中的条目存在

php - SQL 无限日历模式

php - 格式化电话号码(如果缺少,请检测并添加国家代码)

php - Mysqli 查询未获取数据库值