Bonjour,
config UBUNTU 10.4 GWT2.0.4 PHP5.2.9 sur serveur hébergeur et 5.3.2-1 en local
je cherche à passer des données pour un dictionnaire basque français en ligne sous forme de json string par POST.
Voici le code, un peu long mais tout le problème se passe dès les premières lignes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
public String toJSON() {
JSONObject jsonObj = new JSONObject();
jsonObj.put("a", new JSONString(this.entryBox.getText()));
jsonObj.put("b", new JSONString(this.translationInputBox.getText()));
jsonObj.put("c", new JSONString(currentWordId));
return (jsonObj.toString());
}
boolean registerWord(boolean newWord) {
String url = new String("");
if (newWord) {
url = URL.encode(serverUrl + "executeWordRegisterRequest.php");
// Window.alert("Attention, vous allez créer une nouvelle définition dans le dictionnaire avec le texte de la zone de saisie!");
} else {
url = URL.encode(serverUrl + "executeWordUpdateRequest.php");
// Window.alert("Attention, vous allez écraser la définition du dictionnaire avec le texte de la zone de saisie!");
}
String json = toJSON();
Window.alert("JSONOOBJect= : "+json);
// Send request to server and catch any errors.
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, url);
try {
builder.setHeader("Content-Type",
"application/x-www-form-urlencoded");
Request request = builder.sendRequest("data=" + json,
(RequestCallback) new RequestCallback() {
public void onError(Request request, Throwable exception) {
displayError("Couldn't register word");
}
public void onResponseReceived(Request request,
Response response) {
if (200 == response.getStatusCode()) {
Window.alert(response.getText());
} else {
Window.alert("Error: HttpRequest to send the word failed"
+ response.getStatusCode());
}
}
});
} catch (RequestException e) {
displayError("Error in sending request to register a word");
}
return false;
} |
Quand le code s'exécute sur le serveur Apache local , tout va bien et la première window.alert("message") me donne bien un chaîne de la forme
{'"a": "xakur", "b":"chien","c":"1235"}
par contre sur le serveur de mon hébergeur, j'obtiens:
{\"a\":\"xakur\", \"b\":\"chien\",\"c\":\"1235\"}
et dans ce cas, le programme PHP (voir code ci-dessous ) et notamment la ligne
$jsonArray=json_decode($_POST['data'],true);
ne l'interprète pas correctement!
Quelqu'un pourrrait-il me dire d'où provient cette différence de comportement et comment s'en affranchir?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <?php
header('Content-Type: text/plain ;charset=utf-8');
$jsonArray= array();
$jsonArray=json_decode($_POST['data'],true);
echo "voici ce que je recois".$_POST['data']."et json array a: ".$jsonArray['a']." et json array b: ".$jsonArray['b'];
// Establish a connection to MySQL
require_once 'login.php';
$con = mysql_connect($db_host, $db_user, $db_pswd);
// on crée la requête SQL
$sql =sprintf( "INSERT INTO words VALUES('%s','%s',null)",
mysql_real_escape_string($jsonArray['a']),
mysql_real_escape_string($jsonArray['b']));
// on sélectionne la base
mysql_select_db($db,$con);
// on envoie la requête
$resp = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
if ($resp) {
echo(("Le mot a été correctement enregistré"));
}else {
echo ("Problème de connexion à la base de données. Il se peut que le mot n'ait pas été enregistré.");
}
// on ferme la connexion à mysql
mysql_close();
?> |
Partager