2013-12-12 77 views
1

我只是簡單地說這個問題。我的php代碼有什麼問題,它一直輸出0或必填字段(s)缺失。下面的代碼必填字段missing results

<?php 

// array for JSON response 
$response = array(); 

// check for required fields 
if (isset($_POST['id']) && isset($_POST['status_id'])) { 

    $id = $_POST['id']; 
    $status_id = $_POST['status_id']; 

    // include db connect class 
    require_once __DIR__ . '/db_connect.php'; 

    // connecting to db 
    $db = new DB_CONNECT(); 

    // mysql update row with matched pid 
    $result = mysql_query("UPDATE pims_liip_pallet_purchase_order SET status = '$status_id' WHERE id = $id"); 


    // check if row inserted or not 
    if ($result) { 
     // successfully updated 
     $response["success"] = 1; 
     $response["message"] = "Product successfully updated."; 

     // echoing JSON response 
     echo json_encode($response); 
    } else { 

    } 
} else { 
    // required field is missing 
    $response["success"] = 0; 
    $response["message"] = "Required field(s) is missing"; 

    // echoing JSON response 
    echo json_encode($response); 
} 
?> 

這裏是POST數據在我的應用程序

protected String doInBackground(String... args) { 

      // TODO Auto-generated method stub 
      // Check for success tag 
      int success; 
      String status_id = statusID.getText().toString(); 

      try { 
       // Building Parameters 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("status_id", status_id)); 

       Log.d("request!", "starting"); 

       //Posting user data to script 
       JSONObject json = jsonParser.makeHttpRequest(
        UPDATE_COMMENTS_URL, "POST", params); 

       // full json response 
       Log.d("Post Update", json.toString()); 

       // json success element 
       success = json.getInt(TAG_SUCCESS); 
       if (success == 1) { 
       Log.d("Updated!", json.toString());  
       finish(); 
       return json.getString(TAG_MESSAGE); 
       }else{ 
       Log.d("Update Failure!", json.getString(TAG_MESSAGE)); 
       return json.getString(TAG_MESSAGE); 

       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 

     } 

任何答案將非常榮幸:d謝謝!

+1

print_r($ _ POST)並查看從窗體獲得的參數是什麼。您驗證是阻止您提交 – Sundar

+0

由於您沒有收到任何錯誤消息,並且您看到了自己的錯誤消息,因此您期望的兩個參數(id和status_id)中至少有一個缺少 – vkamayiannis

+0

「它始終輸出0或必需字段缺失。「意味着你的情況失敗。爲什麼不能檢查或回顯帖子變量,看看他們是否失蹤 –

回答

1

你的錯誤說明了一切。由於您進入} else { ... }位,這意味着isset($_POST['id']) && isset($_POST['status_id'])是錯誤的。

換句話說,你的形式可以是:

  • 沒有使用POST,但得到。在這種情況下,請將method="post"添加到<form>標籤。 (實際上,POST是默認的行爲,因此,如果是這樣的話,你可能需要刪除或從表單標籤更改method="GET"
  • 和/或表單不包含輸入字段與name="id"和/或name="status_id"

更新的問題添加了Android代碼。因此,此更新:

我懷疑jsonParser.makeHttpRequest實際上發佈表單編碼的json字符串。它更可能只是將json數據發佈到web服務器。 PHP的$ _POST不會自動填充這些數據,因爲它只處理表單編碼數據。

您可能需要從stdIn中讀取此數據。

嘗試:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    $rawPostData = file_get_contents("php://input"); 
    $postData = (array)json_decode($rawPostData); 
} 

然後用$ POSTDATA,你否則將使用$ _ POST

+0

如果我沒有在這一張上使用任何表格,該怎麼辦?當我點擊「已批准」或「已拒登」按鈕時,我只需要結果成功即可用於我的Android應用程序。那可能嗎? –

+0

那麼發佈的數據來自哪裏?從你的Android應用程序?你如何發送它? – daker

+0

我發佈了我的應用的發佈數據。這就是我發送它的方式。我的代碼有問題嗎? –

0

剛剛調試$_POST['id']$_POST['status_id']。 在此行之前。

if (isset($_POST['id']) && isset($_POST['status_id'])) { 

你會自動找到答案。希望兩個post變量之一沒有設置。 用於調試使用print_r($_POST);

+0

每當我把print_r($ _ POST);輸出是Array() –

+0

正確...這就是爲什麼你會遇到問題。沒有設置帖子值。請檢查您發送郵寄值的位置。 –

+0

問題是沒有窗體:請參閱更新後的問題。他從Android應用程序發佈。最有可能的_POST是空的,因爲他發佈的是JSON數據而不是「x-www-form-urlencoded」數據,php本身並不解釋這些數據,因此不會填充_POST。 –