Partage
  • Partager sur Facebook
  • Partager sur Twitter

Connexion impossible webservice PHP pour Android

Sujet résolu
    19 avril 2021 à 9:53:42

    Bonjour. Je sollicite votre aide car je dois terminer mon projet de fin d'études qui repose sur une application Android (enquête de satisfaction).

    L'application est terminée mais non fonctionnelle puisque lorsque je renseigne les identifiants issus du webservice PHP pour connecter à cette application en Android, cela me marque "veuillez vérifier vos identifiants".

    Or, lorsque la base de données semble connectée au serveur Xampp (sous Windows 10) mais ne relaie pas à mon app (construite avec Android Studio, en Java + XML).

    Pour résumer, la page de connexion MainActivity (avec email et mot de passe) doit renvoyer vers la page d'accueil (si identifiants corrects) et l'utilisateur peut remplir les questionnaires de satisfaction.

    Mais sans connexion, rien n'est fonctionnel.

    LA PAGE MainActivity.java

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private Button SeConnecter;
        private TextView YourEmail, YourPassword;
        private EditText MyEmail, MyPassword;
        private ImageView imgAlstom;
        private static Candidat candidatConnecte = null;
    
        public static void setCandidatConnecte (Candidat unCandidat)
        {
            candidatConnecte = unCandidat;
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            this.MyEmail = (EditText) findViewById(R.id.idMail);
            this.MyPassword = (EditText) findViewById(R.id.idPassword);
            this.YourEmail = (TextView) findViewById(R.id.textView13);
            this.YourPassword = (TextView) findViewById(R.id.textView16);
            this.imgAlstom = (ImageView) findViewById(R.id.idAlstomMain);
    
            // Construction du bouton suivant
            this.SeConnecter = (Button) findViewById(R.id.idSeConnecter);
            //rendre le bouton Se Connecter ecoutable
            this.SeConnecter.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
    
    
            if(v.getId() == R.id.idSeConnecter){
                // Si clic sur le bouton SeConnecter
                String mail = this.YourEmail.getText().toString();
                String password = this.YourPassword.getText().toString();
                // renvoi des données
    
                //instancier un candidat
                Candidat unCandidat = new Candidat(mail, password);
                //verification de la presence du candidat en base
                Connexion uneConnexion = new Connexion();
                //lancement de la tache asynchrone avec le candidat qui se connecte
                uneConnexion.execute(unCandidat);
    
                //verification de la connexion
                if (candidatConnecte == null )
                {
                    Toast.makeText(this, "Veuillez vérifier vos identifiants",
                            Toast.LENGTH_LONG).show();
                    // (Context context, CharSequence text, int duration)
                    this.YourEmail.setText("");
                    this.YourPassword.setText("");
                }else
                 {
                    Toast.makeText(this, "Bienvenue "+candidatConnecte.getNom(),
                            Toast.LENGTH_LONG).show();
    
                    Intent unIntent = new Intent(this, Menu.class);
                /* putExtra = récupérer les valeurs de la page MainActivity
                    alstom
                    pour les retrouver dans la page Menu
                */
                    unIntent.putExtra("idCandidat", candidatConnecte.getIdcandidat()+"");
                    unIntent.putExtra("nom", unCandidat.getNom());
                    unIntent.putExtra("prenom", unCandidat.getPrenom());
                    this.startActivity(unIntent);
                }
            }
        }
    }
    
    /*************** Tache asynchrone ********************/
    /* 3 parametres : entrée, progression, sortie
      elle recoit un candidat (email et mdp) et renvoie
     * un candidat avec tous les données s'il est présent
     * sinon renvoie null.
     */
    
    class Connexion extends AsyncTask<Candidat,Void, Candidat>
    {
        //tache de fond: executée en arrière-plan.
        @Override
        protected Candidat doInBackground(Candidat... candidats) {
            Candidat candidatBDD = null;
            Candidat candidatTest = candidats[0]; //premier parametre(NOM/PRENOM)
            String url = "http://localhost/Cfa_Insta/mysurveyalstom/verifConnexion.php";
            String resultatJson ="";
            //construction de l'URL
            url += "?nom="+candidatTest.getNom()+"&prenom="+candidatTest.getPrenom();
            try{
                //instanciation la classe URL pour la page php webservice
                URL uneUrl = new URL(url);
                //ouverture du client HTTP
                HttpURLConnection uneConnexion = (HttpURLConnection) uneUrl.openConnection();
                //parametrage de la connexion
                uneConnexion.setRequestMethod("GET");
                uneConnexion.setDoInput(true);
                uneConnexion.setDoOutput(true);
                //on fixe le temps d'attente
                uneConnexion.setConnectTimeout(20000);
                // 2 secondes
                uneConnexion.setReadTimeout(15000);
                // 1,5 seconde
                //etablissement de la connexion
                uneConnexion.connect();
    
                //lecture des donnees JSON Résultats à partir de la page PHP
                InputStreamReader isr = new InputStreamReader(uneConnexion.getInputStream(), "UTF-8");
                //la lecture de la page se fait dans un buffer : memoire tompon
                BufferedReader br = new BufferedReader(isr);
                //instanciation d'une chaine de caractères dynamique
                StringBuilder sb = new StringBuilder();
                String ligne ="";
                //lecture des chaines contenues dans la page
                while ((ligne = br.readLine())!=null)
                {
                    sb.append(ligne);
                }
                resultatJson = sb.toString(); //resultat des chaines lues
                isr.close();
                br.close();
                Log.e("JSON : ", resultatJson);
            }
            catch(Exception exp){
                Log.e("Erreur : ", "Erreur de connexion à url :"+url);
                exp.printStackTrace();
            }
    
            //extraire le contenu JSON en un candidat
            try{
                JSONArray tabJson = new JSONArray(resultatJson);
                //un seul resultat JSON: personne connectee
                JSONObject unObjet = tabJson.getJSONObject(0);
                candidatBDD = new Candidat (
                        unObjet.getInt("idcandidat"),
                        unObjet.getString("nom"), unObjet.getString("prenom"),
                        unObjet.getString("metier"),
                        candidatTest.getMail(), candidatTest.getPassword(),
                        unObjet.getString("lieu"), unObjet.getString("anciennete"),
                        unObjet.getString("lesReponses")
                );
                Log.e("Candidat: ", candidatBDD.toString());
            }
            catch(JSONException exp){
                Log.e("Erreur Json : ", "Impossible de parser le json");
            }
    
    
            return candidatBDD;
        }
    
        @Override
        protected void onPostExecute(Candidat candidat) {
            /*
            le resultat de la tache asynchrone : candidatBDD va valoriser
            le candidat connecte de la classe MainActivity
             */
            MainActivity.setCandidatConnecte(candidat);
        }
    }

    ET LA PAGE verifConnexion.php

    <?php
    	require_once("modele.class.php"); 
    	
    	$unModele = new Modele (); 
    
    	if (isset($_REQUEST['email']) && isset($_REQUEST['mdp']))
    	{
    		$unResultat = $unModele->verifConnexion($_REQUEST['email'],$_REQUEST['mdp']);
    		
    		$ligne ['email'] = $unResultat['email'];  
    		$ligne ['mdp'] = $unResultat['mdp']; 
    		
    		$tab[]  = $ligne; 
    
    		print(json_encode($tab));
    
    	}
    	else {
    		print("[]");
    	}
    	
    ?>



    Merci par avance pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      21 avril 2021 à 9:27:28

      Bonjour.

      N'y a-t-il personne pour m'aider à résoudre ce problème et que mon travail de fin d'études aboutisse ?
      • Partager sur Facebook
      • Partager sur Twitter
        25 avril 2021 à 22:58:57

        Toujours personne de disponible pour m'aider ??
        • Partager sur Facebook
        • Partager sur Twitter
          26 avril 2021 à 14:58:05

          Salut,

          Je vais peut être poser une question conne, mais ton webservice php est hébergé où ? En fait par cette question, je veux être sur qu'elle n'est pas en local sur ton pc.

          • Partager sur Facebook
          • Partager sur Twitter
            26 avril 2021 à 22:35:58

            MaximeG31 a écrit:

            Salut,

            Je vais peut être poser une question conne, mais ton webservice php est hébergé où ? En fait par cette question, je veux être sur qu'elle n'est pas en local sur ton pc.


            Salut, il n'est pas hébergé puisqu'il doit me permettre de lier la base de données à mon application, ce qui était le cas auparavant puisque je pouvais me connecter sans problème.

            Elle est en local, c'est un problème ?

            • Partager sur Facebook
            • Partager sur Twitter
              27 avril 2021 à 9:06:34

              Je croyais qu'il n'était pas possible d'accéder a un localhost depuis l'extérieur, sauf si on passe directement l'ip de la machine + les ports ouvert ou un truc dans ce style là.

              Ca a déjà fonctionné ?

              • Partager sur Facebook
              • Partager sur Twitter
                27 avril 2021 à 10:38:02

                Oui, ça fonctionnait et je ne sais pas pourquoi je ne plus y accéder.

                MaximeG31 a écrit:

                Je croyais qu'il n'était pas possible d'accéder a un localhost depuis l'extérieur, sauf si on passe directement l'ip de la machine + les ports ouvert ou un truc dans ce style là.

                Ca a déjà fonctionné ?



                • Partager sur Facebook
                • Partager sur Twitter
                  27 avril 2021 à 10:56:36

                  ah ok, alors j'ai aucune idée, désolé
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 avril 2021 à 18:04:36

                    Tant pis ... Personne d'autre ?!
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Connexion impossible webservice PHP pour Android

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown