Передача массива строк в PHP как POST
Я пытаюсь передать строковый массив скрипту PHP в качестве данных POST, но не уверен, что делать.
вот мой код для выполнения PHP скриптов до сих пор:
где я пытаюсь передать массив:
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 скрипта:
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();
}
и php-скрипт, о котором идет речь:
<?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);
?>
какие идеи? Спасибо !
редактировать
Я пытаюсь следующее, Но все еще нет радость:
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);
}
Это все "отчеты об ошибках", которые у меня есть...
HttpResponse response = client.execute(post);
if (response.getStatusLine().getStatusCode() != 200)
{
System.out.println("DB: Error executing script !");
}
3 ответов
чтобы передать массив php в строке запроса, вы должны добавить []
к идентификатору и добавьте каждый элемент как отдельную запись, поэтому что-то вроде этого должно работать:
nameValuePairs.add(new BasicNameValuePair("devices[]", device1));
nameValuePairs.add(new BasicNameValuePair("devices[]", device2));
nameValuePairs.add(new BasicNameValuePair("devices[]", device3));
Теперь $_POST['devices']
на стороне php будет содержать массив.
Я думаю, вы должны JSON кодировать массив устройств, чтобы получить строку, которую вы можете передать BasicNameValuePair(...). В вашем php-коде вам просто нужно использовать json_decode для возврата массива.
JSONArray devices = new JSONArray();
devices.put(device1);
devices.put(device2);
devices.put(device3);
String json = devices.toString();
nameValuePairs.add(new BasicNameValuePair("devices", devices));
в вашем php-коде:
$devices = $_POST['devices'];
$devices = json_decode($devices);
во-первых, вам не хватает одинарных кавычек при обращении к $_POST
массив в PHP. Изменить строку
$registrationIDs = array($_POST[devices]);
в:
$registrationIDs = array($_POST['devices']);
вы должны включить ведение журнала ошибок или вывод сообщений об ошибках PHP для отладки с использованием значения ini display_errors
, log_errors
, error_reporting
чтобы заметить такие ошибки.
но даже array($_POST['devices'])
не будет делать то, что может ожидать. array(...)
- это конструкция инициализации массива в php. Это значит, что ты просто заворачиваешься. ($_POST ['devices']) в другой массив.
... Хотел бы видеть вывод var_dump($_POST);
. Это даст мне шанс помочь дальше..