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

AngularJS+PHP+MySQL表单提交报错:Undefined property: stdClass::$name

问题分析与解决

这个错误Undefined property: stdClass::$name本质是你PHP代码里的$data对象根本没有name这个属性,核心原因是前端请求数据格式和后端接收方式不匹配,咱们一步步排查解决:

问题根源

AngularJS 的 $http.post 方法默认会把请求数据以 application/x-www-form-urlencoded(表单格式)发送,但你的PHP代码却用json_decode(file_get_contents("php://input"))来解析JSON格式的数据——这就导致json_decode无法正确解析表单格式的字符串,最终得到的$data是null或者一个没有预期属性的空对象,自然会触发Undefined property的错误。

解决方法(二选一即可)

方法1:修改前端,发送JSON格式数据

在$http.post里添加请求头,明确告诉后端发送的是JSON格式数据,同时建议加上回调逻辑反馈状态:

$scope.add_company = function(){
  $scope.msg=false;
  $http.post('php/create.php', {
    'name':$scope.advertiser_name,
    'orgnumber':$scope.advertiser_org,
    'phone':$scope.advertiser_phone,
    'address':$scope.advertiser_address,
    'postcode':$scope.advertiser_postcode,
    'location':$scope.advertiser_location,
    'billAddress':$scope.advertiser_billAddress,
    'billPostcode':$scope.advertiser_billPostcode,
    'billLocation':$scope.advertiser_billLocation
  }, {
    headers: { 'Content-Type': 'application/json' } // 新增这行,指定数据格式
  }).then(function(response) {
    // 请求成功后的逻辑
    $scope.msg = true;
    $timeout(function() { $scope.msg = false; }, 3000);
  }, function(error) {
    // 请求失败时的错误提示
    console.error('添加失败:', error);
  });
};

方法2:修改后端PHP,用表单方式接收数据

既然前端默认发送的是表单格式,直接用$_POST获取数据即可,不用解析JSON:

<?php include '../src/config/db2.php';
// 替换原来的json_decode部分,直接从$_POST取值,用?? ''避免未定义警告
$advertiser_name = $_POST['name'] ?? '';
$advertiser_org = $_POST['orgnumber'] ?? '';
$advertiser_phone = $_POST['phone'] ?? '';
$advertiser_address = $_POST['address'] ?? '';
$advertiser_postcode = $_POST['postcode'] ?? '';
$advertiser_location = $_POST['location'] ?? '';
$advertiser_billAddress = $_POST['billAddress'] ?? '';
$advertiser_billPostcode = $_POST['billPostcode'] ?? '';
$advertiser_billLocation = $_POST['billLocation'] ?? '';

重要安全提醒:防范SQL注入

你的代码直接把用户输入拼到SQL语句里,这是极高的安全风险,很容易被SQL注入攻击。强烈替换为MySQLi预处理语句:

// 用?作为占位符编写SQL
$sql = "INSERT INTO `tbl_advertisers` ( `advertiser_name`, `advertiser_org`, `advertiser_phone`, `advertiser_address`, `advertiser_postcode`, `advertiser_location`, `advertiser_billAddress`, `advertiser_billPostcode`, `advertiser_billLocation`) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?)";

// 初始化预处理对象
$stmt = mysqli_prepare($conn, $sql);

// 绑定参数,s代表字符串类型(数字类型可用i)
mysqli_stmt_bind_param($stmt, "sssssssss", 
  $advertiser_name, 
  $advertiser_org, 
  $advertiser_phone, 
  $advertiser_address, 
  $advertiser_postcode, 
  $advertiser_location, 
  $advertiser_billAddress, 
  $advertiser_billPostcode, 
  $advertiser_billLocation
);

// 执行语句并反馈结果
if (mysqli_stmt_execute($stmt)) {
 echo "Data added";
} else {
 echo "Error: Did not add data " . mysqli_error($conn);
}

// 关闭资源
mysqli_stmt_close($stmt);
mysqli_close($conn);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:47:35