Mini mission

DATE : 2023/11/2

자! DB & SQL에 대해 살펴보았으니 mini mission을 할 차례이다.

Mini mission 내용은 다음과 같다.

  • Client가 학생 이름을 입력하면 Get method로 파라미터를 보낼 것

  • DB에서 이름을 입력한 학생의 점수를 가져와 화면에 결과를 출력할 것

바로 시작해보자.

DB는 DataBase에서 본

test DB - student_grade Table을 사용할 것이다.

[score.html]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="./miniProject.php" method="get">
        <input type="text" name="student">
        <button>Get Score</button>
    </form>
</body>
</html>

우선 사용자의 파라미터를 받을 <input>이 필요하다.

간단하게 입력란 & 버튼 정도로만 구성했다.

Get method로 파라미터를 보낼 거라 <form> - method 속성을 get으로!

결과 화면을 보면

이름을 입력할 <input>과 버튼이 등장한다.

다음으로 학생 이름을 가지고 이후 과정을 처리할 PHP code를 살펴보자.

[ miniProject.php ]

<?php
    define("DB_SERVER", "localhost");
    define("DB_USER", "admin");
    define("DB_PASSWORD", "student1234");
    define("DB_TABLE", "test");

    $conn = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_TABLE);
    
    if(!$conn) {
        echo 
        '<script>
            alert("DB connection error");
            location.href = "score.html";
        </script>';
    }

    $name = $_GET['student'];

    if($name == '') {
        echo 
        '<script>
            alert("이름을 입력하세요");
            location.href = "score.html";
        </script>';
    }

    
    $query = "SELECT * from student_grade where student_name = '$name'";
    $result = mysqli_query($conn, $query);

    if(mysqli_num_rows($result) == 0) {
        echo '<script>
            alert("해당 학생 정보는 존재하지 않습니다.");
            location.href = "score.html";
        </script>';
    }
    
    $row = mysqli_fetch_array($result);
    echo $name." 학생의 점수는 ".$row['score']."점 입니다.";
?>

전체적인 코드는 위와 같다. 이해를 돕기 위해 조금씩 쪼개서 분석해보자.

define("DB_SERVER", "localhost");
define("DB_USER", "admin");
define("DB_PASSWORD", "student1234");
define("DB_TABLE", "test");

$conn = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_TABLE);

사용자가 학생 이름을 입력하면 WAS는 그 값을 가지고 DB에게 해당 학생의 점수를 물어봐야 한다.

이때 DB 관점에서는 아무한테 정보를 알려줄 수 없기 때문에

데이터를 제공할 만한 권한이 되는 지 인증이 필요하다고 할 수 있다.

여기서 말하는 "인증"은 쉽게 말해 로그인과 같다.

DB의 id:password를 가지고 연결을 시도하면 WAS는 로그인에 성공해 자신이 인증된 상대라는 걸

증명할 수 있게 된다.

자신이 인증된 대상임을 보여주는 결과를 mysqli_connect()가 반환하고 (= $conn)

이후 SQL을 실행할 때 사용한다.

if(!$conn) {
    echo 
    '<script>
        alert("DB connection error");
        location.href = "score.html";
    </script>';
}

만약 연결에 문제가 생겼다면 다시 score.html로 이동하고

정상적으로 연결이 마무리 되면

$user = $_GET['student'];

사용자가 보낸 학생 이름을 글로벌 변수 $_GET에서 가져온다.

if($name == '') {
    echo 
    '<script>
        alert("이름을 입력하세요");
        location.href = "score.html";
    </script>';
}

<input>에서 required를 사용하지 않았기 때문에

사용자가 아무런 값을 입력하지 않은 상태로 요청을 보낼 수 있음을 고려해

$name이 공백이면 계속해서 진행하지 않고 다시 score.html로 이동한다.

$query = "SELECT * from student_grade where student_name = '$name'";
$result = mysqli_query($conn, $query);

DB와 소통도 문제없고! 사용자가 학생 이름을 입력했다면!

이젠 SQL을 실행할 시간이다.

(참고로 DB에 SQL을 실행하는 걸 query 질의한다고 표현한다.

query할 때 사용하는 언어라 Structured Query Language인 셈)

우리는 사용자가 입력한 학생 이름으로 점수를 얻고 싶기 때문에 select문을 실행할 것이다.

PHP에서 SQL을 사용하기 위해서는 mysqli_query() 함수를 사용한다.

if(mysqli_num_rows($result) == 0) {
    echo '<script>
        alert("해당 학생 정보는 존재하지 않습니다.");
        location.href = "score.html";
    </script>';
}

만약 SQL 결과로 나온 row가 0개라면

DB에 없는 학생 이름을 입력한 것이기 때문에 pop up으로 이를 알리고

score.html로 돌아간다.

$row = mysqli_fetch_array($result);
echo $name." 학생의 점수는 ".$row['score']."점 입니다.";

SQL 실행 결과가 존재하면 mysqli_fetch_array()로 맨 위에 있는 데이터부터 값을 가져온다.

mysqli_query() 결과는 Object 형태이기 때문에 우리가 바로 사용할 수 없어 mysqli_fetch_array,

mysqli_fetch_assoc 함수 등을 사용해야 한다.

마지막엔 학생 이름과 점수를 알려주는 문장을 echo 해주면 끝!

그럼 실행이 잘 되는 지 확인하러 가자!


사용자가 아무런 값을 입력하지 않은 경우, pop up으로 문구를 출력한다.

만약 mysqli_connect() 실행 결과에 문제가 있다면 DB connection error 문구를 출력한다.

DB에 존재하는 학생 이름을 입력한 경우에는 학생 이름 & 점수로 위와 같이

성적을 알려주는 문구를 출력한다.

Get method로 파라미터로 학생 이름을 전달하기 때문에

URL 바에 현재 입력한 학생 이름이 무엇인지 노출되는 걸 볼 수 있다!

이렇게 해서- Mini mission 완료!

Last updated