Passing String array in PHP as POST

I am trying to pass a string array into a PHP script as POST data, but not sure what to do.

Here is my code for executing PHP scripts:

Where am I trying to pass an array:

nameValuePairs.add(new BasicNameValuePair("message",message)); String [] devices = {device1,device2,device3}; nameValuePairs.add(new BasicNameValuePair("devices", devices));// <-- Can't pass String[] to BasicNameValuePair callPHPScript("notify_devices", nameValuePairs); 

PHP script call:

 public String callPHPScript(String scriptName, List<NameValuePair> parameters) { HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://localhost/" + scriptName); String line = ""; StringBuilder stringBuilder = new StringBuilder(); try { post.setEntity(new UrlEncodedFormEntity(parameters)); HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() != 200) { System.out.println("DB: Error executing script !"); } else { BufferedReader rd = new BufferedReader(new InputStreamReader( response.getEntity().getContent())); line = ""; while ((line = rd.readLine()) != null) { stringBuilder.append(line); } } } catch (IOException e) { e.printStackTrace(); } System.out.println("DB: Result: " + stringBuilder.toString()); return stringBuilder.toString(); } 

And reviewed by a PHP script:

 <?php include('tools.php'); // Replace with real BROWSER API key from Google APIs $apiKey = "123456"; // Replace with real client registration IDs $registrationIDs = array($_POST[devices]); <-- Where I want to pass array to script // Message to be sent $message = $_POST['message']; // Set POST variables $url = 'https://android.googleapis.com/gcm/send'; $fields = array( 'registration_ids' => $registrationIDs, 'data' => array( "message" => $message ), ); $headers = array( 'Authorization: key=' . $apiKey, 'Content-Type: application/json' ); // Open connection $ch = curl_init(); // Set the url, number of POST vars, POST data curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) ); // Execute post $result = curl_exec($ch); // Close connection curl_close($ch); print_as_json($result); ?> 

Any ideas? Thanks!

Edit

I try to do the following, but still not happy:

 public void notifyDevices(Message message) { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); List<String> deviceIDsList = new ArrayList<String>(); String [] deviceIDArray; //Get devices to notify List<JSONDeviceProfile> deviceList = getDevicesToNotify(); for(JSONDeviceProfile device : deviceList) { deviceIDsList.add(device.getDeviceId()); } //Array of device IDs deviceIDArray = deviceIDsList.toArray(new String[deviceIDsList.size()]); for(String deviceID : deviceIDArray) { nameValuePairs.add(new BasicNameValuePair("devices[]", deviceID)); } //Call script callPHPScript("GCM.php", nameValuePairs); } 

These are all the error messages I have ...

  HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() != 200) { System.out.println("DB: Error executing script !"); } 
+7
source share
3 answers

To pass an array in php to the query string, you must add [] to the identifier and add each element as a separate entry, so something like this should work:

 nameValuePairs.add(new BasicNameValuePair("devices[]", device1)); nameValuePairs.add(new BasicNameValuePair("devices[]", device2)); nameValuePairs.add(new BasicNameValuePair("devices[]", device3)); 

now $_POST['devices'] on the php side will contain an array.

+19
source

I think you need json to encode the array of devices to get a string that you can pass to BasicNameValuePair (...). In your php code you just need to use json_decode to return the array.

 JSONArray devices = new JSONArray(); devices.put(device1); devices.put(device2); devices.put(device3); String json = devices.toString(); nameValuePairs.add(new BasicNameValuePair("devices", devices)); 

In your php code:

 $devices = $_POST['devices']; $devices = json_decode($devices); 
+4
source

First, you are missing single quotes when accessing the $_POST array in PHP. Change the line

 $registrationIDs = array($_POST[devices]); 

in

 $registrationIDs = array($_POST['devices']); 

You must enable error logging or the output of PHP error messages for debugging using the values ​​ini display_errors , log_errors , error_reporting in order to notice such errors.


But even array($_POST['devices']) will not do what might be expected. array(...) is an array initialization construct in php. This means that you just wrap ($ _POST ['devices']) in another array.

... I would like to see the result var_dump($_POST); . This will give me a chance to help further.

+2
source

All Articles