我有一个异步任务:
public class likeTheJoke extends AsyncTask<Void, Integer, Void>{
@Override
protected Void doInBackground(Void... params) {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://site.com/android/jokes/updateLikes.php");
try {
// Add data
String encodedUrl = URLEncoder.encode("Joke 7", "UTF-8"); // recently added after a comment suggestion
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("jokeName", encodedUrl));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
我正在尝试向php脚本传递一个参数,并更新数据库中的一个值。根据上面的代码,我的链接应该是这样的: https://site.com/android/jokes/updateLikes.php?jokeName=Joke 7
问题是在请求之后,什么都没有发生。我知道这很正常,因为 HTTPS
,但我真的找不到一种方法来让请求生效,即使这里有大约10个答案。你能告诉我我错过了什么吗?我知道这是一件很小的东西,但我看不出来。
下面是我的php代码(只是一个附加信息):
<?php
$jokeName = urldecode($_GET["jokeName"]); // urldecode added after a comment suggestion.
$con=mysqli_connect("localhost","user","pass","database");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con,"UPDATE JOKES SET likes = likes+1
WHERE jokeName='$jokeName'");
mysqli_close($con);
?>
p、 我已经改变了网站名称和数据库的详细信息在张贴的代码。
3条答案
按热度按时间ioekq8ef1#
如果有人遇到同样的问题,我是这样解决的:
在php中,需要从url转义和解码参数,如:
这可能不是最好的方法,但它是有效的。
vq8itlhq2#
你发的邮件
jokeName=joke 7
作为岗位主体(实体)。但在php方面,您试图将其作为get param(url参数)获取。所以笑话id不会传递给php端。php端的一些简单日志应该会揭示这一点。
要么添加
jokeName=Joke 7
作为url参数,或使用$_POST['jokeName']
在php方面。new9mtju3#
你应该使用“URL编码”来确保目标字符串中的空白被正确地转换。