-1

PHP ページから応答を受け取り、それを Java の文字列変数に格納し、入力した文字列と比較しようとすると、何らかの理由で false が返されるという奇妙な問題が発生しました。

ユーザーの詳細がMySQLに保存されているかどうかを単純に検証するログインクラスを作成しようとしています。

このif("User Found".equals(response))ステートメントは、応答に同じ内容が含まれていても false を返します。

Java と PHP のコードは次のとおりです。

void login(){
    try{            

        httpclient=new DefaultHttpClient();
        httppost= new HttpPost("http://192.200.10.100:8080/login.php"); // make sure the url is correct.
        //add your data
        nameValuePairs = new ArrayList<NameValuePair>(2);
        // Always use the same variable name for posting i.e the android side variable name and php side variable name should be similar, 
        nameValuePairs.add(new BasicNameValuePair("Name",loginInputs[0]));  // $Edittext_value = $_POST['Edittext_value'];
        nameValuePairs.add(new BasicNameValuePair("Password",loginInputs[1])); 
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        //Execute HTTP Post Request
        httpresponse=httpclient.execute(httppost);
        // edited by James from coderzheaven.. from here....
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        response = httpclient.execute(httppost, responseHandler);
        System.out.println("Response : " + response); 
        runOnUiThread(new Runnable() {
            public void run() {
                tv.setText("Response from PHP : " + response);
                dialog.dismiss();

            }
        });


        if("User Found".equals(response)){
            runOnUiThread(new Runnable() {
                public void run() {
                    Toast.makeText(login.this,"Login Success", Toast.LENGTH_SHORT).show();
                }
            });

            startActivity(new Intent(login.this, MainActivity.class));
        }else{
            showAlert();                
        }

    }catch(Exception e){
        dialog.dismiss();
        System.out.println("Exception : " + e.getMessage());
    }
}
public void showAlert(){
    login.this.runOnUiThread(new Runnable() {
        public void run() {
            AlertDialog.Builder builder = new AlertDialog.Builder(login.this);
            builder.setTitle("Login Error.");
            builder.setMessage("User not Found.")  
                   .setCancelable(false)
                   .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                       }
                   });                     
            AlertDialog alert = builder.create();
            alert.show();               
        }
    });
}

PHP コード:

<?php


  if (isset($_POST['Name']) && isset($_POST['Password'])) {

    $name = $_POST['Name'];
    $Password = $_POST['Password'];
     // include db connect class
    require_once __DIR__ . '/connect.php';
    // connecting to db
    $db = new DB_CONNECT();

    $result = mysql_query("SELECT * FROM `userinfo` WHERE Name='$name' AND Password='$Password'");
    if (mysql_num_rows($result)>0) 
          {
           echo "User Found";

          }
   else {

        echo "Not Found";

        }
     }   
?>

多くの提案を読み、多くのことを変更しようとしましたが、成功しませんでした。とにかく、文字列のエンコードされた型が一致しないことが原因だと思いますが、修正方法がわかりません。

4

2 に答える 2

0

で試しましたcompareTo()か?

編集:

PHP コードが int を返す場合は、より良い解決策になります。例: ユーザーが見つかった場合は 1 を返し、それ以外の場合は 0 を返します。次に、返された各桁の login() 関数でメッセージを表示します。文字列よりも整数を比較する方が簡単です。

于 2013-09-01T12:33:39.687 に答える