저번 시간에 있었던 과제에 대해 알아보겠습니다.
1. 학생이름과 점수가 들어있는 DB에서, GET 방식으로 name을 건네주면 점수를 출력하는 페이지 만들기
이제 코드가 많아지고 파일이 복잡해지기 때문에 vi 로 계속 만들기 힘들 것 같아 vs code 로 만든 후 sftp를 사용하여 서버와 파일을 공유하였습니다.
- ftp 는 파일 전송 프로토콜로 서로 다른 시스템에서 파일을 전송할 수 있습니다. (저의 컴퓨터와 가상 머신에 올린 서버 사이에서 공유)
먼저 form 태그를 사용하여 get방식으로 요청을 보내는 파일을 만들었습니다.
이제 입력란에 이름을 입력하면!! name에 입력한 이름 값이 들어가 해당페이지를 다시 요청하게 됩니다.
이제 php 코드 부분을 보시면 먼저 데이터베이스 연결을 해줍니다.
그리고 get 요청으로 name 데이터가 들어온 것을 따로 변수에 저장해주고 해당 값으로 데이터베이스에서 name 값의 데이터를 찾을 수 있는 쿼리를 작성하여 줍니다.
쿼리 결과를 result 변수에 저장하여 주고 찾은 결과 중 첫번째 행에서 score 값을 찾아 출력하여주면 끝 !!!!
지금보니까 결과가 있을 경우 출력하는 코드를 넣어주면 더 좋을 것 같습니다. if문으로...(따로 추가했습니다.)
2. 회원가입 페이지 만들기
사실 이 과제가 메인입니다...
벌써 코드가 이만큼 길어지네요...
일단 이 파일은 단순히 입력값을 받을 파일이라 읽어보시면 다 이해하실 수 있을 것 입니다. 하지만 맨 위에 처음보는 함수가 있습니다.
바로 require_once(); 함수인데요... 이것은 해당 파일을 가져와 이어 붙인다고 생각하시면 됩니다. 코드에 있는 views/includes/head.php 파일을 보겠습니다.
head.php 파일을 보시면 공통으로 적을 수 있는 헤드 부분을 따로 저장하여 여러파일에 똑같은 코드를 저장하지 않아도 되게 할 수 있습니다. 즉, require_once 함수부분에 head.php 파일이 대신 들어갔다고 보시면 됩니다.
여기서 한가지 더 설명할 것이 있는데 바로 link부분과 script부분에 엄청 긴 문자가 들어간 것을 볼 수 있습니다. 이것은 바로 부트스트랩이라는 곳에서 제공하는 스타일과 스크립트를 사용할 수 있게 해주는 코드입니다. 제가 일일이 꾸미기 힘들 것 같아 부트스트랩에서 제공하는 스타일을 가져와서 사용하였습니다. 코드도 다 제공하기 때문에 그대로 복사하여 쓰시면 됩니다.
자세한내용은 https://getbootstrap.com/docs/5.3/getting-started/introduction/ 여기로 들어가서 확인해보시면 됩니다.
Get started with Bootstrap
Bootstrap is a powerful, feature-packed frontend toolkit. Build anything—from prototype to production—in minutes.
getbootstrap.com
그러면 이제 마지막에 있는 post 요청시 실행 한다는 함수도 이해할 수 있을 겁니다. 바로 저 파일을 확인해봅시다!!
첫 번째 줄을 보시면 database.php를 가져옵니다. 여기는 그냥 따로 데이터베이스 연결하는 코드를 적어놨습니다. 연결하는 것은 앞에서 많이 적었기 때문에 금방 채울 수 있을 겁니다.
만약 연결 실패 시 종료하는 코드 exit; 를 넣어서 뒤에 코드를 무시하게 합니다.
post요청으로 받은 데이터들을 따로 변수에 저장하고, 이것이 회원가입하는 페이지이기 때문에 저장할 수 있는 올바른 데이터인지 확인해야 합니다. 그래서 제가 생각한 것은 일단 입력란을 모두 작성해야하며, 비밀번호을 올바르게 적었는 지 두번 입력하게 하여 확인해야 합니다. 또한, 아이디와 이메일이 이미 존재하는 것과 중복되며 안되기 때문에 이 4가지를 검사하여 주었습니다.
나머지는 코드를 보면 이해하실 것 같고, 제가 아이디와 이메일을 검사한 방법을 설명하겠습니다. 일단 현재 데이터 베이스에는 적은 데이터가 있지만, 데이터가 많을 시 select할 때도 많은 자원이 소요될 것 같아. 입력한 아이디와 이메일이 같은 것이 있는 지 검사하여 딱 필요한 데이터만 찾았습니다.
결과값이 있을 경우 exit를 사용할 수 있지만, 아이디가 잘못됐는지 이메일이 잘못됐는지 확인하기 위해 그 안에서 검사를 한번 더 해주었습니다.
그 다음을 보시면 mysqli_fetch_assoc(); 를 통해 검색한 결과에서 한 행을 row 변수에 넣습니다. 이 row 변수를 통해 while 반복문 조건을 정하기 때문에 만약 row가 없어질때까지 while이 반복하며 row가 없을 경우 반복문을 탈출하게 됩니다. mysqli_fetch_array();를 사용하면 사용할 때마다 다음 행을 가져오기 때문에 모든 결과값에 대해 검사할 수 있습니다.
- array와 assoc는 정확히는 다르지만 똑같은 기능을 수행한다고만 아시면 될 것 같습니다.
이렇게 제가 정한 검사를 모두 끝내고 마지막 코드까지 왔을 경우 올바른 데이터들이라고 할 수 있습니다. 그래서 이 데이터들을 데이터베이스에 insert 문을 통해 넣어주면 회원가입이 완료되며 로그인 페이지로 이동하게 됩니다.
또 새로운게 등장했네요... header(location: login.php)인데 이것은 http 요청을 할때 header에 (location: login.php)를 추가해준다는 것인데 location은 리다이렉트 즉, 새 창을 불러온다는 것입니다. 그렇기 때문에 login.php를 가져오고 login.php로 이동하게 됩니다.
실제 페이지를 보며 확인해보겠습니다.
제가 이미 admin이라는 계정을 만들었기 때문에 아마 검사에서 걸릴 것입니다.
이렇게 올바르게 작동하는 것을 확인할 수 있습니다. idx가 바로 9로 넘어가는 이유는 중간에 제가 연습삼아 입력 한 데이터를 모두 지웠기 때문에 좀 지저분하게 바로 9로 넘어갔네여....
여기까지 1,2 과제를 보았습니다. 좀 길어진 관계로 3 과제는 다음 포스트에 알아보겠습니다.!!
'웹 개발' 카테고리의 다른 글
웹 개발 일기장 3 - 1 (로그인 로직) (2) | 2023.11.09 |
---|---|
웹 개발 공부 일기장 2 - 과제 (로그인 페이지 With DB) (0) | 2023.11.06 |
웹 개발 공부 일기장 2 - 1 (DBMS) (0) | 2023.11.02 |
웹 개발 공부 일기장 1-과제 (로그인 페이지) (0) | 2023.10.29 |
웹 개발 공부 일기장 1-2 (WAS) (2) | 2023.10.27 |