我正在尝试为Android(在Eclipse中)编写登录系统,并且必须从外部MySQL-DB获取数据。
来源 我为它获取了代码:连接到 MySQL 数据库
我尝试从中获取数据的网站在这里。(我知道有一些安全问题,blabla,这不是我现在的问题^^)
我遇到的问题是,当我尝试运行应用程序时,出现错误"找不到密码"。此错误在此代码中捕获:
ArrayList<String> passwort = new ArrayList<String>();
ArrayList<String> benutzer = new ArrayList<String>();
try{
jArray = new JSONArray(result);
JSONObject json_data=null;
for(int i=0;i<jArray.length();i++){
json_data = jArray.getJSONObject(i);
passwort.add(json_data.getString("pw"));
benutzer.add(json_data.getString("benutzer"));
}
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("arrayBenutzerExtra", benutzer);
intent.putExtra("arrayPasswortExtra", passwort);
startActivity(intent);
}
catch(JSONException e1){
Toast.makeText(getBaseContext(), "No Password found" ,Toast.LENGTH_LONG).show();
} catch (ParseException e1) {
e1.printStackTrace();
}
另外,这是我与网站连接的代码,但这似乎不是问题,尽管我没有收到有关此的错误消息!
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://winklermarkus.at/appconnection.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection"+e.toString());
}
.php文件的代码在这里:
$sql_pw = "SELECT ". "Passwort ". "FROM ". "benutzerdaten ";
$result_pw = mysql_query ($sql_pw);
$data_pw = mysql_fetch_array ($result_pw);
$pw = $data_pw["Passwort"];
$sql_benutzer = "SELECT ". "Email ". "FROM ". "benutzerdaten ";
$result_benutzer = mysql_query ($sql_benutzer);
$data_benutzer = mysql_fetch_array ($result_benutzer);
$benutzer = $data_benutzer["Email"];
print(json_encode($pw));
print(json_encode($benutzer));
mysql_close();
?>
正如 Perception 提到的,我没有得到有效的 JSON 输出,这可能与我试图一次传输 2 个字符串有关吗?
你的PHP代码没有做你认为它正在做的事情。我不能建议修复它,因为您已经创建了一个重大的安全漏洞。
作为替代策略,不是将所有密码和所有电子邮件发送到客户端(以不关联的方式),而是将客户端散列的密码和电子邮件发送到服务(通过SSL)。然后在服务端查询数据库中是否有电子邮件/传递的组合。如果返回登录成功,否则返回登录失败。