2016-08-25 4 views
-3

Ich kann keine Daten auf meinem Server eingeben Ich benutze WAMPP Server und jedes Mal, wenn ich mein Projekt laufen und Daten eingeben, bekomme ich immer Folgendes Fehler server connection failed.android studio - Anmeldung registrieren mit PHP mysql (Serververbindung fehlgeschlagen)

Kann mir bitte jemand helfen, dieses Problem zu lösen?

Unten ist mein Code:

public class MainActivity extends ActionBarActivity { 

protected EditText username; 
private EditText password; 
protected String enteredUsername; 
private final String serverUrl = "url server"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    username = (EditText)findViewById(R.id.username_field); 
    password = (EditText)findViewById(R.id.password_field); 
    Button loginButton = (Button)findViewById(R.id.login); 
    Button registerButton = (Button)findViewById(R.id.register_button); 

    loginButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      enteredUsername = username.getText().toString(); 
      String enteredPassword = password.getText().toString(); 

      if(enteredUsername.equals("") || enteredPassword.equals("")){ 
       Toast.makeText(MainActivity.this, "Username or password must be filled", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      if(enteredUsername.length() <= 1 || enteredPassword.length() <= 1){ 
       Toast.makeText(MainActivity.this, "Username or password length must be greater than one", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      // request authentication with remote server4 
      AsyncDataClass asyncRequestObject = new AsyncDataClass(); 
      asyncRequestObject.execute(serverUrl, enteredUsername, enteredPassword); 
     } 
    }); 

    registerButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainActivity.this, RegisterActivity.class); 
      startActivity(intent); 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

private class AsyncDataClass extends AsyncTask<String, Void, String> { 

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

     HttpParams httpParameters = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParameters, 5000); 
     HttpConnectionParams.setSoTimeout(httpParameters, 5000); 

     HttpClient httpClient = new DefaultHttpClient(httpParameters); 
     HttpPost httpPost = new HttpPost(params[0]); 

