2013-03-23 60 views
0

我正在撕裂我的頭髮,因爲我遇到了這個問題。我試圖讓用戶從他們的android應用程序上傳一些數據到我開發的網站服務。使用PHP Web服務插入數據從Android應用程序到PostgreSQL數據庫問題

的數據是使用JSON和Android的PHP Web服務上載由它來「插入」數據到我的PostgreSQL數據庫。

我不清楚其中的邏輯錯誤是在我的整個應用程序的應用程序產生在運行時沒有錯誤,但是當我檢查我的PostgreSQL服務器空間的數據庫記錄一直沒有提交的數據。

請參閱我使用下面的代碼,並請儘量以幫助確定我要去的地方錯了。我在Google上尋找教程,但它們都基於從PHP web服務讀取數據到android應用程序,但我期望從android應用程序發送原始數據。

DataPost活動

public void postData() throws JSONException{ 
     Toast.makeText(DataSummary.this, "Done! Check your profile online to see your record.", Toast.LENGTH_LONG).show(); 

     Thread trd = new Thread(new Runnable(){ 
      public void run(){ 
      //Create a new HttpClient and Post Header 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://users.aber.ac.uk/dwd/mfb/php/jsonscript.php"); 
       JSONObject json = new JSONObject(); 

       Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), i); 
       ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
       bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 90, bao); 
       byte[] ba = bao.toByteArray(); 
       String ba1=Base64.encodeToString(ba, i); 

       try { 
        //JSON data: 
        json.put("photo", ba1.toString()); 
        json.put("name", name); 
        json.put("description", description); 
        json.put("latitude", latitude); 
        json.put("longitude", longitude); 
        json.put("project", project); 
        json.put("owner", username); 

        JSONArray postjson = new JSONArray(); 
        postjson.put(json); 

        //Post the data 
        httppost.setHeader("json", json.toString()); 
        httppost.getParams().setParameter("jsonpost", postjson); 

        //Execute HTTP Post Request 
        System.out.println(json); 
        HttpResponse response = httpclient.execute(httppost); 

        //for JSON 
        if(response != null) 
        { 
         InputStream is = response.getEntity().getContent(); 

         BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
         StringBuilder sb = new StringBuilder(); 

         String line = null; 
         try{ 
          while((line = reader.readLine()) != null){ 
           sb.append(line + "\n"); 
          } 
         } catch (IOException e){ 
          e.printStackTrace(); 
         } finally { 
          try { 
           is.close(); 
          } catch(IOException e){ 
           e.printStackTrace(); 
          } 
         } 
        } 

       } catch(ClientProtocolException e){ 
        e.printStackTrace(); 
       } catch (IOException e){ 
        e.printStackTrace(); 
       } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      } 
     }); 
     trd.start(); 
    } 

PHP Webservice的

<?php 
session_start(); 
$conn = pg_connect("database_string"); 

//VARIABLES TO BE WRITTEN TO THE DATABASE 
$photo = $_REQUEST["photo"]; 

echo $photo; 
$binary=base64_decode($photo); 
header('Content-Type: bitmap; charset=utf-8'); 

$name = json_decode(stripslashes($_POST["name"])); 
$safe_name = pg_escape_string($name); 
$desc = json_decode(stripslashes($_POST["description"])); 
$safe_desc = pg_escape_string($desc); 
$latitude = json_decode(stripslashes($_POST["latitude"])); 
$longitude = json_decode(stripslashes($_POST["longitude"])); 
$project = json_decode(stripslashes($_POST["project"])); 
$owner = json_decode(stripslashes($_POST["owner"])); 

$id = pg_query("SELECT * FROM users WHERE email = $owner"); 
$id_assoc = pg_fetch_assoc($id); 
$id_res = $id_assoc['u_id']; 

//SQL STATEMENT HERE FOR INSERT 

$res = pg_query("INSERT INTO records (photo, name, description, latitude, longitude, project, owner) VALUES ('$photo', '$safe_name', '$safe_desc', '$latitude', '$longitude', '$project', '$id_res'"); 

pg_close($conn); 

?> 

任何人誰可以提供一些建議/教程/代碼解決方案將是在我的書英雄!

+0

也許一個愚蠢的建議...但交易? 'INSERT'語句是否被提交或回滾到'pg_close'? – mthmulders 2013-03-23 16:12:25

+0

你會建議擺脫'pg_close'並再次測試提交嗎? – WebDevDanno 2013-03-23 16:53:02

+0

@mthmulders擺脫'pg_close();' – WebDevDanno 2013-03-23 17:26:20

回答

1

SELECT查詢是否返回任何內容?我不是一個PHP專家,但對我來說,它看起來像你要發送的變量錯了,所以不應該有:

$id = pg_query("SELECT * FROM users WHERE email = $owner"); 

$id = pg_query("SELECT * FROM users WHERE email ='".$owner."'"); 

的INSERT查詢相似。 其他的想法:

  • 不做SELECT *當你只是想一列它會慢一些。例如有,如果你想用它更好地把它插入查詢的子查詢的用戶只是ID僅索引掃描圖9.2中,你可以直接從索引中返回的ID(電子郵件,ID)
  • INSERT INTO records (... ,owner) VALUES (... ,(SELECT id FROM users WHERE email='".$owner."')") 你甚至可以在最後添加RETURNING owner從插入查詢獲得所有者ID,如果你需要它在其他地方。
+0

將我的SQL查詢修改爲您的建議,但仍然沒有成功:( – WebDevDanno 2013-03-23 17:55:38

+0

@DanielD如果'SELECT'返回正確的東西,您還沒有回答。 – 2013-03-23 18:02:19

相關問題