
最近由于需要以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,所以出现很多的问题,比如数据库名,表名为中文时都无法查询数据库的数据。如果有会的朋友请留言,非常感谢!!!
人吐槽 | 人点赞 |
发表评论