You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS结合PHP提交数据仅显示单条记录问题求助

问题分析

你猜的没错!问题确实出在$scope.users = response.data;这行代码上。

每次点击保存后,你的后端add.php只返回刚刚插入的那一条新记录,而你用=直接把$scope.users整个替换成了这个单条记录的数组,之前的旧记录自然就被覆盖了,所以页面永远只显示最新提交的那一条。

解决方案

根据你的需求,有两种可行的修改方式,选一种适合你的即可:

方式1:将新记录追加到现有列表(推荐,减少请求)

这种方式不需要修改后端,只需要调整前端的AngularJS代码,把新返回的记录追加到$scope.users数组中,而不是替换整个数组:

修改前端的add函数:

$scope.add = function(){
    var len = 20;
    $http({
        method: 'post',
        url: 'add.php',
        data: {fname:$scope.fname,lname:$scope.lname,uname:$scope.uname,request_type:2,len:len},
    }).then(function successCallback(response) {
        // 先初始化users数组(如果还没初始化的话)
        if(!$scope.users) {
            $scope.users = [];
        }
        // 将新添加的记录追加到数组末尾
        $scope.users.push(response.data[0]);
        // 可选:清空输入框,提升用户体验
        $scope.fname = '';
        $scope.lname = '';
        $scope.uname = '';
    });
}

另外,建议在控制器初始化时,先获取一次所有现有记录,这样页面加载时就能看到之前的数据:

fetch.controller('userCtrl', ['$scope', '$http', function ($scope, $http) {
    // 页面加载时获取所有用户
    $http({
        method: 'get',
        url: 'get_users.php' // 需要你新建一个获取所有用户的后端接口
    }).then(function(response){
        $scope.users = response.data;
    });

    // 你的add函数...
}]);

对应的get_users.php可以这样写:

<?php
include 'config.php';
$result = mysqli_query($con,"select * from users33");
$return_arr = [];
while($row = mysqli_fetch_assoc($result)){
    $return_arr[] = $row;
}
echo json_encode($return_arr);
?>

方式2:每次添加后重新加载所有记录

如果你希望每次提交后都从数据库重新拉取完整的用户列表,可以修改后端add.php,让它在插入新记录后返回所有用户数据,而不是只返回新插入的那条:

修改add.php的代码:

<?php
include 'config.php';
$data = json_decode(file_get_contents("php://input"));
$request_type = $data->request_type;

// Insert record
if($request_type == 2){
    $fname = $data->fname;
    $lname = $data->lname;
    $uname = $data->uname;
    
    // 建议使用预处理语句防止SQL注入(非常重要!)
    $stmt = mysqli_prepare($con, "INSERT INTO users33(fname, lname, username) VALUES(?, ?, ?)");
    mysqli_stmt_bind_param($stmt, "sss", $fname, $lname, $uname);
    mysqli_stmt_execute($stmt);

    // 查询所有用户记录
    $result = mysqli_query($con,"select * from users33");
    $return_arr = [];
    while($row = mysqli_fetch_assoc($result)){
        $return_arr[] = $row;
    }
    echo json_encode($return_arr);
}
?>

此时前端的$scope.users = response.data;就可以保留,因为后端返回的是完整的用户列表,每次添加后都会覆盖成最新的全量数据。

重要提醒:SQL注入风险

你当前的后端代码直接将用户输入拼接到SQL语句中,存在严重的SQL注入漏洞!强烈建议使用预处理语句(上面方式2中已经给出示例)来处理数据库操作,避免恶意用户攻击你的数据库。

内容的提问来源于stack exchange,提问作者Markjames11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:32:34