Aller au contenu

Réponse HTTP après un POST pose problème.


Jason'Bar'Depaty

Recommended Posts

Bonsoir !

Je fais appel à vous car je débute dans la programmation Android et j'ai un petit problème (bien que mes bases de C# m'aident un peu).

J'ai dans mon application un formulaire de contact qui lui, fonctionne, les données sont bien entrées en BDD mais je ne sais pas exactement ce qui est renvoyé dans la réponse.

Mais trêve de bla bla, je vais vous montrer ce que j'ai.

package com.dirtysophie.android.musics;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair;

public class Contact extends Musics {
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.contact);

       final Button buttonSubmit = (Button) findViewById(R.id.button1);
       buttonSubmit.setOnClickListener(new View.OnClickListener() {
		public void onClick(View v) {
			HttpClient httpclient = new DefaultHttpClient();
       	    HttpPost httppost = new HttpPost("http://www.dirty-sophie.fr/script.php");

       	    EditText formName = (EditText)findViewById(R.id.editText1);
       	    String name = formName.getText().toString();
       	    EditText formMail = (EditText)findViewById(R.id.editText2);
       	    String mail = formMail.getText().toString();
       	    EditText formMessage = (EditText)findViewById(R.id.editText3);
       	    String message = formMessage.getText().toString();
       	    Spinner SpinnerFormType = (Spinner)findViewById(R.id.SpinnerFormType);
       	    String subject = SpinnerFormType.getSelectedItem().toString();

       	    try {
       			List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
       	        nameValuePairs.add(new BasicNameValuePair("name", name));
       	        nameValuePairs.add(new BasicNameValuePair("mail", mail));
       	        nameValuePairs.add(new BasicNameValuePair("subject", subject));
       	        nameValuePairs.add(new BasicNameValuePair("message", message));
       	        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

       	        HttpResponse response = httpclient.execute(httppost);
       	        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
       	        String s = reader.readLine();
       	        TextView responseTextView = (TextView)findViewById(R.id.textView2);
           	    responseTextView.setText(s);

       	    } catch (ClientProtocolException e) {
       	        // TODO Auto-generated catch block
       	    } catch (IOException e) {
       	        // TODO Auto-generated catch block
       	    }
		}
       });
   }	
} 

Et ma page script.php

<?php 

// Connexion et selection de la BDD

if(isset($_POST['name']))
{
$name = $_POST['name'];
$mail = $_POST['mail'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$sql = "INSERT INTO receive VALUES('','$name','$mail','$subject','$message')";
mysql_query($sql);
echo 'Message envoyé !';
}
?>

Le problème c'est que mon TextView va m'afficher un joli "<br />" à la place de "Message envoyé !".

Qu'ai-je raté ?

Merci par avance de vos réponses !

Lien vers le commentaire
Partager sur d’autres sites

Pour commencer, utilise la fonction mysql_real_escape_string http://www.php.net/manual/fr/function.mysql-real-escape-string.php pour éviter que l'on puisse faire de l'injection sql

<?php 

// Connexion et selection de la BDD

if(isset($_POST['name']))
{
       $name = mysql_real_escape_string($_POST['name']);
       $mail = mysql_real_escape_string($_POST['mail']);
       $subject = mysql_real_escape_string($_POST['subject']);
       $message = mysql_real_escape_string($_POST['message']);
       $sql = "INSERT INTO receive VALUES('','$name','$mail','$subject','$message')";
       mysql_query($sql);
       echo 'Message envoyé !';
}
?>

Sinon, pour trouver la cause de ton problème, commence par exécuter ce script dans un navigateur (tu peux temporairement remplacer les $_POST par des $_GET pour pouvoir faire tes test). Tu as certainement des retours à la ligne affichés par ton script.

Enfin, dans ton code Java remplace

String s = reader.readLine();
TextView responseTextView = (TextView)findViewById(R.id.textView2);
responseTextView.setText(s);

par

String line = "";
String text = "";
while ((line = br.readLine()) != null){
   text += line;
}
TextView responseTextView = (TextView)findViewById(R.id.textView2);
responseTextView.setText(text);

Lien vers le commentaire
Partager sur d’autres sites

Tout d'abord, merci de m'aider !

Pour les mysql_real_escape_strings, je les mets en temps normal, c'était juste pour tester la ;)

Ensuite, j'ai un petit problème avec le code Java que tu m'as donné, il me dit que 'br' ne peut être résolu dans le while :/

Oups, petite erreur de copier-coller...

Ce n'est pas

while ((line = br.readLine()) != null){

mais

while ((line = reader.readLine()) != null){

Lien vers le commentaire
Partager sur d’autres sites

Bon en fait mon TextView affiche ce message la :

<br /><b>Warning</b>: In_array() [<a href='function.in-array'>function.in-array</a>];Wrong datatype for second argument in <b>/home/securite9.php</b> on line <b>7
</b>
<br /><b>Warning</b>: In_array() [<a href='function.in-array'>function.in-array</a>];Wrong datatype for second argument in <b>/home/securite9.php</b> on line <b>7
</b>
<br /><b>Warning</b>: In_array() [<a href='function.in-array'>function.in-array</a>];Wrong datatype for second argument in <b>/home/securite9.php</b> on line <b>7
</b>
<br /><b>Warning</b>: In_array() [<a href='function.in-array'>function.in-array</a>];Wrong datatype for second argument in <b>/home/securite9.php</b> on line <b>7
</b>
<br /><b>Warning</b>: Cannot modify header information - headers already sent by (output started /home/security9.php:7) in <b>/home/obstart.php</b> on line 42
<br />Message envoyé !

Lien vers le commentaire
Partager sur d’autres sites

Ce n'est pas très propre mais tu peux essayer de mettre error_reporting(0); au début de ton script. Si ton hébergeur le permet, cela désactivera l'affichage des erreurs. Par contre, en cas d'erreur PHP tu aura une page blanche donc si tu modifie ton script il faudra que tu commentes cette ligne pour trouver la cause d'un éventuel problème.

<?php 
error_reporting(0); 

// Connexion et selection de la BDD

if(isset($_POST['name']))
{
       $name = $_POST['name'];
       $mail = $_POST['mail'];
       $subject = $_POST['subject'];
       $message = $_POST['message'];
       $sql = "INSERT INTO receive VALUES('','$name','$mail','$subject','$message')";
       mysql_query($sql);
       echo 'Message envoyé !';
}
?>

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...