【问题标题】:Trouble with AJAX array interacting with MySQL tableAJAX 数组与 MySQL 表交互的问题
【发布时间】:2023-04-02 14:01:01
【问题描述】:

在我的网页上,我有许多与 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 不是正确的路线,但是我很难理解替代方案是什么。

【问题讨论】:

  • 试试 var_dumping $_POST 看看里面有什么
  • json 对您的输入数组进行编码,并通过 json 字符串而不是实际数组发布。

标签: php jquery mysql ajax json


【解决方案1】:

你的 JS 部分需要更新

替换此块:

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);

注意:您应该应用额外的验证以确保用户名和字段不为空,以及接收不正确的字段名称,因为如果发生任何这些情况,查询将引发错误,并可能暴露有关您的代码和/或数据库的信息。

【讨论】:

  • 感谢您的回答。使用此解决方案,控制台返回一个空数组,这比我之前返回的null 好,但它仍然不存在。我检查以确保在 AJAX 调用之前填充了数组,因此我假设 PHP 脚本本身的某个地方出现了故障?
  • 啊,我明白了:authors 应该读到 auths,MySQL 数据库的名称。很好的答案,完美运行,非常感谢。
【解决方案2】:

jQuery

        var username = USERNAME;
        var array = new Array(1, 2, 3, 4, 5);


        $.ajax ({
            cache: false,
            url: PHP_FILE,
            dataType: "json",
            type: "post",
            data: {username: $username, array:  JSON.stringify(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));
?>

【讨论】:

    【解决方案3】:

    你可以试试这个,

            var $username = 'USERNAME';
            var $array = new 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);
                }
            });
    

    【讨论】:

    • 如果我以这种方式在变量前面加上美元符号,我会收到“$username variable not found”错误消息。
    • $username = "你的用户名值";
    猜你喜欢
    • 1970-01-01
    • 2012-10-25
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多