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

PHP & 안드로이드 스튜디오 500에러

0 추천

현재 안드로이드 로그인 화면을 구현중인데요.

회원 가입 db는 연동이 되었는데 로그인 화면도 비슷하게 만들었음에도 500에러가 뜨네요.. 

 

크롬에서 login.php파일에 접속하면 접속은 되었다고 나옵니다(MySql connection is completed)

로직은 loginScreen화면에서 아이디와 비밀번호를 입력하고 로그인 버튼을 누르면 db에서 아이디와 비밀번호가 일치하는지 알아옵니다.

 

[loginRequest.java]

public class LoginRequest extends StringRequest {
    final static private String URL = "http://14.50.23.146/login.php";
    private Map<String, String> map;

    public LoginRequest(String userId, String userPw, Response.Listener<String> listener) {
        super(Request.Method.POST, URL, listener, null);
        map = new HashMap<>();
        map.put("userId", userId);
        map.put("userPw", userPw);
    }

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return map;
    }
}

 

[loginScreen]

public class loginScreen extends AppCompatActivity {
    private EditText userId, userPw;
    private Button loginBtn, signUpBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_screen);

        userId = findViewById(R.id.id);
        userPw = findViewById(R.id.pw);

        loginBtn = (Button)findViewById(R.id.loginBtn);
        loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String id = userId.getText().toString();
                String pw = userPw.getText().toString();

                Response.Listener<String> responseListener = new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            boolean success = jsonObject.getBoolean("success");
                            if(success) {
                                Toast.makeText(getApplicationContext(), "로그인 성공", Toast.LENGTH_LONG).show();
                                Intent intent = new Intent(getApplicationContext(), activitiy_main.class);
                                startActivity(intent);
                            } else {
                                Toast.makeText(getApplicationContext(), "로그인 실패", Toast.LENGTH_LONG).show();
                                return;
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                };
                LoginRequest loginRequest = new LoginRequest(id, pw, responseListener);
                RequestQueue queue = Volley.newRequestQueue(loginScreen.this);
                queue.add(loginRequest);
            }
        });

        // 회원가입 화면 이동
        signUpBtn = (Button)findViewById(R.id.signUpBtn);
        signUpBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), signUpScreen.class);
                startActivity(intent);
            }
        });

    }

}
[PHP파일]
<?php
	$host = "localhost";
	$dbUser = "root";
	$db_pw = "1234";
	$db_name = "user";

	//mysqli_connect("localhost", "사용자 아이디", "패스워드", "사용할 DB")
	$connection = mysqli_connect("$host", "$dbUser", "$db_pw", "$db_name");
	mysqli_query($connection, 'SET NAMES utf8');

	if (mysqli_connect_errno()) {
		printf("Connection failed: %s \n", mysqli_connect_error());
		exit();
	}
	else {
		echo "MySql connection is completed";
	}
	
	$userId = $_POST["userId"];
	$userPw = $_POST["userPw"];

	$statement = mysqli_prepare($connection, "SELECT * FROM user WHERE userId = ? and userPw = ?");
	mysqli_stmt_bind_param($statement, "ss", $userId, $userPw);
	mysqli_stmt_execute($statement);
	mysqli_stmt_store_result($statement);
	mysqli_stmt_bind_result($statement, $userId, $userPw);

	$response = array();
	$response["success"] = false;

	while(mysqli_stmt_fetch($statement)) {
		$response["success"] = true;
		$response["userId"] = $userId;
		$response["userPw"] = $userPw;
	}

	echo json_encode($response);
?>

 

 

매력적인망고 (140 포인트) 님이 2021년 6월 4일 질문
http 500은 Internal Server Error입니다. 즉, 서버가 클라이언트의 요청을 처리하지 못하고 에러가 난 경우입니다. 서버 내의 문제일 가능성이 아주 높습니다.
PHP 코드를 보니 클라이언트에서 보내는 요청에 대해 유효성 검사를 전혀 안하고 있네요. 만약 클라이언트가 잘못된 요청을 보내더라도 서버는 검사를 해야 하구요 (최소한 값이 있는지, 최소 string 길이에 적합한지 등등), 이에 따른 적절한 응답값을 주는 게 맞다고 봅니다. 500 에러를 내보는 거는 아닌 것 같아 보여요.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...