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