2017-07-28 1 views
0

Je suis en train de créer une connexion simple à mon application Android qui compare l'entrée de l'utilisateur à des données à partir d'une base de données suivant ces tutoriels:Impossible de se connecter à l'application Android base de données MySQL en utilisant WAMP comme serveur local

J'utilise WAMP en tant que serveur local juste pour tester si je peux faire la connexion. J'ai deux fichiers PHP appelés config.inc.php et login.inc.php placé dans le répertoire suivant: C: \ wamp64 \ www \ DUFT et ils ressemblent à ceci:

config .inc.php

<?php $servername = "localhost:80"; 
    $username = "root"; 
    $password = "root"; 
    $dbname = "duft"; 

    try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
catch(PDOException $e) 
{ 
    die("OOPs something went wrong"); 
} 

?> 

login.inc.php

<?php 

include 'config.inc.php'; 

// Check whether username or password is set from android 
if(isset($_POST['username']) && isset($_POST['password'])) 
{ 
     // Innitialize Variable 
     $result=''; 
     $username = $_POST['username']; 
     $password = $_POST['password']; 

     // Query database for row exist or not 
     $sql = 'SELECT * FROM tbl_login WHERE email = :username AND adgangskode = :password'; 
     $stmt = $conn->prepare($sql); 
     $stmt->bindParam(':username', $username, PDO::PARAM_STR); 
     $stmt->bindParam(':password', $password, PDO::PARAM_STR); 
     $stmt->execute(); 
     if($stmt->rowCount()) 
     { 
     $result="true";  
     } 
     elseif(!$stmt->rowCount()) 
     { 
      $result="false"; 
     } 

     // send result back to android 
     echo $result; 
}?> 

J'ai ma classe LoginActivity où j'utilise AsyncTask à ma ke la connexion à la base de données en arrière-plan. Dans la méthode onPostExecute(), j'essaie de démarrer une nouvelle activité si l'entrée de l'utilisateur correspond à ce qui se trouve dans la base de données. Mais je continue à obtenir cette erreur à partir des fichiers PHP:


Avertissement (!): PDO :: __ construct(): serveur MySQL a disparu dans C: \ wamp64 \ www \ DUFT \ login. inc.php sur la ligne Appelez la pile # TimeMemoryFunctionLocation10.0042244400 {main}() ... \ login.inc.php : 020.0043245592http: //www.php.net/PDO.construct 'target =' _ new '> __ construct ( ) ... \ login.inc.php : 10 (!) Avertissement: PDO :: __ construct(): Erreur lors de la lecture du paquet d'accueil. PID = 9636 dans C: \ wamp64 \ www \ DUFT \ login.inc.php en ligne Appel Stack # TimeMemoryFunctionLocation10.0042244400 {main}() ... \ login.inc.php : 020.0043245592http: « target = '_ //www.php.net/PDO.construct nouveau'> __ construct ( ) ... \ login.inc.php : 10OOPs quelque chose a mal tourné

C'est ce que mon logcat dit:

Logcat

classe Mon LoginActivity Java ressemble à ceci:

public class LoginActivity extends AppCompatActivity{ 

//NYT 
// CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds 

public static final int CONNECTION_TIMEOUT=2000000000; 
public static final int READ_TIMEOUT=2000000000; 
private EditText etEmail; 
private EditText etPassword; 
//NYT 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    //NYT 
    // Get Reference to variables 
    etEmail = (EditText) findViewById(R.id.eMail); 
    etPassword = (EditText) findViewById(R.id.password); 
    //NYT 


    TextView klikHer = (TextView) findViewById(R.id.klikHer); 
    klikHer.setPaintFlags(klikHer.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); 

    Button login = (Button) findViewById(R.id.signIn); 
    login.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //Intent intent = new Intent(LoginActivity.this, MenuScreen.class); 
      //startActivity(intent); 

      //NYT 
      // Get text from email and passord field 
      final String email = etEmail.getText().toString(); 
      final String password = etPassword.getText().toString(); 

      // Initialize AsyncLogin() class with email and password 
      new AsyncLogin().execute(email, password); 
      //NYT 
     } 
    }); 
} 


