IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Connexion à une BDD sur serveur externe


Sujet :

API standards et tierces Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 25
    Points : 26
    Points
    26
    Par défaut Connexion à une BDD sur serveur externe
    Bonjour.

    J'essaye de faire une connexion sur un serveur externe, mais il y a quelques points que je ne comprends pas.
    J'ai trouvé un code sur internet que j'ai adapté à mon application. Il me permet de me connecter en localhost avec mon IP (J'utilise WAMP) et d'accéder à une base de donnée. Mon code fonctionne, et j'arrive bien à lire des info de la BDD.

    Maintenant, je souhaite me connecter à une BDD dans un serveur externe (celui de mon entreprise). Les identifiants de connexions à la BDD sont placés dans un fichier PHP lui même placé dans le serveur. Or, la connexion au serveur nécessite des identifiants. Je ne vois pas comment on peut aller lire dans ce fichier PHP sachant que dans le code JAVA, en tente d'y accéder sans identifiants.

    J'espère que vous aurez compris mes explications mais cela reste encore flou pour moi.

    Class ville.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
     
    	public class ville extends Activity {
    	    TextView txt;
    	    @Override
    	    public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.activity_main);
     
    	        //Ajout du StrictMode pour empecher les proclème lors de l'accès à la BDD
    	        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    		    StrictMode.setThreadPolicy(policy);	 
     
    	        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 PHPS
    	    // Attention localhost ou 127.0.0.1 ne fonctionnent pas. Mettre l'adresse IP local.
    	    public static final String strURL = "http://192.168.XX.XX/test/android/sql/ville.php"; //Mon IP personelle	 
     
    	    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;
    	    }
    	}
    fichier ville.php (placé dans le serveur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    	  mysql_connect("localhost","root","");
    	  mysql_select_db("test");
    	  $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();
    	?>

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Argggh c'est quoi cette horeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
           //Ajout du StrictMode pour empecher les proclème lors de l'accès à la BDD
          StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
          StrictMode.setThreadPolicy(policy);
    Voici comment je l'interprête: je vais faire un truc vraiment interdit, tellement interdit que le système m'en empêche et se protège contre cela, mais c'est pas grâve je m'en fiche !


    Sinon, c'est la base des application 3-Tier

    CLIENT <= id user entrés par l'utilisateur => SERVEUR <= id bdd stocké uniquement côté serveur => BDD

    Maintenant comment le "user" est identifié c'est un problème de choix d'implémentation, par token, par SSO avec google-plus, quelque soit la méthode, c'est au serveur de vérifier cette authentification et d'accepter ou non la connexion.
    Ensuite le serveur a accès à la base de donnée, sans rapport avec les identifiants passés (sinon, c'est une grosse faille de sécurité).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 25
    Points : 26
    Points
    26
    Par défaut
    Merci pour cette réponse.

    Oups, apparemment le strictmode n'aurait pas sa place ici...
    Quelle est sont utilité ?

    En réalité, sans cette ligne j'ai l'erreur suivante :
    Error in http connection android.os.NetworkOnMainThreadException
    Error converting result java.lang.NullPointerException: lock == null
    Error parsing data org.json.JSONException: End of input at character 0 of
    Lorsque j'ai ajouté le strictmode, j'étais tellement content que ça marche que j'ai considéré que c'était bon mais il semble que non.
    Comment dois-je procéder du coup ?
    Parce que là je à chaque pas que je fais en avant, j'en fais 2 en arrière.

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Le système te dit:

    On est dans le thread UI, c'est à dire dans la partie qui doit être réactive et rapide si on veut que l'utilisateur soit content et revienne.
    Tu fais une opération réseau, qui par définition est une opération lente (ouverture de session, éventuellement connexion au provider, contact du serveur, traitement des données par le serveur, réception des données sur le téléphone)... c'est donc interdit de le faire dans le thread principal (c'est à dire dans les fonctions du framework: onCreate, onClick, ....).
    Il faut utiliser un thread à part... pour ce faire, le plus simple est de passer par les "AsyncTask".
    Deux fonctions à surcharger, et c'est fini !


    Ensuite je pense que le code de récupération HTTP n'est pas bon (en tous cas la partie gestion des erreurs).
    Il y a une exception à la connexion (NetworkOnMainThreadException), mais le programme doit continuer quand même et créer plein d'autres erreurs par la suite.
    Je pense aussi qu'il ne doit pas y avoir de Log.e(TAG,"Erreur ici",exception); mais des truc du genre: exception.printStrackTrace() ou pire: Log.e(TAG,"Erreur "+exception.toString());
    Gestion des Exceptions
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 25
    Points : 26
    Points
    26
    Par défaut
    Merci.

    J'ai réussi à placer les opérations lentes en Asynctask.
    Je vais me pencher sur la partie gestion d'erreurs.

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/05/2013, 19h26
  2. Impossible d'acceder à une BDD sur un serveur
    Par weberic82 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 22/11/2007, 15h37
  3. [MySQL] Connection à une bdd sur serveur distant
    Par papyphp dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/03/2006, 21h13
  4. Réponses: 5
    Dernier message: 03/02/2006, 13h47
  5. [RMAN] Connexion à une base sur un autre serveur
    Par alxkid dans le forum Oracle
    Réponses: 2
    Dernier message: 23/08/2004, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo