php - 如何为我的应用程序的用户添加积分并将其连接到 Android?

标签 php android mysql

我已经开始从事一个项目,但我被困在这里,我需要为我已经存储在数据库中的每个用户添加点。我创建了一个数据库,在其中存储用户的用户名和密码并将其连接到 android。一切正常,但现在就我而言,我想在用户解决某些问题时为用户存储积分,例如在我的应用程序中,但我不知道如何为此编写方法,并且需要 php 中的一些帮助才能做到这一点。

这些是我的 php 文件: Register.php

    <?php
    $con=mysqli_connect("localhost", "root", "", "geomondo");  

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

    //$username = "admin";
    //$password = "admin";

    $statement = mysqli_prepare($con, "INSERT INTO User (username, password) VALUES (?, ?)");
    mysqli_stmt_bind_param($statement, "ss", $username, $password);
    mysqli_stmt_execute($statement);

    mysqli_stmt_close($statement);

    mysqli_close($con);
?>

还有一个: FetchUserData.php

    <?php
    $con=mysqli_connect("localhost", "root", "", "geomondo");  

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

    //$username = "test";
    //$password = "test";

    $statement = mysqli_prepare($con, "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);

    $user = array();

    while(mysqli_stmt_fetch($statement)){
        $user["username"] = $username;
        $user["password"] = $password;
    }

    echo json_encode($user);
    mysqli_close($con);
?>

那么我现在如何在此处也包含每个用户的积分?

这是我用于将 android 连接到 php 和 mysql 的 java 文件:

    public class ServerRequests {

    ProgressDialog progressDialog;
    public static final int CONNECTION_TIMEOUT = 1000 * 15;
    public static final String SERVER_ADRESS = "http://192.168.0.17:8081/project/";

    public ServerRequests(Context context){
        progressDialog = new ProgressDialog(context);
        progressDialog.setCancelable(false);
        progressDialog.setTitle(R.string.progress_dialog);
        progressDialog.setMessage("Please wait...");
    }

    public void storeUserDataInBackground(User user, GetUserCallback userCallback){
        progressDialog.show();
        new StoreUserDataAsyncTask(user, userCallback).execute();
    }

    public void fetchUserDatainBackground(User user, GetUserCallback callBack){
        progressDialog.show();
        new fetchUserDataAsyncTask(user, callBack).execute();
    }

    public class StoreUserDataAsyncTask extends AsyncTask<Void, Void, Void>{
        User user;
        GetUserCallback userCallback;

        public StoreUserDataAsyncTask(User user, GetUserCallback userCallback){
            this.user = user;
            this.userCallback = userCallback;
        }

        @Override
        protected Void doInBackground(Void... params) {
            ArrayList<NameValuePair> dataToSend = new ArrayList<>();
            dataToSend.add(new BasicNameValuePair("username", user.username));
            dataToSend.add(new BasicNameValuePair("password", user.password));

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

            HttpClient client = new DefaultHttpClient(httpRequestParams);
            HttpPost post = new HttpPost(SERVER_ADRESS + "Register.php");

            try {
                post.setEntity(new UrlEncodedFormEntity(dataToSend));
                client.execute(post);
            }catch (Exception e){
                e.printStackTrace();
            }


            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            progressDialog.dismiss();
            userCallback.done(null);
            super.onPostExecute(aVoid);
        }
    }

    public class fetchUserDataAsyncTask extends AsyncTask<Void, Void, User> {
        User user;
        GetUserCallback userCallback;

        public fetchUserDataAsyncTask(User user, GetUserCallback userCallback) {
            this.user = user;
            this.userCallback = userCallback;
        }

        @Override
        protected User doInBackground(Void... params) {
            ArrayList<NameValuePair> dataToSend = new ArrayList<>();
            dataToSend.add(new BasicNameValuePair("username", user.username));
            dataToSend.add(new BasicNameValuePair("password", user.password));

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

            HttpClient client = new DefaultHttpClient(httpRequestParams);
            HttpPost post = new HttpPost(SERVER_ADRESS + "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
                {
                    returnedUser = new User(user.username, user.password);
                }

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

            return returnedUser;
        }

        @Override
        protected void onPostExecute(User returnedUser) {
            progressDialog.dismiss();
            userCallback.done(returnedUser);
            super.onPostExecute(returnedUser);
        }
    }
}

这是我第一次将 android 连接到在线数据库,我仍在学习 android 开发,所以我会在这里寻求任何帮助。 :)

最佳答案

您的问题表明您对基本术语有一些疑问。 Study it 。 当你创建了一个帐户后,(顺便说一下,数据库最好不要存储 password but its hash )你可能会记录完全相同的内容:发送用户名和密码。如果它存在于数据库中,则创建 session in php

//here we are looking for a user in the database. I do not know how to work with mysqli
session_start();
$_SESSION['name'] = $login;

( better use id to store the user's session )

现在您将能够确定用户的请求是否到达(通过 session )

if ($_SESSION['name'] != '')

并将数据添加到表中。

id | login | score

这是最简单的解决方案。祝你好运。

关于php - 如何为我的应用程序的用户添加积分并将其连接到 Android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32915920/

相关文章:

php - 正则表达式删除正则表达式匹配后的所有内容

php - 如何避免在客户端暴露ajax调用

android - 如何通过Android登录本CAS系统

java - 如何创建一个 Whatsapp 按钮来向我的 Android 应用程序中的特定联系人发送消息?

android - 如何在给定的预定时间自动在 Facebook 页面上发布更新?使用安卓

php - 在表单上打印错误消息

php - enctype ="multipart/form-data"和 enctype ="multipart/form-data;charset=utf-8"有什么区别

php - 尝试连接到 google cloud sql 时出现 PDOException',消息为 'SQLSTATE[HY000] [2002] Connection timed out'

php - 如何使用mysql中的数据创建树形菜单?

mysql - 我可以将 MySQL 中的 EER 图转换为 Microsoft Access 数据库吗?