private class AsyncLogin extends AsyncTask<String, String, String> { 
    ProgressDialog pdLoading = new ProgressDialog(LoginActivity.this); 
    HttpURLConnection conn; 
    URL url = null; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     //this method will be running on UI thread 
     pdLoading.setMessage("\tLoading..."); 
     pdLoading.setCancelable(false); 
     pdLoading.show(); 

    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 

      // Enter URL address where your php file resides 
      url = new URL("http://192.168.87.100/DUFT/login.inc.php"); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return "exception"; 
     } 
     try { 
      // Setup HttpURLConnection class to send and receive data from php and mysql 
      conn = (HttpURLConnection) url.openConnection(); 
      //conn.setReadTimeout(READ_TIMEOUT); 
      //conn.setConnectTimeout(CONNECTION_TIMEOUT); 
      conn.setRequestMethod("POST"); 

      // setDoInput and setDoOutput method depict handling of both send and receive 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 

      // Append parameters to URL 
      Uri.Builder builder = new Uri.Builder() 
        .appendQueryParameter("username", params[0]) 
        .appendQueryParameter("password", params[1]); 
      String query = builder.build().getEncodedQuery(); 

      // Open connection for sending data 
      OutputStream os = conn.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8")); 
      writer.write(query); 
      writer.flush(); 
      writer.close(); 
      os.close(); 
      conn.connect(); 

     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
      return "exception"; 
     } 

     try { 

      int response_code = conn.getResponseCode(); 

      // Check if successful connection made 
      if (response_code == HttpURLConnection.HTTP_OK) { 

       // Read data sent from server 
       InputStream input = conn.getInputStream(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
       StringBuilder result = new StringBuilder(); 
       String line; 

       while ((line = reader.readLine()) != null) { 
        result.append(line); 
       } 

       // Pass data to onPostExecute method 
       return (result.toString()); 

      } else { 

       return ("unsuccessful"); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
      return "exception"; 
     } finally { 
      conn.disconnect(); 
     } 


    } 

    @Override 
    protected void onPostExecute(String result) { 

     //this method will be running on UI thread 

     pdLoading.dismiss(); 

     if (result.equalsIgnoreCase("true")) { 
      /* Here launching another activity when login successful. If you persist login state 
      use sharedPreferences of Android. and logout button to clear sharedPreferences. 
      */ 

      Intent intent = new Intent(LoginActivity.this, MenuScreen.class); 
      startActivity(intent); 
      LoginActivity.this.finish(); 

     } else if (result.equalsIgnoreCase("false")) { 

      // If username and password does not match display a error message 
      //Toast.makeText(LoginActivity.this, "Invalid email or password", Toast.LENGTH_LONG).Show(); 


     } else if (result.equalsIgnoreCase("exception") || result.equalsIgnoreCase("unsuccessful")) { 

      //Toast.makeText(LoginActivity.this, "OOPs! Something went wrong. Connection Problem.", Toast.LENGTH_LONG).Show(); 

     } 
    } 
}} 

J'ai suivi toutes les étapes des tutoriels, et je suis en mesure d'accéder au serveur local avec mon téléphone en entrant l'adresse IPv4 dans mon navigateur mobile. Cela doit signifier que je suis également capable d'accéder à une base de données sur ce serveur local, non?

+0

a autorisé les connexions à votre fichier de configuration httpd –

+0

essayez en supprimant le port hôte: 80 dans config.php .. – Omi

+0

@OussemaAroua pouvez-vous me dire plus spécifique comment autoriser les connexions? – Sumsar9000

Répondre

0

J'ai trouvé la solution! Le problème était dans cette ligne de code

php $servername = "localhost:80"; 

Ici, je définis le port pour Apache au lieu de MySQL qui est 3307.Donc, je l'ai juste changé pour le port de droite qui est 3307 :)

Merci pour l'aide!

+0

1) Laissez le numéro de port ': 3307' off et il prendra le jeu par défaut dans le php.ini 2) MySQL fonctionne normalement sur le port 3306 – RiggsFolly

+0

Port 3307 est utilisé dans WAMPServer 3.0.7 et supérieur pour MariaDB – RiggsFolly