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