0

我有一个 android 应用程序,它将 JSON 信息发送到 web 服务以验证信息。我使用 Kate 作为网络服务的编辑器。JSON 和 php webservices 的概念对我来说是新的。我通常用java编写代码。

    JSONObject jsonObject = new JSONObject();

    String userID = "";

    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(loginURI);
    HttpParams httpParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
    HttpConnectionParams.setSoTimeout(httpParams,10000);

    try {

        jsonObject.put("username", username);
        Log.i("username", jsonObject.toString());
        jsonObject.put("password", password);
        Log.i("password", jsonObject.toString());

        StringEntity stringEntity = new StringEntity(jsonObject.toString());
        stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        httpPost.setEntity(stringEntity);
        HttpResponse httpResponse = httpClient.execute(httpPost);

        HttpEntity entity = httpResponse.getEntity();

        if (entity != null) {
            userID = EntityUtils.toString(httpResponse.getEntity());
            Log.i("Read from server", userID);
         }


    }catch (IOException e){
        Log.e("Login_Issue", e.toString());
    }catch (JSONException e) {
        e.printStackTrace();  
    }


    return userID;
}

我在网上找到了 StringEntity 代码,并认为它会起作用。我不明白 HttpPost 的 StringEntity 的用途。

这是我用 php 编写的 web 服务。

include('dbconnect.php'); 

$tablename = 'users';

//username and password sent from android
$username=$_POST['myusername'];
$password=$_POST['mypassword'];

//protecting mysql injection
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

#$array = array($username,$password);
$sql = "SELECT first_name FROM $tablename WHERE u_username='$username' AND    u_password=MD5('$password')"; 
//Querying the database
$result=mysql_query($sql);

if(!$result){
   die(mysql_error();
}


//If found, number of rows must be 1
if((mysql_num_rows($result))==1){

//creating session
session_register("$username");
session_register("$password");

print true;
}else{
print false;
}

mysql_close();

我不太确定“用户名”和“密码”是否从 android 应用程序正确发送到 web 服务。我怎样才能验证这一点?Web 服务和 Java 代码是否编写得很好,可以以 JSON 格式发送信息?

当我在浏览器上访问网络服务时,出现以下错误: Parse error: parse error in E:\wamp\www\mobile.dcl.mu\webserver\login.php on line 24

先感谢您。

4

1 回答 1

0

你试图咬掉太多。它应该是 6 个不同的问题(或者只是花钱请人为你编写脚本,或者花一些时间单独学习这些技术)。首先要解决的两件事:

  • 修复解析错误!就好像您有一个无法编译的 Java 源代码。错误是您在之后忘记了结束括号die (mysql_error();
  • 不,无论如何它都行不通。您将正文中的数据发送为application/json,并尝试将其读取为 url 编码的形式。决定你想要哪个,寻求帮助。
  • 删除stripslashes。它不会增加任何安全性,并且如果有人在她的密码中使用斜线,则会导致错误。除非您打开了magic_quotes,否则您不应该这样做。

既然你这么早就犯了三个非常基本的错误,我几乎可以肯定还有很多很多需要解决的问题。除了为您重写整个内容或发送一些有关 PHP 编程和 Web 应用程序编程的一般链接之外,我认为没有其他方法可以帮助您。如果您设法拆分问题,孤立地测试事物并提出更多问题,那么可能会有希望。

更新

如果您决定围绕 JSON 进行标准化,PHP 文件中的一般模式将是:

// get the body of the HTTP request (that's the "http entity")
$body = file_get_contents('php://input');

// translate JSON into ordinary PHP array:
$entity = json_decode($test, true);

// Now you can read parts of it as if you read an array;
// the data may be nested and will mirror exactly your JSONObject:

$username=$entity['myusername'];
$password=$entity['mypassword'];

[是的,那是我乞求赞成:-)]

[而且我认为您的 Java 代码中存在更多问题,但一次只有一件事]

于 2013-02-13T13:32:47.293 回答