Android应用向网站数据库上传商品数据失败求助
解决Volley上传商品时"missing product_name or product_description"错误
你的问题核心是Android端传递的参数名与PHP端接收的参数名不匹配:
- Android代码中
getParams()方法里用的参数键是_product_name和_product_description(带下划线前缀) - 但PHP代码里检查的是
product_name和product_description(无下划线)
PHP端找不到对应的POST参数,因此返回"缺失参数"的错误提示。
修复方案二选一即可:
方案1:修改Android端参数名(推荐,匹配PHP与数据库字段)
把getParams()里的键名调整为和PHP端一致的名称:
@Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<>(); // 去掉下划线前缀,与PHP端参数名对齐 params.put("product_name", productName); params.put("product_description", productDescription); return params; }
方案2:修改PHP端参数检查(若不想改动Android代码)
将PHP里的参数检查和接收逻辑改为对应带下划线的名称:
if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 修改参数检查的键名 if (isset($_POST['_product_name']) && isset($_POST['_product_description'])) { // 对应修改接收的变量名 $productName = $_POST['_product_name']; $productDescription = $_POST['_product_description']; // 后续数据库操作代码保持不变 $stmt = $pdo->prepare("INSERT INTO products (product_name, description) VALUES (?, ?)"); if ($stmt->execute([$productName, $productDescription])) { $response = ["message" => "Product uploaded successfully"]; echo json_encode($response); } else { $response = ["message" => "Error uploading product"]; echo json_encode($response); } } else { $response = ["message" => "Missing product_name or product_description"]; echo json_encode($response); } } else { $response = ["message" => "Invalid request method"]; echo json_encode($response); }
额外调试建议(排查类似问题用)
- 验证参数传递:在PHP开头添加临时代码,打印所有收到的POST数据,确认参数是否到达服务器:
// 调试用,可在问题解决后删除 file_put_contents('post_debug_log.txt', print_r($_POST, true));
- 检查安卓本地参数:查看Logcat中
MyApp标签的日志,确认传入_uploadProduct的参数值不为空 - 确认网络权限:确保AndroidManifest.xml中添加了网络权限:
<uses-permission android:name="android.permission.INTERNET" />
内容的提问来源于stack exchange,提问作者ALI EL BOUHALI
相关产品推荐
相关产品推荐

