의외의 곳에서 오류가 발생하여 일주일을 헤매다가 드디어 원인을 찾았습니다.
원인은 mysql 비밀번호 설정으로 밝혀졌습니다.
지금부터 오류 해결 과정 + 로그인 페이지 구현 과정을 나열하겠습니다. 잘못된 부분 지적은 언제나 환영합니다.
1. 코드를 작성하기 전에 로그인 페이지 구현을 위한 전체적인 순서를 적어보자.
(1) 총 4개의 php 파일이 필요합니다: 메인, 로그인, 로그인 확인, 로그아웃 페이지.
(2) 메인 페이지에서 로그인 화면으로 이동하는 버튼을 생성하는 코드를 생성합니다.
(3) 로그인 화면에서 아이디와 비밀번호를 입력할 수 있는 공간을 생성하고, 로그인 확인 페이지로 이동하는 버튼을 생성합니다.
(4) 로그인 확인 페이지를 생성하기 전에 먼저 로그인 확인 페이지에 접속할 DB를 생성합니다.
= php 파일이 있는 경로로 이동 후 mysql -uroot -p 입력하여 root 계정으로 접속
= 데이터베이스 생성 생성할 데이터베이스 이름; 다음을 사용하여 데이터베이스 생성
= 데이터베이스 표시; 입력 후 방금 생성한 데이터베이스 이름이 있는지 확인합니다.
= 생성된 데이터베이스 사용; 테이블을 생성할 데이터베이스를 지정합니다.
= 테이블 생성 데이터베이스 생성. 생성할 테이블명 (하단 부분은 이전 글과 동일한 코드이므로 생략)
= 설명 테이블 이름; 로 테이블 데이터 확인
= insert into tablename (column 1, column 2, column 3) 값(‘data 1’, ‘data 2’, ‘data 3’)을 테이블에 삽입합니다.
*테이블 생성 시 local column 1에 int 타입을 부여했기 때문에 data 1에는 작은따옴표가 없었습니다.
입력할 수 없는 종류의 문자를 쓰면 오류가 발생할 수 있으므로 한 번 더 확인하는 것이 좋습니다.
= 테이블 이름에서 *를 선택하십시오. 를 입력하면 전체 테이블 데이터를 확인할 수 있습니다.
(5) 로그인 확인 페이지에서 데이터베이스에 접속한 후 클라이언트측에서 입력한 아이디와 비밀번호가 데이터베이스에 있는 정보와 일치하면 메인 페이지로 이동하여 나타날 이름을 설정합니다.
일치하지 않는 경우 “로그인 실패” 문구가 표시되도록 설정합니다.
(6) 로그아웃 페이지 ~~
아이디와 비밀번호 입력 전 “로그인” 버튼 생성
올바른 아이디와 비밀번호를 입력하면 “반갑습니다”(id)라는 메시지가 출력되며 로그아웃 버튼이 생성됩니다.
클라이언트로부터 받은 정보는 로그인 확인 페이지에 POST 방식으로 전달됩니다.
아이디와 비밀번호를 입력할 수 있는 필드 생성
제출을 사용하여 로그인 버튼 만들기
mysql에서 생성된 데이터를 연결해주는 페이지이기 때문에 가장 중요하다고 생각합니다.
$conn = mysqli_connect(“호스트”, “사용자 이름”, “비밀번호”, “데이터베이스 이름”);
단일 컴퓨터에서 apm을 사용하고 있으므로 호스트 대신 localhost를 씁니다.
루트 계정으로 로그인했기 때문에 사용자 이름은 루트입니다.
비밀번호는 mysql에 설정된 비밀번호입니다.
databasename은 연결된 데이터베이스의 이름입니다(테이블 이름이 아닙니다!).
select * from peopele(테이블 이름) 여기서 id(테이블에 생성된 열 이름) = $user_id 및 pw(테이블 열 이름) = $user_pw
11번째 줄과 12번째 줄의 행에도 테이블 열 이름을 입력합니다.
클라이언트가 입력한 값이 데이터베이스에 저장된 값과 일치하면 헤더를 사용하여 메인 페이지로 이동합니다.
일치하지 않으면 로그인 실패 메시지가 표시됩니다.
로그아웃 페이지에서 세션을 종료해야 합니다.
session_destroy()를 사용하여 현재 세션을 파괴합니다.
5번째 줄은 메타 태그를 이용하여 0초 후에 메인 페이지로 이동하는 코드입니다.
php + mysql을 이용하여 로그인 페이지를 구현하는 과정입니다.
아래는 내가 만난 오류와 해결 방법입니다.
@ 메인 페이지와 로그인 페이지는 정상적으로 작동하는데, 임의로 아이디와 비밀번호를 입력했는데도 로그인 확인 페이지로 이동했습니다.
클라이언트에서 보낸 값이 데이터 자체와 일치하는지 확인하지 않았고 오류 메시지가 출력되지 않아 코드가 잘못된 것으로 생각했습니다.
방금 가서 코드를 수정했습니다.
책에 있는 코드를 사용해도 잘 안 되니까 mysqli 연결에 문제가 있는 게 분명한데 무슨 에러 메시지가 뜨는지 찾아봤다.
로그인 확인 페이지에서 이 코드를 입력했을 때도 똑같은 빈 페이지였고, phpinfo.php 파일에 아래 코드를 입력했을 때도 에러 코드가 떴다.
@ 오류 코드는 mysql 데이터베이스에 연결할 때 권한 문제가 있음을 나타냅니다.
1. mysql 사용자 이름 또는 비밀번호가 다른 경우
2. mysql 권한 부족
1번의 경우 루트 계정으로 로그인했기 때문에 입력한 사용자 이름이 맞았고, mysql 비밀번호를 몰랐다면 애초에 데이터베이스를 생성하지 못했을 것이라고 생각한다.
처음에는 문제가 없다고 생각했는데
사례 2
mysql 루트 계정으로 로그인 후
mysql.user에서 사용자, 호스트, authentication_string을 선택하십시오.
코드를 입력하여 사용자 권한을 확인할 수 있습니다.
사용자 권한에는 이상이 없어서 mysql을 삭제하고 다시 깔아볼까 생각중이었습니다.
루트 비밀번호 값이 비어있는 것을 확인했습니다!!
루트 암호가 설정되지 않았지만 여전히 루트 계정에 어떻게 액세스했는지 모르겠습니다.
어쨌든 나는 문제를 발견
mysql_native_password를 ‘새 암호’로 식별한 사용자 ‘root’@’localhost’를 변경합니다.
코드를 사용하여 비밀번호 설정
플러시 권한; 변경된 비밀번호를 적용
변경된 비밀번호로 다시 로그인하고 로그인 확인 페이지에서 mysql 비밀번호를 수정하면 오류가 수정됩니다!