모의해킹 스터디 2주차 과제 - Mini Mission

2024. 10. 26. 04:56·모의해킹/모의해킹 스터디

이번 2주차 과제 중 Mini Mission으로

`[학생이름] 학생의 점수는 [점수]입니다.`

를 PHP와 DB를 연결하여 웹 화면에 출력하는 과제를 해볼려고 한다.

개발

먼저 PHP 코드를 활용하여 URL에서 학생 이름을 가져오고, 해당 학생의 점수를 데이터베이스에서 조회하여 결과를 배열 형태로 반환하였다.

<?php
// PHP 에러 확인
error_reporting(E_ALL); // 모든 에러 보고
ini_set('display_errors', '1'); // 에러를 화면에 표시

require_once 'db.php'; // 데이터베이스 연결 함수 파일 추가

// 점수를 가져오는 함수
function getScore($studentName) {
    $conn = getConnection(); // 데이터베이스 연결

    // 이름을 안전하게 처리하기 위해 prepared statement 사용
    $stmt = $conn->prepare("SELECT * FROM score_test WHERE name = ? "); // 이름으로 조건 설정
    $stmt->bind_param("s", $studentName); // 문자열 타입으로 바인딩
    $stmt->execute(); // 쿼리 실행
    $result = $stmt->get_result(); // 결과 가져오기

    // 쿼리 실패 시 에러 메시지 출력
    if (!$result) {
        die("Query failed: " . mysqli_error($conn));
    }

    $row = $result->fetch_assoc(); // 결과 배열 가져오기
    $stmt->close(); // prepared statement 종료
    mysqli_close($conn); // 데이터베이스 연결 종료

    // 결과가 있을 경우 HTML 이스케이프 후 배열로 반환, 없을 경우 null 반환
    return $row ? array(
        'name' => htmlspecialchars($row['name']),
        'score' => htmlspecialchars($row['score'])
    ) : null;
}

// URL에서 학생 이름을 가져옴
$studentName = isset($_GET['name']) ? $_GET['name'] : null; // 'name' 쿼리 파라미터 확인
$filtered = $studentName ? getScore($studentName) : null; // 이름이 있을 경우 점수 데이터 가져오기
?>

 

그다음 해당 데이터를 출력해주기 위해 HTML 코드를 생성하였다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>학생 점수</title>
</head>
<body>
<div>
<?php if ($studentName): ?> <!-- 이름이 있을 경우 -->
        <?php if ($filtered): ?> <!-- 데이터가 존재하는 경우 -->
            <?=$filtered['name']?> 학생의 점수는 <?=$filtered['score']?>점 입니다.
        <?php else: ?> <!-- 데이터가 존재하지 않는 경우 -->
            해당 학생의 점수가 없습니다.
        <?php endif; ?>
    <?php else: ?> <!-- 이름이 없는 경우 (메인 화면) -->
        <div>안녕하세요! 학생의 이름을 입력해 주세요.</div>
    <?php endif; ?>
</div>
</body>
</html>

결과

  • 메인화면

메인화면

  • name 값이 없을 경우

name 값이 없는 경우

  • name 값이 있을 경우

name 값이 있는 경우

후기

이번 과제를 통해 PHP와 데이터베이스를 연결하여 데이터를 조회하고 웹 페이지에 출력하는 과정을 해보았다. 간단한 코드로 개발하였지만, 개발 과정에서 새롭게 알게된 사실을 정리해보겠다.


첫째, error_reporting(E_ALL); ini_set('display_errors', '1');를 사용하여 에러 메시지를 화면에 표시할 수 있었다. 이는 개발 과정에서 발생하는 오류를 쉽게 확인하고 수정할 수 있도록 도와준다. 그렇지만 실 배포 시에는 해당 코드를 제거하고 배포해야 할 것을 명심해야 한다.

 

둘째, prepared statement에 대해서 알게 되었다. 이 방법은 SQL 인젝션 공격을 방지하는 데 효과적이며, 따로 정리를 해봐야겠다.


셋째, 데이터베이스 연결을 명시적으로 종료함으로써 시스템 리소스를 효율적으로 관리하기 위해선 mysqli_close($conn);를 사용하면 좋다. 연결을 열어두면 서버 자원을 낭비할 수 있으며, 이는 성능 저하로 이어질 수 있으므로 연결이 더 이상 필요하지 않을 때는 반드시 종료하는 것이 좋다.

이번 미션을 하면서 새로운 것을 많이 알아간 것 같다. 조금 더 공부하여 다음 과제에서는 해당 부분들을 활용하여 더 실용적이고 효율적인 코드를 작성해봐야겠다.

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'모의해킹 > 모의해킹 스터디' 카테고리의 다른 글

모의해킹 스터디 2주차 과제(2) - 로그인  (0) 2024.10.28
모의해킹 스터디 2주차 과제(1) - 회원가입  (0) 2024.10.27
모의해킹 스터디 2주차 정리  (0) 2024.10.24
모의해킹 스터디 1주차 과제  (0) 2024.10.21
모의해킹 스터디 1주차 정리  (0) 2024.10.21
'모의해킹/모의해킹 스터디' 카테고리의 다른 글
  • 모의해킹 스터디 2주차 과제(2) - 로그인
  • 모의해킹 스터디 2주차 과제(1) - 회원가입
  • 모의해킹 스터디 2주차 정리
  • 모의해킹 스터디 1주차 과제
BPM37093
BPM37093
luna의 IT기술 정리
  • BPM37093
    IT Study Log
    BPM37093
  • 링크

  • 글쓰기 관리
    • 분류 전체보기 (43)
      • 모의해킹 (37)
        • 웹해킹 (1)
        • 모의해킹 스터디 (36)
      • Web (5)
        • 웹 보안 (1)
        • 웹 크롤링 (1)
      • Data (0)
      • Cloud (0)
      • Network (1)
  • 인기 글

  • 방문자 수

    방문자수Total

    • Today :
  • 태그

    티스토리챌린지
    burpsuite
    HTTP
    httprequest
    NAT
    HTML
    mysql
    hash
    오블완
    웹개발
    php
    상태코드
    javascript
    SQL
    Network
    sqlinjection
    모의해킹스터디
    메서드
    HttpResponse
    WEB
    웹해킹
    Chrome
  • hELLO· Designed By정상우.v4.10.1
BPM37093
모의해킹 스터디 2주차 과제 - Mini Mission
상단으로

티스토리툴바