我会简短地提出这个问题。我的PHP代码有什么问题,它一直输出0或缺少必填字段。这是代码
<?php
// array for JSON response
$response = array();
// check for required fields
if (isset($_POST['id']) && isset($_POST['status_id'])) {
$id = $_POST['id'];
$status_id = $_POST['status_id'];
// include db connect class
require_once __DIR__ . '/db_connect.php';
// connecting to db
$db = new DB_CONNECT();
// mysql update row with matched pid
$result = mysql_query("UPDATE pims_liip_pallet_purchase_order SET status = '$status_id' WHERE id = $id");
// check if row inserted or not
if ($result) {
// successfully updated
$response["success"] = 1;
$response["message"] = "Product successfully updated.";
// echoing JSON response
echo json_encode($response);
} else {
}
} else {
// required field is missing
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
// echoing JSON response
echo json_encode($response);
}
?>
以下是我的应用中的帖子数据
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
// Check for success tag
int success;
String status_id = statusID.getText().toString();
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("status_id", status_id));
Log.d("request!", "starting");
//Posting user data to script
JSONObject json = jsonParser.makeHttpRequest(
UPDATE_COMMENTS_URL, "POST", params);
// full json response
Log.d("Post Update", json.toString());
// json success element
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Updated!", json.toString());
finish();
return json.getString(TAG_MESSAGE);
}else{
Log.d("Update Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
任何答案都将非常荣幸:D谢谢!
答案 0 :(得分:1)
你的错误说明了一切。由于您到达} else { ... }
位,表示isset($_POST['id']) && isset($_POST['status_id'])
为假。
换句话说,您的表单是:
method="post"
标记中添加<form>
。 (实际上,POST是默认行为,因此如果是这种情况,您可能必须从表单标记中删除或更改method="GET"
)name="id"
和/或name="status_id"
更新的问题会添加Android代码。因此更新:
我怀疑jsonParser.makeHttpRequest
实际发布了一个表单编码的json字符串。它更可能只是将json数据发送到网络服务器。 PHP的$ _POST不会自动填充此数据,因为它只处理表单编码数据。
您可能需要从stdIn读取此数据。
尝试:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$rawPostData = file_get_contents("php://input");
$postData = (array)json_decode($rawPostData);
}
然后使用$ postData,否则你将使用$ _POST
答案 1 :(得分:0)
只需调试$_POST['id']
和$_POST['status_id']
即可。
在此之前。
if (isset($_POST['id']) && isset($_POST['status_id'])) {
你会自动找到答案。希望没有设置两个post变量中的一个。
对于调试,请使用print_r($_POST);