PHP

login.php / sql문 해석하기

어렵지만 2024. 5. 3. 00:32
<?php
error_reporting(E_ALL);
// php 의 오류 레포팅을 모든 오류를 보고 하도록 설정합니다
ini_set('display_errors', 1);
// php오류 메세지를 화면에 표시하도록 설정합니다
include ('dbcon.php');
// 외부파일을 스크립트의 포함시켜서 필요한 설정이나 함수들을 사용 할 수 있습니다.
$android = strpos($_SERVER['HTTP_USER_AGENT'], "Android");
// 사용자 에이전트문자열에서 안드로이드를 찾아서 그 위치를 $android 변수에 저장합니다. 이렇게하면 안드로이드에서 요청이 왔는지 알 수 있습니다.

if ($_SERVER['REQUEST_METHOD'] == 'POST' || $android) {
    // 안드로이드 코드의 postParameters 변수에 적어준 이름을 가지고 값을 전달 받습니다.
    // 클라이언트의 요청이 post방식이거나 사용자 에이전트에 안드로이드가 포함되어있으면 해당 코드를 실행합니다.
    $userId = $_POST['sendId']; //아이디
    $userPassword = $_POST['sendPassword']; // 비밀번호

    // 아이디와 비밀번호의 길이를 확인합니다.
    if (empty($userId)) {
        $errMSG = "아이디를 입력하세요!";
    } elseif (empty($userPassword)) {
        $errMSG = "비밀번호를 입력하세요!";
    }

    if (!isset($errMSG)) {
        // $errMSG 변수 설정이 되어있지 않은 경우만 실행됩니다 즉/ 오류메시지가 없을 때 실행합니다.
        try {
            // 사용자가 입력한 아이디와 비밀번호를 조회합니다.
            $stmt = $con->prepare('SELECT userId, userPassword, userNickname FROM userinfo WHERE userId = ?');
            // db에서 아이디, 비밀번호, 닉네임을 가져오는 쿼리를 준비합니다.
            $stmt->bindParam(1, $userId);
            // 쿼리의 "?"의 대응하는 값을 설정합니다. 여기서는 userId를 대입합니다.
            $stmt->execute();
            // 준비된 sql문을 실행합니다.
            $row = $stmt->fetch(PDO::FETCH_ASSOC);
            // 실행된 쿼리의 결과를 가져와서 연관 배열형태로 $row에 저장합니다.

            if ($row) {
                // 아이디가 일치하는 사용자를 찾았습니다.
                // 데이터베이스에 저장된 비밀번호와 입력된 비밀번호를 비교합니다.
                // 데이터가 존재하는 경우 실행합니다.
                if ($userPassword === $row['userPassword']) {
                    // 비밀번호가 일치합니다. 로그인 성공 메시지와 사용자의 닉네임을 반환합니다.
                    $successMSG = "로그인 성공하였습니다. 홈으로 이동합니다.";
                    $nickname = $row['userNickname']; // 사용자의 닉네임
                } else {
                    // 비밀번호가 일치하지 않습니다. 오류 메시지를 반환합니다.
                    $errMSG = "아이디 또는 비밀번호가 일치하지 않습니다.";
                }
            } else {
                // 일치하는 아이디가 없습니다. 오류 메시지를 반환합니다.
                $errMSG = "아이디 또는 비밀번호가 일치하지 않습니다.";
            }
        } catch (PDOException $e) {
            die("Database error: " . $e->getMessage());
        }
    }
}

$response = array();

if (isset($errMSG)) {
    $response['error'] = $errMSG;
}
if (isset($successMSG)) {
    $response['success'] = $successMSG;
}
if (isset($nickname)) {
    $response['nickname'] = $nickname;
}

// JSON 응답 전에 URL 디코딩 적용
foreach ($response as &$value) {
    // $response의 배열의 값을 URL 디코딩합니다.
    $value = urldecode($value);
}

echo json_encode($response);
?>