Passage de tableau de Chaîne de PHP en tant que POSTE de
Je suis en train de passer un tableau de chaînes à un script PHP en tant que données POST, mais je suis pas sûr de quoi faire.
Voici mon code pour l'exécution de scripts PHP pour l'instant:
Où je suis en train de passer le tableau:
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);
Appel de script 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();
}
Et le script PHP en question:
<?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);
?>
Des idées? Merci !
Modifier
Je suis en train d'essayer ce qui suit, mais toujours pas de joie:
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);
}
C'est tout le "rapport d'Erreurs" que j'ai...
HttpResponse response = client.execute(post);
if (response.getStatusLine().getStatusCode() != 200)
{
System.out.println("DB: Error executing script !");
}
Que diriez -
vous devriez poster que comme une réponse.
Je vais vous donner que d'essayer maintenant, merci !
nameValuePairs.add(new BasicNameValuePair("devices[]", device1));
, nameValuePairs.add(new BasicNameValuePair("devices[]", device2));
... ?vous devriez poster que comme une réponse.
Je vais vous donner que d'essayer maintenant, merci !
OriginalL'auteur TomSelleck | 2013-04-06
Vous devez vous connecter pour publier un commentaire.
Pour passer un tableau en php dans la chaîne de requête, vous devez ajouter
[]
identifiant et ajouter chaque élément séparé à l'entrée, donc quelque chose comme cela devrait fonctionner:maintenant,
$_POST['devices']
sur php côté contiendra un tableau.$_POST ["devices"], n'est plus correct array($_POST ["devices"]); ¿?
OriginalL'auteur dev-null-dweller
Je pense que vous devriez json encoder vos appareils de la matrice de sorte que vous obtenez une chaîne de caractères que vous pouvez passer à BasicNameValuePair(...).
Dans votre code php, vous avez juste à utiliser la fonction json_decode pour obtenir un tableau.
Dans votre code php:
qu'est-ce que nameValuePairs
OriginalL'auteur jithujose
Tout d'abord, il vous manque des guillemets simples lors de l'accès à la
$_POST
tableau en PHP. Modifiez la ligne:
Vous devez activer la journalisation des erreurs ou de la sortie de PHP messages d'erreur pour le débogage à l'aide de l'ini valeur
display_errors
,log_errors
,error_reporting
de se faire remarquer de telles erreurs.Mais même
array($_POST['devices'])
ne fera pas ce sont peut attendre.array(...)
est un tableau de l'initialisation de construire en php. Ce qui signifie que vous enveloppez juste ($_POST ["devices"]) dans un autre tableau.... Aimerait voir la sortie de
var_dump($_POST);
. Cela me donnerait une chance d'aider les autres..Oh ne savais pas que l', merci ! Comment puis-je activer les erreurs ??
Vous pouvez définir ces paramètres à des valeurs appropriées à l'aide de la
php.ini
fichier (dans le monde) ou par script à l'aide de la fonctionini_set($key, $value)
. Note de ma mise à jour sur learray(...)
construireOriginalL'auteur hek2mgl