2016-02-16 35 views
1

我只是試圖發佈數據在服務器上。 這沒有錯誤,但數據沒有被插入。 我通過直接訪問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(); 

     } 
    } 
+0

你有任何形式?如果是,那麼顯示它的代碼。 –

+0

歡迎來到堆棧溢出。請閱讀常見問題解答,遊覽和幫助部分。在這種情況下,它有助於隔離問題。使用wireshark查看是否有東西從android代碼中傳出。使用郵遞員生成HTTP帖子,看看這是否工作。檢查php代碼是否使用調試器或日誌條目運行。這將讓你更具體。哦,並檢查它是否與Android上的Cookie無關... –

+0

我不認爲表單數據有任何問題。因爲當我打印POST URL時,它會按預期顯示字符串,如 name = name1&age = 11&userName = test1&password = pass –

回答

0

看着sample HTTPURLConnection,有一個httpURLConnection.connect();在我看不到你的代碼的最後。

請注意,您的代碼有httpURLConnection.disconnect();在catch的部分例外。

免責聲明:假設你的代碼是完整的,我

假如你實際使用Wireshark的正確,你會看到沒有交通出來的模擬器。這就是爲什麼它是一個非常有用的工具。它可以在代碼沒有錯誤或異常時提供信息,但只是缺少一些東西。

+0

是的,這是錯誤之一,但之後我也遇到了其他錯誤。感謝您告訴Wireshark,它幫助我們進行了很多調試 –

相關問題