     String jsonResult = ""; 
     try { 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
      nameValuePairs.add(new BasicNameValuePair("username", params[1])); 
      nameValuePairs.add(new BasicNameValuePair("password", params[2])); 
      httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpClient.execute(httpPost); 
      jsonResult = inputStreamToString(response.getEntity().getContent()).toString(); 

     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return jsonResult; 
    } 

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

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     System.out.println("Resulted Value: " + result); 
     if(result.equals("") || result == null){ 
      Toast.makeText(MainActivity.this, "Server connection failed", Toast.LENGTH_LONG).show(); 
      return; 
     } 
     int jsonResult = returnParsedJsonObject(result); 
     if(jsonResult == 0){ 
      Toast.makeText(MainActivity.this, "Invalid username or password", Toast.LENGTH_LONG).show(); 
      return; 
     } 
     if(jsonResult == 1){ 
      Intent intent = new Intent(MainActivity.this, LoginActivity.class); 
      intent.putExtra("USERNAME", enteredUsername); 
      intent.putExtra("MESSAGE", "You have been successfully login"); 
      startActivity(intent); 
     } 
    } 
    private StringBuilder inputStreamToString(InputStream is) { 
     String rLine = ""; 
     StringBuilder answer = new StringBuilder(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
     try { 
      while ((rLine = br.readLine()) != null) { 
       answer.append(rLine); 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return answer; 
    } 
} 
private int returnParsedJsonObject(String result){ 

    JSONObject resultObject = null; 
    int returnedResult = 0; 
    try { 
     resultObject = new JSONObject(result); 
     returnedResult = resultObject.getInt("success"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return returnedResult; 
} 
} 

user.php

<?php 

include_once 'db.php'; 

class User{ 

    private $db; 
    private $db_table = "users"; 

    public function __construct(){ 
     $this->db = new DbConnect(); 
    } 

    public function isLoginExist($username, $password){  

     $query = "select * from " . $this->db_table . " where username = '$username' AND password = '$password' Limit 1"; 
     $result = mysqli_query($this->db->getDb(), $query); 
     if(mysqli_num_rows($result) > 0){ 
      mysqli_close($this->db->getDb()); 
      return true; 
     }  
     mysqli_close($this->db->getDb()); 
     return false;  
    } 

    public function createNewRegisterUser($username, $password, $email){ 

     $query = "insert into users (username, password, email, created_at, updated_at) values ('$username', '$password', '$email', NOW(), NOW())"; 
     $inserted = mysqli_query($this->db->getDb(), $query); 
     if($inserted == 1){ 
      $json['success'] = 1;         
     }else{ 
      $json['success'] = 0; 
     } 
     mysqli_close($this->db->getDb()); 
     return $json; 
    } 

    public function loginUsers($username, $password){ 

     $json = array(); 
     $canUserLogin = $this->isLoginExist($username, $password); 
     if($canUserLogin){ 
      $json['success'] = 1; 
     }else{ 
      $json['success'] = 0; 
     } 
     return $json; 
    } 

} 
?> 

index.php

<?php 

require_once 'androidlogin/user.php'; 

$username = ""; 
$password = ""; 
$email = ""; 
echo "hello"; 
if(isset($_POST['username'])){ 
    $username = $_POST['username']; 
} 
if(isset($_POST['password'])){ 
    $password = $_POST['password']; 
} 
if(isset($_POST['email'])){ 
    $email = $_POST['email']; 
} 

// Instance of a User class 
$userObject = new User(); 

// Registration of new user 
if(!empty($username) && !empty($password) && !empty($email)){ 
    $hashed_password = md5($password); 
    $json_registration = $userObject->createNewRegisterUser($username, $hashed_password, $email); 

    echo json_encode($json_registration); 
} 

// User Login 
if(!empty($username) && !empty($password) && empty($email)){ 
    $hashed_password = md5($password); 
    $json_array = $userObject->loginUsers($username, $hashed_password); 

    echo json_encode($json_array); 
} 

?> 

db.php

<?php 
include_once 'config.php'; 

class DbConnect{ 


    private $connect; 


    public function __construct(){ 

     $this->connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

     if (mysqli_connect_errno($this->connect)) 
     { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
     } 
    } 

    public function getDb(){ 

     return $this->connect; 
    } 

} 

Antwort

0

Das ist ganz einfach. Sie können den WAMP-Server nicht verwenden, da die PHP-Dateien nicht im Web verfügbar sind. In einem einfacheren Sinne sind die von Ihnen codierten PHP-Dateien nur auf Ihrem PC/Laptop verfügbar und für die mobile Anwendung nicht zugänglich. Sie können möglicherweise eine Verbindung herstellen, wenn Sie mit einem Emulator debuggen. Wenn Sie Ihre App jedoch auf einem tatsächlichen Gerät installieren, besteht keine Verbindung zum Server.

Ich empfehle Ihnen, wählen Sie eine der folgenden Online-Hosting-Dienste und laden Sie Ihre Dateien und Datenbank (die Sie in WAMP erstellt). Sie müssen die IP-Adresse, zu der Sie eine Verbindung herstellen, natürlich von dem oben angegebenen Code aus ändern. Dadurch können Sie eine Verbindung zum Server herstellen und sich erfolgreich anmelden. Es gibt einige kostenlose Hosting-Dienste, von denen die meisten eine 99% ige Verfügbarkeit haben. Sie haben also keine Probleme mit der Konnektivität. Solche Hosting-Dienste werden von awardspace, freewebhostingeu oder 000webhost angeboten. Irgendwelche von diesen helfen Ihnen, die Arbeit zu erledigen.

Alternativ können Sie Ihre PHP-Dateien im Internet verfügbar machen, sodass sie von Ihrem Gerät aus zugänglich sind. Wenn IIS installiert ist, können Sie den Inhalt Ihrer Website in den Ordner C:\inetpub\www kopieren. Dies würde Ihre Website jedem zugänglich machen (im Internet verfügbar machen), der die URL kennt. Sie können auch this tutorial verwenden, um Ihnen zu helfen. Diese Option ist zwar etwas fortgeschrittener, aber Sie erhalten eine Vorstellung davon, wie Websites veröffentlicht werden, wenn Sie für die Herausforderung bereit sind.

Ich habe auch ein Problem in Ihrem Code gefunden, wenn Sie die Antwort über PHP zurückgeben. Ihr Code gibt eine org.json.JSONException zurück. Dies liegt daran, dass der vom PHP-Skript zurückgegebene Wert nicht im gültigen JSON-Format vorliegt. (Es gibt einfach hallo) daher in der index.php-Datei ändern, um die Registrierung eines neuen Benutzercode auf diese Weise:

if(!empty($username) && !empty($password) && !empty($email)){ 
    $hashed_password = md5($password); 
    $json_registration = $userObject->createNewRegisterUser($username, $hashed_password, $email); 
    if ($json_registration) { 

      $response["error"] = FALSE; 
      $response["user"]["name"] = $json_registration["username"]; 
      $response["user"]["email"] = $json_registration["email"]; 

      echo json_encode($response); 
     } else { 

      $response["error"] = TRUE; 
      $response["error_msg"] = "Unknown error occurred in registration!"; 
      echo json_encode($response); 
     } 
} 

Dies gibt die aktuellen Daten aus der Datenbank der App zurück.

Sie müssen das gleiche mit dem Login-Skript zu tun:

if(!empty($username) && !empty($password) && empty($email)){ 
    $hashed_password = md5($password); 
    $json_login = $userObject->loginUsers($username, $hashed_password); 

    if ($json_login) { 
     $response["error"] = FALSE; 
     $response["uid"] = $user["unique_id"]; 
     $response["user"]["name"] = $json_login["Username"]; 
     $response["user"]["email"] = $json_login["email"]; 
     echo json_encode($response); 
    } else { 
     $response["error"] = TRUE; 
     $response["error_msg"] = "Login credentials are wrong. Please try again!"; 
     echo json_encode($response); 
    } 

} 

Ich kann auch ein paar Änderungen an dem Code-Stil, empfehlen ein sauberere Projekt zu machen.

  • einen anderen Dateinamen als index.php verwenden, einfach weil diese die Zielseite der Seiten Standard ist. Ich würde es lieber umbenennen in Register.php zum Beispiel.
  • Entfernen Sie den Code zur Anmeldung aus der index.php Datei und fügen Sie ihn zu einer separaten Datei namens Login.php hinzu. Vergessen Sie nicht, dass Sie die Verbindungszeichenfolge und die Klasse User.php auch in diesem Skript aufrufen müssen, um sicherzustellen, dass mit der richtigen Datenbank verbunden ist.

this helps :)

+0

Dank für meine Frage Sir beantworten, ich Ihren Vorschlag versuchen :) – indodev28

+0

i Hosting hochgeladen haben, und das Problem nun jedes i registrieren zeigen immer Benutzername oder Passwort ungültig oder E-Mail . Bitte helfen Sie mir sir :( – indodev28

+0

Können Sie bitte Ihren Code für PHP hier bitte? –

Verwandte Themen