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
相关产品推荐
相关产品推荐

