【发布时间】:2020-04-06 02:25:46
【问题描述】:
我一直在尝试向 php 脚本发送 POST 请求,以更新 MySQL 数据库中表的值。我最近一直在使用 RetroFit,并用它为基于 POST 的操作发送了相当多的 POST 请求。我不知道我的问题是否会发生,因为我违反了建议使用 PUT 进行更新操作的 HTTP 最佳实践,但我也尝试从客户端发送 PUT 请求,尽管它具有相同的结果。当我检查它们时,数据库值没有改变。这是我从 RetroFit 发送 HTTP Post 请求的代码。
final JsonDataAPI API = RetroFitClient.getInstance().getAPI();
Map<String, String> voteParams = new HashMap<String, String>();
voteParams.put("pollID", String.valueOf(pollID));
voteParams.put("optText", rb1.getTag().toString());
Call <ArrayList<PollOpt>> voteCall = API.makeVote(voteParams);
voteCall.enqueue(new Callback<ArrayList<PollOpt>>() {
@Override
public void onResponse(Call<ArrayList<PollOpt>> call, Response<ArrayList<PollOpt>> response) {
if(!response.isSuccessful()){
Toast.makeText(PollPage.this, "Vote Unsuccessful for vote 2",
Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(PollPage.this, "Vote Successful for vote 2",
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<ArrayList<PollOpt>> call, Throwable t) {
Log.d("TAG", "Vote Failure: " + t.getMessage());
Log.d("TAG", "FailureURL rb2: " + call.request().url().toString());
}
});
请求的 URL 很好,它甚至会在 onFailure 函数中打印请求,因为没有响应而触发,尽管我不希望得到响应。
这也是发送请求的 PHP API 代码部分Vote.php:
'
method = $_SERVER['REQUEST_METHOD'];
switch($method){
case "POST":
if(isset($_POST["optText"]) && isset($_POST["pollID"])){
$optText = $_POST["optText"];
$pollID = (int) $_POST["pollID"];
$query = "UPDATE polloption SET frequency = frequency + 1 WHERE pollID = " . $pollID . " AND optText = '". $optText ."'";
$conn = new mysqli($host, $user, $pass, $database);
if ($conn->connect_error)
die($conn->connect_error);
if(mysqli_query($conn, $query)){
echo "Updated Poll Frequency";
} else{
echo "Failed to Update Poll Frequency";
}
}
break;'
我已经使用 AJAX 脚本测试了 PHP 代码,您可以在 AJAX 请求响应中看到 phps 回显数据,而在 Android 中,使用 GET 以外的方法发送 HTTP 请求并确定错误时基本上是在黑暗中工作必须使用 AJAX 请求单独测试每个文件。在使用不同参数多次使用 AJAX 脚本测试服务器后,我看不出为什么在通过 RetroFit 发送 POST 请求时频率值没有更新。
对此的任何建议将不胜感激!
【问题讨论】:
-
您是否有机会尝试访问本地主机?
-
不是这样的