我有这个异步任务:
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.S 我已在发布的代码中更改了网站名称和数据库详细信息。
答案 0 :(得分:1)
您应该使用“url encoding”来确保目标字符串中的空白被正确转换。
答案 1 :(得分:0)
您正在发送帖子jokeName=joke 7
作为帖子正文(实体)。但是在php方面,你试图将它作为GET参数(url参数)。所以笑话id不会传递给PHP端。
php端的一些简单登录应该揭示这一点。
将jokeName=Joke 7
添加为url参数,或在php端使用$_POST['jokeName']
。
答案 2 :(得分:0)
如果某人遇到同样的问题,请按照以下方法修复:
try{
String encodedUrl = URLEncoder.encode("name with spaces", "UTF-8");
URL url = new URL("https://site.com/android/dir/file.php?paramName="+encodedUrl);
URLConnection urlConnection = url.openConnection();
@SuppressWarnings("unused")
InputStream in = urlConnection.getInputStream();
}catch(Exception e){
e.printStackTrace();
}
}
在php中你需要从URL中转义并解码参数,如:
$categoryParam= mysql_real_escape_string(urldecode($_GET["Param"]));
这可能不是最好的方法,但它正在发挥作用。