我只是試圖發佈數據在服務器上。 這沒有錯誤,但數據沒有被插入。 我通過直接訪問php頁面使用GET方法進行檢查,它的工作原理,但是當我運行該應用程序,它不起作用。無法POST服務器上的數據mysqli/Php在android
PHP Script:
<?php
$conn=mysqli_connect("localhost","my_user","my_password","my_db");
$name=$_POST["name"];
$age=$_POST["age"];
$userName=$_POST["userName"];
$password=$_POST["password"];
$statement=mysqli_prepare($conn,"INSERT INTO User (name,age,UserName,password) VALUES (?,?,?,?)");
mysqli_stmt_bind_param($statement,"siss",$name,$age,$userName,$password);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
mysqli_close($conn);
?>
但是,當我手動測試使用GET方法一樣 http://test.com?user=user1&age=11&userName=wer45&password=23ssds
and change the php scripts as :
<?php
$conn=mysqli_connect("localhost","my_user","my_password","my_db");
$name=$_GET["name"];
$age=$_GET["age"];
$userName=$_GET["userName"];
$password=$_GET["password"];
$statement=mysqli_prepare($conn,"INSERT INTO User (name,age,UserName,password) VALUES (?,?,?,?)");
mysqli_stmt_bind_param($statement,"siss",$name,$age,$userName,$password);
mysqli_stmt_execute($statement);
mysqli_stmt_close($statement);
mysqli_close($conn);
?>
這裏以上GET作品,任何人都可以查看下面的代碼,並在這裏幫我找出問題。我無法追蹤,因爲沒有錯誤發生。
public class storeUserDataAsyncTask extends AsyncTask<Void,Void,Void>{
User user;
GetUserCallBack userCallBack;
public storeUserDataAsyncTask(User user,GetUserCallBack userCallBack){
this.user=user;
this.userCallBack=userCallBack;
}
@Override
protected Void doInBackground(Void... params) {
HashMap<String,String> dataToSend=new HashMap<>();
dataToSend.put("name", user.name);
dataToSend.put("age",user.age+"");
dataToSend.put("userName",user.userName);
dataToSend.put("password",user.password);
HttpURLConnection httpURLConnection=null;
try {
URL url = new URL("http://nishantapp11.esy.es/Register.php");
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setConnectTimeout(10000);
httpURLConnection.setReadTimeout(10000);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
//httpURLConnection.setChunkedStreamingMode(0);
int serverResponseCode=httpURLConnection.getResponseCode();
if(serverResponseCode==HttpURLConnection.HTTP_OK){
}else{
Log.e("TAG","not ok");
}
OutputStreamWriter outputStreamWriter=new OutputStreamWriter(httpURLConnection.getOutputStream());
outputStreamWriter.write(getPostDataString(dataToSend));
outputStreamWriter.flush();
/* OutputStream outputStream=httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));
bufferedWriter.write(getPostDataString(dataToSend));
bufferedWriter.flush();
bufferedWriter.close();*/
}catch (Exception e){
e.printStackTrace();
}
finally {
httpURLConnection.disconnect();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
progressDialog.dismiss();
userCallBack.done(null);
super.onPostExecute(aVoid);
}
private String getPostDataString(HashMap<String,String> params) throws UnsupportedEncodingException{
StringBuilder result=new StringBuilder();
boolean first =true;
for(HashMap.Entry<String,String> entry:params.entrySet()) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
}
//Log.e("POST URL", result.toString());
return result.toString();
}
}
你有任何形式?如果是,那麼顯示它的代碼。 –
歡迎來到堆棧溢出。請閱讀常見問題解答,遊覽和幫助部分。在這種情況下,它有助於隔離問題。使用wireshark查看是否有東西從android代碼中傳出。使用郵遞員生成HTTP帖子,看看這是否工作。檢查php代碼是否使用調試器或日誌條目運行。這將讓你更具體。哦,並檢查它是否與Android上的Cookie無關... –
我不認爲表單數據有任何問題。因爲當我打印POST URL時,它會按預期顯示字符串,如 name = name1&age = 11&userName = test1&password = pass –