android+php+sqlserver实现登陆

          最近由于需要以android为前端,数据库选择sqlserver,后台我选择了php(虽然我没学过php微笑)。

不说了,直接上图上代码。

布局界面有点难看,你们可以自己排版,这里就不贴出布局代码了。

这个登陆的前提是你的数据库要有对应的账号和密码,响应的部分也要对应。

直接说思路:输入账号,密码,点击登陆按钮,然后访问后台php,后台会对前端传来的参数数据进行判断,查询sqlserver数据库是否含有这个用户和密码。如果有,返回信息给客户端,客户端进入主界面。

下面贴上主要代码

mLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        int result = login();
                        //login()为向php服务器提交请求的函数,返回数据类型为int
                        if (result == 1) {
                            Log.e("log_tag", "登陆成功!");
                            //Toast toast=null;
                            Looper.prepare();
                            Intent intent=new Intent(LoginActivity.this,MainActivity.class);
                            startActivity(intent);
                            finish();
                            Looper.loop();
                        } else if (result == -2) {
                            Log.e("log_tag", "密码错误!");
                            //Toast toast=null;
                            Looper.prepare();
                            Toast.makeText(LoginActivity.this, "密码错误!", Toast.LENGTH_SHORT).show();
                            Looper.loop();
                        } else if (result == -1) {
                            Log.e("log_tag", "不存在该用户!");
                            //Toast toast=null;
                            Looper.prepare();
                            Toast.makeText(LoginActivity.this, "不存在该用户!", Toast.LENGTH_SHORT).show();
                            Looper.loop();
                        }
                    } catch (IOException e) {
                        System.out.println(e.getMessage());
                    }
                }
            }).start();
        }
    });

}



private int login() throws IOException {
    int returnResult=0;
 /*获取用户名和密码*/
    String username=mUser.getText().toString();
    String password=mPassword.getText().toString();
    if(username==null||username.length()<=0){
        Looper.prepare();
        Toast.makeText(LoginActivity.this,"请输入账号", Toast.LENGTH_LONG).show();
        Looper.loop();
        return 0;

    }
    if(password==null||password.length()<=0){
        Looper.prepare();
        Toast.makeText(LoginActivity.this,"请输入密码", Toast.LENGTH_LONG).show();
        Looper.loop();
        return 0;
    }
    String urlstr="http://服务器域名ip/后台php项目名/login.php";
    //建立网络连接
    URL url = new URL(urlstr);
    HttpURLConnection http= (HttpURLConnection) url.openConnection();
    //往网页写入POST数据,和网页POST方法类似,参数间用‘&’连接
    String params="username="+username+'&'+"password="+password+'&'+"department="+department;
    http.setDoOutput(true);
    http.setRequestMethod("POST");
    OutputStream out=http.getOutputStream();
    out.write(params.getBytes());//post提交参数
    out.flush();
    out.close();

    //读取网页返回的数据
    BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(http.getInputStream()));//获得输入流
    String line="";
    StringBuilder sb=new StringBuilder();//建立输入缓冲区
    while (null!=(line=bufferedReader.readLine())){//结束会读入一个null值
        sb.append(line);//写缓冲区
    }
    String result= sb.toString();//返回结果

    try {

    /*获取服务器返回的JSON数据*/
        Log.i("ddd",result);
        JSONObject jsonObject= new JSONObject(result);
        returnResult=jsonObject.getInt("status");//获取JSON数据中status字段值
        
    } catch (Exception e) {
        // TODO: handle exception
        Log.e("log_tag", "the Error parsing data "+e.toString());
    }
    return returnResult;
}
下面是服务器端代码
<?php
/*
*用户登录,服务器进行的处理
*/
include("conn.php");
$username=iconv("UTF-8", "GBK//IGNORE",$_POST['username']);
$password=$_POST['password'];//客户端post过来的密码
$department=iconv("UTF-8", "GBK//IGNORE",$_POST['department']);
$sql=sqlsrv_query($conn,"SELECT * FROM [数据库名].[dbo].[表名] WHERE username ='$username'");

if(!empty($sql)){
    $result=sqlsrv_fetch_array($sql);
}
if(!empty($result)) {
    //存在该用户
    if ($password == $result['password']) {
        if ($department == $result['department']) {
            /*这里的数组不需要加单引号*/
            $back['status'] = '1';
            $back['info'] = "login success";
            echo(json_encode($back));
        } else {
            $back['status'] = '-2';
            $back['info'] = "department error";
            echo(json_encode($back));
        }

    } else{/*密码错误*/
                $back['status'] = '-2';
                $back['info'] = "password error";
                echo(json_encode($back));
            }


    } else {
        //不存在该用户
        $back['status'] = '-1';
        $back['info'] = "user not exist";
        echo(json_encode($back));

}
sqlsrv_close($conn);
?>
$username=iconv("UTF-8", "GBK//IGNORE",$_POST['username']);

像这段代码,因为有时用户名是中文,如果直接传到数据库,会出现乱码问题,因为android的默认编码是utf-8,php的编码可设置成utf-8,但是sqlserver数据库的编码是gbk,我目前还不知道如何更改它的编码为utf-8,所以我直接在php后台utf-8转为gbk,这样就不会出现乱码。

  sqlserver我也是第一次用,之前用的都是mysql,所以出现很多的问题,比如数据库名,表名为中文时都无法查询数据库的数据。如果有会的朋友请留言,非常感谢!!!

猜你喜欢

转载自blog.csdn.net/weixin_40586270/article/details/80453889