Android : Connexion à MySQL à l'aide de PHP

1 1 1 1 1 1 1 1 1 1 Rating 5.00 (1 Vote)
Submit to DeliciousSubmit to DiggSubmit to FacebookSubmit to Google PlusSubmit to StumbleuponSubmit to TechnoratiSubmit to TwitterSubmit to LinkedIn

30-android-connexion-a-mysql-a-l-aide-de-php

Grâce à ce tutoriel, vous connecterez facilement vos applications Android à un site Internet utilisant PHP et MySQL.

1. Les technologies

json logo JSON (JavaScript Object Notation)
Format de données textuel, générique, dérivé de la notation des objets du langage ECMAScript.
logo-mysql MySQL
Système de gestion de base de données (SGBD).
logo php PHP
Langage de scripts libre principalement utilisé pour produire des pages Web dynamiques.
android Android
Système d'exploitation open source pour smartphones, PDA et terminaux mobiles.

2. Introduction

La méthode la plus répandue de se connecter à une base de données MySQL à distance à partir d'un appareil Android, est d'utiliser un service.

MySQL est habituellement utilisé avec PHP, donc le moyen le plus simple et le plus évident est d'écrire un script PHP

Dans ce tutoriel, je vais vous montrer comment utiliser PHP et la base de données MySQL pour récupérer des informations depuis le serveur.

Pour faire des connexions avec le script PHP, nous allons utiliser le protocole HTTP du système Android.

Si nous parlons de l'architecture client-serveur, le client est l'appareil Android et le serveur est le couple PHP/MySQL.

android php mysql 

Nous allons utiliser le format JSON.

3. JSON (JavaScript Object Notation)

JSON (JavaScript Object Notation) est un format de données textuel, générique, dérivé de la notation des objets du langage ECMAScript. Il permet de représenter de l’information structurée. Créé par Douglas Crockford, il est décrit par la RFC 4627 de l’IETF.

Exemple :

Format JSON :

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

À titre de comparaison, le même exemple en XML :

<menu id="file" value="File">
  <popup>
    <menuitem value="New" onclick="CreateNewDoc()" />
    <menuitem value="Open" onclick="OpenDoc()" />
    <menuitem value="Close" onclick="CloseDoc()" />
  </popup>
</menu>

4. Comment va être utilisé JSON dans notre application

  • Lorsque l'application Android va s'exécuter, il se connectera au script PHP.
  • Le script PHP va récupérer les données depuis la base de données MySQL. Ensuite les données seront encodées au format JSON et envoyées au système Android.
  • Ensuite, l'application Android va obtenir ces données codées. Il les analysera et les affichera sur l'appareil Android.

5. Détail de la mise en œuvre

Créez une base de données bdVille. Dans la base de données créer une table tblVille. Cette table se compose de deux colonnes. La première est ID_ville et la deuxième est Nom_ville.

Script SQL pour la création de la table tblVille

CREATE TABLE tblVille (
  ID_ville INT(11) auto_increment,
  Nom_ville VARCHAR(100),
  PRIMARY KEY (ID_ville)
);

Script SQL pour l'insertion de données dans la table tblVille

INSERT INTO tblVille (Nom_ville) VALUES ("Paris");
INSERT INTO tblVille (Nom_ville) VALUES ("Marseille");
INSERT INTO tblVille (Nom_ville) VALUES ("Lyon");
INSERT INTO tblVille (Nom_ville) VALUES ("Toulouse");
INSERT INTO tblVille (Nom_ville) VALUES ("Nice");
INSERT INTO tblVille (Nom_ville) VALUES ("Nantes");
INSERT INTO tblVille (Nom_ville) VALUES ("Strasbourg");
INSERT INTO tblVille (Nom_ville) VALUES ("Montpellier");
INSERT INTO tblVille (Nom_ville) VALUES ("Bordeaux");
INSERT INTO tblVille (Nom_ville) VALUES ("Lille");

Nous voulons récupérer le nom de la ville de notre table tblVille qui commence par L.

Le code PHP sera très simple :

  • se connecter à la base de données
  • exécuter une requête SQL, avec un bloc WHERE en fonction des données des valeurs POST/GET
  • l'envoie en format JSON

Par exemple, nous aurons cette fonctionnalité dans le ville.php :

<?php
  mysql_connect("localhost","root","password");
  mysql_select_db("bdVille");
  $sql=mysql_query("SELECT * FROM tblVille WHERE Nom_ville like '".$_REQUEST['ville']."%'");
  while($row=mysql_fetch_assoc($sql))
  $output[]=$row;
  print(json_encode($output));
  mysql_close();
?>

Dans l'application Android :

  • utiliser HttpPost pour obtenir les données
  • convertir la réponse en chaîne
  • analyser les données JSON, et utiliser les comme vous le voulez

L'ensemble du code de récupération des données du serveur de notre application Android est indiqué ci-dessous :

Attention localhost ou 127.0.0.1 ne fonctionnent pas. 

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
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;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.TextView;
public class ville extends Activity {
    TextView txt;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout rootLayout = new LinearLayout(getApplicationContext());  
        txt = new TextView(getApplicationContext());  
        rootLayout.addView(txt);  
        setContentView(rootLayout);  
        // Définir le texte et appeler la fonction de connexion.  
        txt.setText("Connexion..."); 
        // Appeler la méthode pour récupérer les données JSON
        txt.setText(getServerData(strURL)); 
    }
    // Mettre l'adresse du script PHP
    // Attention localhost ou 127.0.0.1 ne fonctionnent pas. Mettre l'adresse IP local.
    public static final String strURL = "http://192.168.0.10/www/ville.php";
    private String getServerData(String returnString) {
        InputStream is = null;
        String result = "";
        // Envoyer la requête au script PHP.
        // Script PHP : $sql=mysql_query("select * from tblVille where Nom_ville like '".$_REQUEST['ville']."%'");
        // $_REQUEST['ville'] sera remplacé par L dans notre exemple.
        // Ce qui veut dire que la requête enverra les villes commençant par la lettre L
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("ville","L"));
        // Envoie de la commande http
        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(strURL);
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        }catch(Exception e){
            Log.e("log_tag", "Error in http connection " + e.toString());
        }
        // Convertion de la requête en string
        try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result=sb.toString();
        }catch(Exception e){
            Log.e("log_tag", "Error converting result " + e.toString());
        }
        // Parse les données JSON
        try{
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++){
                JSONObject json_data = jArray.getJSONObject(i);
                // Affichage ID_ville et Nom_ville dans le LogCat
                Log.i("log_tag","ID_ville: "+json_data.getInt("ID_ville")+
                        ", Nom_ville: "+json_data.getString("Nom_ville")
                );
                // Résultats de la requête
                returnString += "\n\t" + jArray.getJSONObject(i); 
            }
        }catch(JSONException e){
            Log.e("log_tag", "Error parsing data " + e.toString());
        }
        return returnString; 
    }
}

6. Captures d'écran

device 

script php 

logcat

7. Vidéo

128x128 video-1 Vidéo
Android : Connexion à MYSQL à l'aide de PHP

8. Télécharger le code source du projet

128x128 download Code source du projet
Android : Connexion à MySQL à l'aide de PHP
Submit to DeliciousSubmit to DiggSubmit to FacebookSubmit to Google PlusSubmit to StumbleuponSubmit to TechnoratiSubmit to TwitterSubmit to LinkedIn