반응형
Web Development · PHP if
PHP if 조건문 —
로그인 검증으로 배우는 && 연산자
두 조건이 모두 참일 때만 실행되는 가장 흔한 패턴
시작 오늘 분석할 코드
PHP의 가장 기본적인 if 조건문이다. 사용자가 입력한 아이디·비밀번호와 DB에 저장된 값이 둘 다 같은가를 검사하는, 로그인의 최소 단위 코드다.
<?php $username = "user"; // 사용자가 입력한 아이디 $password = "pass"; // 사용자가 입력한 비밀번호 $db_data["username"] = "user"; // DB에 저장된 아이디 (연관배열) $db_data["password"] = "pass"; // DB에 저장된 비밀번호 if($db_data["username"] == $username && $db_data["password"] == $password){ // 회원 페이지 표시 print "회원 페이지입니다."; } ?>
실제 출력 미리보기
회원 페이지입니다.
→ 두 변수 모두 DB 값과 일치 → if 조건 참 → 본문 실행. 아이디나 비밀번호 중 하나라도 다르면 아무것도 출력되지 않는다.
용어 용어 정리
if"만약 ~라면" 조건문 시작 키워드
==값이 같은가? (비교 연산자)
=대입 연산자 (값을 저장)
&&AND — 두 조건 모두 참이어야 참
||OR — 둘 중 하나만 참이면 참
연관배열"키 → 값" 형태의 배열 ($arr["키"])
참(true)조건이 만족됐다는 의미
{ }if가 참일 때 실행할 영역(블록)
1 if 조건문의 기본 구조
if ( 조건 ) { 조건이 참일 때 실행할 코드 }
괄호 안의 식이 참(true)이면 중괄호 안 코드가 실행되고, 거짓이면 통째로 건너뛴다. 이 코드에서는 "DB의 username과 입력 username이 같고, DB의 password와 입력 password도 같다"가 조건이다.
if는 의사결정의 가장 작은 단위 — "이거 맞으면 저거 해, 아니면 그냥 넘어가."
2
= vs == — 가장 흔한 함정PHP 입문에서 가장 자주 일어나는 버그는 ==를 쓸 자리에 =를 쓰는 것이다. 둘은 모양은 비슷하지만 완전히 다르다.
= (대입)
$a = 10;"$a에 10을 넣어라"
오른쪽 값을 왼쪽 변수에 저장
== (비교)
$a == 10"$a가 10과 같은가?"
참(true) 또는 거짓(false) 반환
※
if($a = 10)은 문법 오류가 아니다 — "$a에 10을 넣고, 그 결과(10)는 참이니까 항상 실행"이 된다. 디버깅이 매우 어려워진다. 반드시 ==를 써야 한다.3
&& (AND) — 두 조건을 동시에&&는 두 조건이 모두 참이어야 전체가 참이 된다. 로그인은 "아이디 맞고 + 비밀번호도 맞고"가 함께 성립해야 하므로 &&가 적절하다.
| 조건1 | 조건2 | && 결과 | 의미 |
|---|---|---|---|
| 참 | 참 | 참 | 본문 실행 |
| 참 | 거짓 | 거짓 | 건너뜀 |
| 거짓 | 참 | 거짓 | 건너뜀 |
| 거짓 | 거짓 | 거짓 | 건너뜀 |
// 본 코드의 조건 분해 $db_data["username"] == $username // "user" == "user" → 참 && $db_data["password"] == $password // "pass" == "pass" → 참 ↓ 참 && 참 = 참 → 본문 실행
※ && vs ||
- && (AND) — "둘 다" 만족해야 함 (엄격)
- || (OR) — "둘 중 하나만" 만족하면 됨 (느슨)
- 로그인 = AND, "관리자 또는 본인" = OR 식으로 의미 따라 선택
반응형
4 연관 배열 —
$db_data["username"]$db_data["username"] = "user"; 같은 형태는 연관 배열(associative array)이다. 일반 배열이 0, 1, 2... 숫자로 칸을 구분한다면, 연관 배열은 "키"라는 이름표로 칸을 구분한다.
// 일반 배열 (인덱스 = 숫자) $arr[0] = "user"; $arr[1] = "pass"; // 연관 배열 (인덱스 = 문자열 키) $db_data["username"] = "user"; $db_data["password"] = "pass"; // PHP 5.4+ 단축 문법 $db_data = ["username" => "user", "password" => "pass"];
실제 DB에서 데이터를 가져오면 보통 연관 배열로 받는다. $row["username"]처럼 컬럼 이름으로 접근하는 것이 일반적이다.
5 중괄호의 유무
if 본문이 한 줄이면 중괄호를 생략할 수 있다. 하지만 실무에서는 거의 항상 중괄호를 쓴다 — 가독성과 버그 예방 때문이다.
중괄호 없음 (한 줄만)
if($a == 10)
print "ten";바로 다음 한 줄만 실행
중괄호 있음 (권장)
if($a == 10) {
print "ten";
print "ok";
}여러 줄 가능 + 명확
※ 중괄호 없는 if 뒤에 들여쓰기로만 줄을 늘리면 두 번째 줄은 if와 무관하게 항상 실행된다 → 매우 위험한 버그.
6 자주 하는 실수
| 실수 | 증상 | 해결 |
|---|---|---|
if($a = 10) |
항상 참 — 조건 무력화 | 비교는 반드시 == |
& 1개 사용 (&는 비트 연산자) |
이상한 결과 | 논리 AND는 && (2개) |
| 중괄호 없이 여러 줄 작성 | 두 번째 줄이 항상 실행됨 | 본문이 1줄 이상이면 중괄호 사용 |
| 연관 배열 키에 따옴표 누락 | Notice: Undefined constant | $arr["key"]처럼 따옴표 필수 |
| "비밀번호 평문 저장" | 보안 사고 위험 | 실무에선 password_hash()로 해시 저장 필수 |
※ 본 예제는 학습용이다. 실제 로그인은 ① DB 조회 ②
password_hash()로 해시 비교 ③ 세션 처리 ④ Prepared Statement로 SQL Injection 방어가 모두 필요하다.7 로그인 검증 흐름
[ 사용자 입력 ] $username = "user" $password = "pass" ↓ [ DB 데이터 ] $db_data["username"] = "user" $db_data["password"] = "pass" ↓ [ if 검사 ] username 같음? → 참 password 같음? → 참 && → 참 ↓ [ 본문 실행 ] "회원 페이지입니다." 출력
핵심 한 줄 요약
if(조건){...}조건이 참일 때만 중괄호 안 실행
==값이 같은가 비교 (=는 대입과 다름)
&&AND — 두 조건 모두 참이어야 참
||OR — 하나만 참이어도 참
$arr["키"]연관 배열 — 문자열 키로 칸 접근
중괄호실무는 거의 항상 사용 (1줄이라도)
실무 보안password_hash + Prepared Statement 필수
반응형
'php' 카테고리의 다른 글
| PHP 중첩 if-else — type 분기로 배우는 다중 분기 완전 정리 (0) | 2026.06.12 |
|---|---|
| PHP if-else — 로그인 성공/실패 분기 처리 완전 정리 (0) | 2026.06.12 |
| PHP foreach 반복문 — 배열 순회 전용 완전 정리 (0) | 2026.06.12 |
| PHP for 반복문 — 초기값·조건·증가식 3박자 완전 정리 (0) | 2026.06.12 |
| PHP do-while 반복문 — 최소 1회 실행 보장 완전 정리 (0) | 2026.06.12 |
왕진 블로그

댓글