php - Android:通过 post 方法通过 JSONObject 将数据发送到服务器

标签 php android mysql json

这个问题可能是重复的,但我在问题中找不到任何解决方案。

这是一个简单的登录方法。

基本上,我从用户那里获取两个参数并将它们发送到服务器,服务器搜索数据库并返回与我发送的参数匹配的结果。如果没有匹配结果,则该方法只需返回 null,这样我就可以要求用户更正用户名和密码。

这是我用来发送参数的代码;

    @Override
    protected User doInBackground(Void... params) {

        ArrayList<NameValuePair> dataToSend = new ArrayList<>();
        dataToSend.add(0,new BasicNameValuePair("username",user.username));
        dataToSend.add(1,new BasicNameValuePair("password",user.password));



        HttpParams httpRequestParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpRequestParams,CONNECTION_TIMEOUT);
        HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);

        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost("http://www.okanyakit.com/tez/FetchUserData.php");

        User returnedUser = null;

        try {
            post.setEntity(new UrlEncodedFormEntity(dataToSend));
            HttpResponse httpResponse = client.execute(post);

            HttpEntity entity = httpResponse.getEntity();
            String result = EntityUtils.toString(entity);
            JSONObject jObject = new JSONObject(result);

            if (jObject.length() == 0){
                returnedUser = null;
            }else {

                String username = jObject.getString("username");
                String password = jObject.getString("password");
                String email = jObject.getString("email");
                String  phonenumber = jObject.getString("phonenumber");
                String bloodtype = jObject.getString("bloodtype");
                String  birthday = jObject.getString("birthday");
                String address = jObject.getString("address");


                returnedUser = new User(username,password,email,phonenumber,bloodtype,birthday,address);

            }


        }catch (Exception e){
            e.printStackTrace();
        }


        return returnedUser;
    }

在这里,我可以将用户名和密码都添加到列表中,但是当它连接到服务器时,我收到一个错误,它说我只发送了一个参数,而它需要两个参数。

我不认为我的 php 代码有问题,但我不确定,所以就在这里;

    <?php   
$con=mysqli_connect("89.19.30.210","okan_tez","okan_tez","okan_tez_andro");

$username = $_POST["username"];
$password = $_POST["password"];




mysqli_close($con);
$statement = mysqli_prepare("SELECT * FROM user WHERE username = ? AND password = ? ");
mysqli_stmt_bind_param($statement, "ss",$username, $password);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $userid, $username, $password, $email, $phonenumber, $bloodtype, $birthday, $address);

$user = array();
while (mysqli_stmt_fetch($statement)){
    $user [username] = $username;
    $user [password] = $password;
    $user [email] = $email;
    $user [phonenumber] = $phonenumber;
    $user [bloodtype] = $bloodtype;
    $user [birthday] = $birthday;
    $user [address] = $address;

}
echo json_encode($user);
mysqli_stmt_close($statement);


?>

这是调试屏幕截图;

enter image description here

这里是绿色字体的内容


警告:mysqli_prepare() 需要 2 个参数,其中 1 个在 /home/okanyakit.com/httpdocs/tez/FetchUserData.php11 行 中给出>

警告:mysqli_stmt_bind_param() 期望参数 1 为 mysqli_stmt,在 /home/okanyakit.com/httpdocs/tez/FetchUserData.php12< 中给出 null/b>

警告:mysqli_stmt_execute() 期望参数 1 为 mysqli_stmt,在 /home/okanyakit.com/httpdocs/tez/FetchUserData.php13< 中给出 null/b>

警告:mysqli_stmt_store_result() 期望参数 1 为 mysqli_stmt,在 /home/okanyakit.com/httpdocs/tez/FetchUserData.php14< 中给出 null/b>

警告:mysqli_stmt_bind_result() 期望参数 1 为 mysqli_stmt,在 /home/okanyakit.com/httpdocs/tez/FetchUserData.php15< 中给出 null/b>

警告:mysqli_stmt_fetch() 期望参数 1 为 mysqli_stmt,在 /home/okanyakit.com/httpdocs/tez/FetchUserData.php18< 中给出 null/b>
[]
警告:mysqli_stmt_close() 期望参数 1 为 mysqli_stmt,在 /home/okanyakit.com/httpdocs/tez/FetchUserData.php29< 中给出 null/b>

那么问题是什么?我该如何解决它?请项目截止日期是两天后,我还有很多问题。我的注册部分也有类似的问题。我想如果我能解决这个问题我也就能解决这个问题。谢谢。

最佳答案

您不应该在此处关闭连接:

mysqli_close($con);
$statement = mysqli_prepare("SELECT * FROM user WHERE username = ? AND password = ? ");

并且mysqli_prepare需要$con参数(http://php.net/manual/fr/mysqli.prepare.php):

$statement = mysqli_prepare($con,"SELECT * FROM user WHERE username = ? AND password = ? ");

关于php - Android:通过 post 方法通过 JSONObject 将数据发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29925315/