【问题标题】:Two identical strings return false while one string received from a PHP response两个相同的字符串返回 false 而从 PHP 响应接收到一个字符串
【发布时间】:2013-09-01 12:29:50
【问题描述】:

我遇到了一个奇怪的问题,当我收到来自 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";

        }
     }   
?>

我阅读了很多建议并尝试更改许多内容但无法成功。无论如何,我认为由不匹配的字符串编码类型引起的问题,但不知道如何解决它。

【问题讨论】:

  • PSA: mysql_* 函数是 deprecated in PHP 5.5。不建议编写新代码,因为它会阻止您将来升级。相反,请使用 MySQLiPDObe a better PHP Developer
  • 您好。我已经修复了您帖子中的代码格式和大小写错误。如您所知,Stack Overflow 往往被专门而非视为聊天室或论坛。这里的帖子是为了后代,因此读者倾向于欣赏正确使用大写字母和标点符号。它不一定是完美的,但有时会鼓励人们回答:)
  • 您确定文件的结尾/开头没有换行符/空格吗?您可以删除它或尝试response = response.trim();
  • 对不起。这是我第一次发布问题。我会检查使用 MySQLi 的选项。
  • 有换行符,但即使我用子字符串函数取出它,语句也返回 false。

标签: java php android mysql login


【解决方案1】:

你试过compareTo()吗?

编辑:

如果 php 代码返回一个 int,那将是一个更好的解决方案。例如:如果找到用户,则返回 1,否则返回 0。 然后在 login() 函数中为每个返回的数字显示消息。比较整数比比较字符串更容易。

【讨论】:

  • 我尝试使用 compareto ("User Found".compareTo(response)==0) 并返回 false。
  • 如果php代码返回一个int会更好。例如:如果找到用户,则返回 1,否则返回 0。然后在 login() 函数中为每个返回的数字显示消息。
  • 我修复了它:String TempString=new String(response.substring(2,12).toString()); if("用户找到".equals(TempString)) {...}
【解决方案2】:

这段代码 sn-p 对我有用:

String TempString = new String(response.substring(2,12).toString());

if("User Found".equals(TempString)) {
    // other actions here
} 

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 2016-05-15
    • 1970-01-01
    • 2012-10-15
    • 2016-04-17
    • 2011-11-14
    • 2013-04-18
    • 2019-10-06
    • 1970-01-01
    相关资源
    最近更新 更多