2017-03-09 37 views
0

嗨,我正在android工作室上建立一個應用程序,需要註冊和登錄, 我的註冊工作正常,而我有麻煩與我的登錄,我得到虛假布爾,而不是真正的如果用戶名和密碼是否正確, 這裏我的PHP文件:登錄無法正常工作androip應用程序

`$con = mysqli_connect("localhost", "id1013905_trhtkv", "my password",` "id1013905_user"); 


    $username = $_POST["username"]; 
    $password = $_POST["password"]; 

    $statement = mysqli_prepare($con, "SELECT * FROM user WHERE username = ?"); 
    mysqli_stmt_bind_param($statement, "s", $username); 
    mysqli_stmt_execute($statement); 
    mysqli_stmt_store_result($statement); 
    mysqli_stmt_bind_result($statement, $colUserID, $colName, $colUsername, $colAge, $colPassword); 

    $response = array(); 
    $response["success"] = false; 

    while(mysqli_stmt_fetch($statement)){ 
     if (password_verify($password, $colPassword)) { 
      $response["success"] = true; 
      $response["name"] = $colName; 
      $response["age"] = $colAge; 
     } 
    } 
    echo json_encode($response); 
    ?> 

我的登錄活動:

package com.ben.owner.say_something; 

import android.app.AlertDialog; 
import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONException; 
import org.json.JSONObject; 

public class LoginActivity extends AppCompatActivity { 

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

     final EditText etUsername = (EditText)findViewById(R.id.etUsername); 
     final EditText etPassword = (EditText)findViewById(R.id.etPassword); 
     final Button bLogin = (Button)findViewById(R.id.bLogin); 
     final TextView registerLink = (TextView)findViewById(R.id.tvRegisterHere); 

     registerLink.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class); 
       LoginActivity.this.startActivity(registerIntent); 
      } 
     }); 

     bLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final String username = etUsername.getText().toString(); 
       final String password = etPassword.getText().toString(); 
       final Response.Listener<String>responseListener = new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         try { 
          JSONObject jsonResponse = new JSONObject(response); 
          boolean success = jsonResponse.getBoolean("success"); 
          if (success){ 
           String name = jsonResponse.getString("name"); 
           int age = jsonResponse.getInt("age"); 
           Intent intent = new Intent(LoginActivity.this, UserAreaActivity.class); 
           intent.putExtra("name",name); 
           intent.putExtra("username",username); 
           intent.putExtra("age",age); 
           LoginActivity.this.startActivity(intent); 

          }else{ 
           AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this); 
           builder.setMessage("Login Failed") 
             .setNegativeButton("Retry", null) 
             .create() 
             .show(); 

          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       }; 
       LoginRequest loginRequest = new LoginRequest(username,password,responseListener); 
       RequestQueue queue = Volley.newRequestQueue(LoginActivity.this); 
       queue.add(loginRequest); 

      } 
     }); 

    } 
} 

我的登錄請求:

package com.ben.owner.say_something; 

import com.android.volley.Request; 
import com.android.volley.Response; 
import com.android.volley.toolbox.StringRequest; 

import java.util.HashMap; 
import java.util.Map; 

/** 
* Created by owner on 09/03/2017. 
*/ 
public class LoginRequest extends StringRequest { 
    private static final String LOGIN_REQUEST_URL = "https://saysomething.000webhostapp.com/Login.php"; 
    private Map<String, String> params; 

    public LoginRequest(String username,String password, Response.Listener<String> listener){ 
     super(Request.Method.POST, LOGIN_REQUEST_URL, listener, null); 
     params = new HashMap<>(); 
     params.put("username", username); 
     params.put("password", password); 

    } 

    @Override 
    public Map<String, String> getParams() { 
     return params; 
    } 
} 
+0

password_verify - 驗證密碼的哈希相匹配。請比較它們的值 –

+0

@SandeepKharat密碼匹配 –

+0

它失敗了嗎? – Vyacheslav

回答

0

要找到你的錯誤,我只是建議檢索響應中的服務器值。

我的意思是

,而不是

$response = array(); 
$response["success"] = false; 

while(mysqli_stmt_fetch($statement)){ 
    if (password_verify($password, $colPassword)) { 
     $response["success"] = true; 
     $response["name"] = $colName; 
     $response["age"] = $colAge; 
    } 
} 
echo json_encode($response); 

使用

$response = array(); 
    $response["success"] = false; 
echo $statement;//or something like 
    while(mysqli_stmt_fetch($statement)){ 

     if (password_verify($password, $colPassword)) { 

echo $password; 
echo $colPassword; 
      $response["success"] = true; 
      $response["name"] = $colName; 
      $response["age"] = $colAge; 
     } 
    } 
    echo json_encode($response); 

或調試服務器端。看來你的服務器代碼是錯誤的。

檢查這個例子

http://php.net/manual/en/mysqli-stmt.fetch.php

+0

即時回覆即時通訊: '{「success」:false} ,所以我想即時通訊不會因爲某些原因進入if語句 –