2017-03-19 3 views
0

私が行っているサンプルアプリケーション用の簡単なログインと登録ページを作成しようとしました。私はVolleyライブラリを使ってデータベースに対する要求と応答を処理し、私はファイルとDBをホストするために000webhost.comを使いました。データベースに接続中にPHPからのJSONレスポンスがありません

マイLoginActivityは、

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final EditText uname =(EditText)findViewById(R.id.ed1); 
    final EditText pword =(EditText)findViewById(R.id.ed2); 
    Button Login=(Button)findViewById(R.id.b1); 
    TextView register=(TextView)findViewById(R.id.regv); 


    register.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent i= new Intent(MainActivity.this,RegisterActivity.class); 
      startActivity(i); 
     } 
    }); 


    Login.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String username = uname.getText().toString(); 
      final String password = pword.getText().toString(); 

      // Response received from the server 
      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("username"); 

          Intent intent = new Intent(MainActivity.this, Maps.class); 
          //intent.putExtra("username", username); 
          MainActivity.this.startActivity(intent); 
         } else { 
          AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.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(MainActivity.this); 
      queue.add(loginRequest); 
     } 
    }); 


} 

}

とLoginRequest活性は、

public class LoginRequest extends StringRequest { 
private static final String LOGIN_REQUEST_URL = "my_host/loginfile"; 
private Map<String, String> params; 

public LoginRequest(String username, String password, Response.Listener<String> listener) { 
    super(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; 
} 

}

とlogin.phpファイル、

であります

?>

私はアプリケーションを実行しようとし、ログイン要求を試みるときに、反対側からの応答もエラーもありません。データベーステーブルにレコードを追加しようとしましたが、ログインして検証しようとしましたが、まだ応答はありません。私はPHPに堪能ではないとアドバイスしてください。

答えて

0

まず、print_r($statement)を試して、データベースが最初にデータを返すかどうかを確認します。私が考えているのは、*のレコードのすべての列を呼び出す用意ができている文ですが、mysqli_stmt_bind_resultでは3つの変数にのみ結果がバインドされていますが、それよりも多くの変数が戻ってくる可能性があります。私はこれに似た何かを試みるでしょう:

 $statement = mysqli_prepare($con, "SELECT username, email, password FROM user WHERE username = ? AND password = ? LIMIT 1"); 
    //Change username, email, password to whatever the equivalent are in the database if they are different. 
The Limit 1 also limits you to only 1 record that matches that criteria, which should be the case anyway, but prevents it from running through the whole database. 
     mysqli_stmt_bind_param($statement, "ss", $username, $password); 
     mysqli_stmt_execute($statement); 

     mysqli_stmt_store_result($statement); 
     mysqli_stmt_bind_result($statement, $username,$email, $password); 

P.S.私はなぜあなたがパスワードを返す必要があるのか​​わからない、あるいはあなたのデータベースをテストしているだけで、これが実稼働のコードになるのであれば、ユーザーのパスワードを返さず、特にユーザーのプレーンテキストパスワードをデータベースに保存し、ユーザーのパスワードをハッシュ化してソルトする方法を学び、代わりにそのパスワードを保存します。ちょっと特別なフレンドリーなアドバイス。

+0

アドバイスをいただきありがとうございます。私は、パスワードと重要なものを保管する前に塩をかけることを学びます。また、問題を分類し、正しくバインド変数を変更し、接続URLを 'http'に変更して動作させる必要がありました、まだ 'https'がうまくいかなかった理由はまだわかりません。 –

0

DBサーバーに接続していないようです。 mysqli_connect()への呼び出しを2回確認する必要があります。

$con = mysqli_connect("host", "user", "pwd", "db"); 

"host"、 "user"、 "pwd"、 "db"の文字列を実際のデータベース接続値に置き換えてください。上記のように動作しません。

ここでは、mysqli_connect()関数で変数を使用する方法について説明します。

$dbHost = "host"; 
$dbUser = "username"; 
$dbPass = "password"; 
$dbName = "database"; 
$con = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName); 

引用符の値をデータベース接続値に置き換えます。

+0

返信ありがとう私は正しい資格情報を使用しましたが、これは問題ではありませんでした。 –

関連する問題