마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

로그인 구현 중 생긴 문제입니다

0 추천
 protected Void doInBackground(Void... unused) {

            /* 인풋 파라메터값 생성 */
            String param = "u_id=" + etid + "&u_pw=" + etpwd + "";

            try {
                Log.e("check", "start");

                /* 서버연결 */
                URL url = new URL(
                        "https://daerojung.cafe24.com/htdocs/login.php");
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                conn.setRequestMethod("POST");
                conn.setDoInput(true);
                conn.connect();

                /* 안드로이드 -> 서버 파라메터값 전달 */
                OutputStream outs = conn.getOutputStream();
                outs.write(param.getBytes("UTF-8"));
                outs.flush();
                outs.close();

                /* 서버 -> 안드로이드 파라메터값 전달 */
                InputStream is = null;
                BufferedReader in = null;

                is = conn.getInputStream();

                in = new BufferedReader(new InputStreamReader(is), 8 * 1024);
                String line = null;
                StringBuffer buff = new StringBuffer();

                while ((line = in.readLine()) != null) {
                    buff.append(line + "\n");
                }

                data = buff.toString().trim();
                Log.e("RECV DATA", data);   // 받아오는 데이타

            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
@Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            // 1이면 로그인 성공
            if (data.equals("1"))
            {
                
            }
            // 0이면 비밀번호 불 일치
            else if (data.equals("0")) {


                // 그 외 없는 아이디
            }else {

              

            }
        }
<?php
	session_start();
	
	$id = $_POST[u_id];
	$pw = $_POST[u_pw];
	
	$connect = mysqli_connect("localhost","...","...", "...") or  
        die( "SQL server에 연결할 수 없습니다.");

		
  $sql = "SELECT IF(strcmp(PWD,'$pw'),0,1) pw_chk FROM users  WHERE USERID = '$id'";
 
  $result = mysqli_query($connect, $sql);


  // result of sql query

  if($result)
  {
    $row = mysqli_fetch_array($result);
	
    if(is_null($row[pw_chk]))
    {
      echo  "Can not find ID";
    }
    else
    {
      echo "$row[pw_chk]";
    }
  }
  else
  {
   echo mysqli_errno($connect);
  }

?>

로그인 구현 중 문제가 생겨 질문올립니다

doInBackground에서 웹서버를 통해 값( 0 or 1 )을 받아오고 값을 onPostExcute로 넘겨서 if문에서 문자열 비교합니다.(db에 맞는 id와 pw가 있으면 1, 비밀번호 불일치 시0 반환)

로그를 찍으면 data가 1로 들어오고 공백문자 제거도 해주었는데 

equals를 실행하면 자꾸 else로 들어갑니다.

그래서  data의 길이를 찍어보니 2가 나옵니다. 앞뒤로 다른 문자열을 붙여 확인해 보아도 공백문자가 없는데 길이가2가 나옵니다ㅠㅠㅠ 왜 이런걸까요?

조언 부탁드립니다ㅠㅠ

치즈볼괴물 (120 포인트) 님이 2019년 7월 18일 질문

1개의 답변

0 추천
buff.append(line + "\n");  로인해  1이 아니라 1\n 로 되어 있는듯 하니 확인 해 보세요.
익명사용자 님이 2019년 7월 18일 답변
답변감사합니다
하지만 결과가 똑같네요ㅠㅠ
앞뒤로 다른 문자열을 붙어셔 로그를 찍어보아도 공백이 없고
길이를 찍어보니 1이 나와야하는데 2가 나옵니다..
data.substring(1,2);
이렇게 잘라서 로그로 출력해보니 길이도1, 문자열도 제대로 나옵니다.
trim()으로 안된걸까봐 replaceAll도 사용해봤는데 결과는 같습니다ㅠ
도대체 뭘까요ㅠㅜㅜ
byte[] res = data.getBytes("utf-8"); 같은 것으로  어레이로 만든 이후
아래 코드를 이용해 헥사로 변경해서  어떤 값이 들어 있는지 로그 찍어보시는게 좋을 듯 합니다.
https://github.com/baomidou/kisso/blob/master/src/main/java/com/baomidou/kisso/common/encrypt/Byte2Hex.java
정말감사합니다
로그로 찍어보니 efbbbf31라는 값이 들어있는데
31은 원래 데이터인 1인 것 같고 efbbbf는 이상한 문자..?들인가봐요..
어디서 붙어서 오는 값일까요..
...