💡 이번에 공부할 내용은 다음과 같습니다.
1. PHP의 개념과 특징
2. PHP 기본 문법과 변수
3. 함수의 정의와 사용
4. 폼 데이터 처리
5. 데이터베이스와의 연동
1. PHP의 개념과 특징
PHP(Hypertext Preprocessor)는 서버 측 스크립트 언어입니다. 즉, 클라이언트(브라우저)가 서버에 요청을 보내면 서버에서 PHP 코드가 실행되고 그 결과를 HTML 형식으로 클라이언트에 반환합니다.
PHP는 웹 개발에 특화된 언어로, HTML과 쉽게 결합될 수 있기 때문에 동적 웹 페이지를 생성하는 데 매우 유용합니다. PHP는 주로 데이터베이스와 연동하여 동적인 콘텐츠를 제공하는 데 사용됩니다.
특징
- 서버 측 스크립트: 서버에서 실행되고 결과만 클라이언트에 전송됩니다.
- 동적 웹 페이지 생성: HTML 내에 PHP 코드를 삽입하여 동적으로 콘텐츠를 생성할 수 있습니다.
- 데이터베이스 연동: MySQL, PostgreSQL 등 다양한 데이터베이스와 쉽게 연동하여 동적인 데이터를 처리할 수 있습니다.
- 무료 및 오픈 소스: PHP는 자유롭게 사용할 수 있으며, 많은 커뮤니티와 자료가 존재합니다.
- 쉽게 배우고 사용할 수 있음: 비교적 간단한 문법으로 웹 개발에 적합합니다.
2. PHP 기본 문법과 변수
PHP 코드 작성 방법
PHP 코드는 <?php와 ?> 태그 사이에 작성합니다. 이 태그 내에서 PHP 코드를 사용할 수 있습니다.
<?php echo "Hello, World!"; ?>
변수 선언
- PHP에서는 변수를 $ 기호로 시작합니다.
- 변수는 타입을 지정할 필요 없이 자동으로 데이터 타입이 결정됩니다.
<?php
$name = "John"; // 문자열 (String) 변수
$age = 30; // 정수 (Integer) 변수
$height = 5.9; // 실수 (Float 또는 Double) 변수
$isActive = true; // 불리언 (Boolean) 변수
?>
주석
PHP에서 주석은 두 가지 방법으로 작성할 수 있습니다.
- 한 줄 주석: // 또는 #
- 여러 줄 주석: /* */
<?php
// 한 줄 주석
# 또 다른 한 줄 주석
/* 여러 줄 주석 여러 줄에 걸쳐 설명을 추가할 수 있습니다. */
?>
예제
<?php
$name = "World";
echo "Hello, $name!";
if ($name == "World") {
echo "The name is World.";
} else {
echo "The name is not World.";
}
for ($i = 0; $i < 5; $i++) {
echo "The number is $i <br />";
}
?>
1. 변수 선언 및 사용
$name = "World";
echo "Hello, $name!";
- $name = "World";:
- PHP에서 변수는 $ 기호로 시작합니다. 변수 $name에 "World"라는 문자열을 할당합니다.
- PHP는 동적 타이핑 언어이므로, 변수의 타입을 미리 선언하지 않고 사용할 수 있습니다. 즉, 숫자, 문자열, 배열 등 다양한 타입의 값을 변수에 할당할 수 있습니다.
- echo "Hello, $name!";:
- echo는 출력 함수로, 화면에 값을 출력합니다. "Hello, $name!" 문자열에서 $name은 변수로, 변수의 값인 "World"가 출력됩니다.
- 이 코드는 "Hello, World!"를 화면에 출력합니다.
2. 조건문 (if-else)
if ($name == "World") {
echo "The name is World.";
} else {
echo "The name is not World.";
}
- if ($name == "World"):
- if는 조건문입니다. $name 변수의 값이 "World"와 같으면 조건이 참(true) 이고, 그 안에 있는 코드 블록이 실행됩니다.
- ==는 비교 연산자로, 두 값이 같은지 비교합니다. 문자열 "World"와 $name의 값이 같으면 조건이 참이 됩니다.
- echo "The name is World.";:
- 조건이 참일 때 출력되는 코드입니다. $name이 "World"이므로 이 코드가 실행되고, "The name is World."가 화면에 출력됩니다.
- else:
- else는 if 조건이 거짓일 경우 실행되는 코드입니다. 만약 $name이 "World"가 아니라면 "The name is not World."가 출력됩니다.
- 이 예시에서는 else가 실행되지 않습니다, 왜냐하면 $name의 값은 "World"이기 때문입니다.
3. 반복문 (for loop)
for ($i = 0; $i < 5; $i++) {
echo "The number is $i <br />";
}
- for ($i = 0; $i < 5; $i++):
- for는 반복문입니다. 여기서 $i는 반복문의 제어 변수로 사용됩니다.
- ($i = 0)는 반복문이 시작될 때 제어 변수를 0으로 초기화합니다.
- ($i < 5)는 반복문이 실행될 조건을 설정합니다. $i가 5 미만일 때 반복이 실행됩니다.
- ($i++)는 반복문이 한 번 실행될 때마다 $i 값을 1씩 증가시킵니다.
- echo "The number is $i <br />";:
- 반복문 내부에서는 $i 값을 출력합니다. <br />는 HTML에서 줄바꿈을 위한 태그입니다.
- 첫 번째 반복에서 $i는 0이고, 두 번째 반복에서 $i는 1, 세 번째 반복에서 $i는 2, 이런 식으로 $i 값이 5가 될 때까지 출력됩니다.
4. 실행 결과
코드를 실행하면 다음과 같은 출력이 화면에 나타납니다:
Hello, World!The name is World.The number is 0
The number is 1
The number is 2
The number is 3
The number is 4
3. 함수의 정의와 사용
함수 정의
PHP에서 함수를 정의할 때 function 키워드를 사용합니다. 함수는 입력값을 받아서 결과를 반환할 수 있습니다.
<?php
function greet($name) {
echo "Hello, $name!";
}
greet("Alice"); // 함수 호출
?>
기본 함수와 매개변수
함수에 기본값을 설정할 수 있으며, 여러 개의 매개변수를 받을 수도 있습니다.
<?php
function greet($name = "Guest") {
echo "Hello, $name!";
}
greet(); // 기본값 "Guest" 사용
greet("Bob"); // "Bob" 사용
?>
반환값이 있는 함수
함수에서 값을 반환하려면 return 키워드를 사용합니다.
<?php function add($a, $b) { return $a + $b; } $sum = add(3, 5); // 3 + 5 = 8 echo $sum; // 8 출력 ?>
예제
<?php
function add($num1, $num2) {
return $num1 + $num2;
}
$result = add(5, 10);
echo "The result is $result";
?>
1. 함수 정의
function add($num1, $num2) {
return $num1 + $num2;
}
- function: PHP에서 함수를 정의할 때 사용하는 키워드입니다.
- add($num1, $num2):
- add는 함수의 이름입니다. 이 함수는 두 개의 인수($num1, $num2)를 받습니다.
- 함수는 두 개의 숫자를 더하는 기능을 합니다.
- return $num1 + $num2;:
- 함수가 두 인수 $num1과 $num2를 더한 결과를 반환합니다.
- return은 함수가 값을 반환하고, 그 값을 호출한 곳으로 돌려주는 역할을 합니다.
2. 함수 호출 및 결과 처리
$result = add(5, 10);
- add(5, 10):
- add 함수를 호출하고, 인수로 5와 10을 전달합니다.
- 함수 내부에서 5 + 10을 계산한 후 그 결과인 15를 반환합니다.
- $result = add(5, 10);:
- 함수 add가 반환한 값을 $result 변수에 저장합니다.
- 따라서 $result의 값은 15가 됩니다.
3. 결과 출력
echo "The result is $result";
- echo: PHP에서 값을 출력할 때 사용하는 명령어입니다.
- $result: 이전에 함수 호출로 계산된 값을 포함한 변수입니다.
- "The result is $result": 이 문자열에서 $result는 변수의 값을 자동으로 출력합니다.
- 결과적으로 "The result is 15"라는 문자열이 출력됩니다.
4. 실행 결과
위 코드를 실행하면 웹 페이지에 다음과 같은 결과가 출력됩니다:
The result is 15
5. 함수의 정의와 사용 설명
함수 정의
- 목적: 함수를 정의하면 반복적으로 사용될 수 있는 코드 블록을 만들 수 있습니다. 이 코드는 한 번만 작성하고, 필요할 때마다 호출하여 재사용할 수 있습니다.
- 구성 요소:
- 함수 이름: 함수를 호출할 때 사용할 이름입니다. 예시에서는 add입니다.
- 매개변수: 함수가 호출될 때 제공되는 입력값을 받는 변수입니다. 예시에서는 $num1과 $num2가 매개변수입니다.
- return: 함수가 처리한 결과를 반환합니다. return은 함수의 실행을 종료하고, 반환값을 호출자에게 전달합니다.
함수 사용
- 호출: 함수를 호출하려면 정의된 함수 이름과 매개변수를 사용합니다. 예시에서는 add(5, 10)과 같이 함수를 호출하고, 두 숫자 5와 10을 인수로 전달합니다.
- 결과 받기: 함수는 반환값을 return 키워드를 통해 호출자에게 돌려줍니다. 이 반환값을 변수에 저장하거나 바로 출력할 수 있습니다.
4. 폼 데이터 처리
PHP는 HTML 폼을 통해 데이터를 받아 처리할 수 있습니다. 폼 데이터는 GET 방식 또는 POST 방식으로 서버에 전달됩니다.
GET 방식
URL에 데이터를 붙여서 전달하는 방식입니다. 보통 데이터가 적을 때 사용됩니다.
<!-- HTML 폼 --> <form action="process.php" method="GET"> <input type="text" name="username" placeholder="Username"> <input type="submit" value="Submit"> </form> <!-- PHP 코드 (process.php) --> <?php $username = $_GET['username']; // GET 방식으로 전달된 데이터 echo "Hello, $username!"; ?>
POST 방식
데이터를 URL에 포함시키지 않고 HTTP 요청의 본문에 담아서 전달합니다. 보안이 더 필요할 때 사용됩니다.
<!-- HTML 폼 --> <form action="process.php" method="POST"> <input type="text" name="username" placeholder="Username"> <input type="submit" value="Submit"> </form> <!-- PHP 코드 (process.php) --> <?php $username = $_POST['username']; // POST 방식으로 전달된 데이터 echo "Hello, $username!"; ?>
예제
<!-- HTML에서 폼을 정의 -->
<form method="post" action="process.php">
Name: <input type="text" name="name" />
<input type="submit" />
</form>
<?php
$name = $_POST['name'];
echo "Hello, $name!";
?>
사용자가 입력한 값을 서버로 보내고, 서버는 그 값을 처리하여 사용자에게 출력하는 방식입니다. 각각의 코드 부분을 자세히 설명드리겠습니다.
1. HTML 폼 정의
<form method="post" action="process.php">
Name: <input type="text" name="name" />
<input type="submit" />
</form>
- <form>: HTML에서 폼을 정의하는 태그입니다. 사용자가 데이터를 입력하고 전송할 수 있는 양식입니다.
- method="post": method 속성은 데이터를 서버로 전송하는 방법을 정의합니다. 여기서 post는 폼 데이터를 HTTP 요청 본문에 담아서 전송하는 방식입니다. get 방식은 URL 쿼리 문자열에 데이터를 포함시키는 방식입니다.
- action="process.php": 폼이 제출되면 process.php 파일로 데이터를 전송하겠다는 의미입니다. 즉, 사용자가 폼을 제출하면 process.php가 데이터를 처리하게 됩니다.
- <input type="text" name="name" />:
- type="text": 텍스트 입력 필드를 생성합니다.
- name="name": 사용자가 입력한 텍스트 데이터를 서버로 전송할 때, 서버에서 이 데이터를 참조할 때 사용할 이름을 지정합니다. 이 이름은 PHP에서 $_POST['name']으로 참조됩니다.
- <input type="submit" />:
- type="submit": 폼을 제출하는 버튼을 만듭니다. 이 버튼을 클릭하면 폼에 입력된 데이터가 process.php로 전송됩니다.
2. PHP 처리 코드 (process.php)
<?php
$name = $_POST['name'];
echo "Hello, $name!";
?>
- $_POST['name']:
- $_POST는 POST 요청으로 전송된 데이터를 포함하는 전역 배열입니다. 이 배열의 키는 HTML 폼에서 지정한 name 속성값을 사용하여 데이터를 참조합니다.
- $_POST['name']은 사용자가 폼에서 입력한 이름을 가져옵니다. 예를 들어, 사용자가 "Alice"를 입력했다면, $_POST['name']은 "Alice"가 됩니다.
- $name = $_POST['name'];:
- 사용자가 입력한 이름을 $name 변수에 저장합니다.
- echo "Hello, $name!";:
- echo는 화면에 출력을 위한 PHP 명령어입니다.
- "Hello, $name!"는 사용자가 입력한 이름을 포함한 인사말을 출력합니다.
- 예를 들어, 사용자가 "Alice"라고 입력했을 경우 echo는 Hello, Alice!를 출력합니다.
3. 폼 데이터 처리 흐름
- 사용자가 HTML 폼에서 이름을 입력합니다.
- 사용자가 "Submit" 버튼을 클릭하여 폼을 제출하면, 폼의 데이터를 POST 방식으로 process.php 파일로 전송됩니다.
- process.php 파일에서 $_POST['name']을 사용하여 사용자가 입력한 값을 받아옵니다.
- PHP는 그 값을 Hello, $name! 형식으로 출력합니다.
4. 예시 실행
1) HTML 폼에서 입력
사용자가 "Alice"라는 이름을 입력한 후 "Submit" 버튼을 클릭합니다.
2) process.php에서 처리
process.php에서 입력한 이름을 처리하여 출력합니다.
출력 결과:
Hello, Alice!
3) 폼을 다시 제출할 때
폼을 다시 제출하면 새로 입력한 값이 화면에 출력됩니다. 예를 들어, "Bob"을 입력하면 "Hello, Bob!"이 출력됩니다.
5. 추가 설명
- 폼 데이터 전송 방식: POST 방식은 데이터를 URL에 노출시키지 않아서 민감한 데이터를 전송할 때 안전합니다. 반면, GET 방식은 URL에 데이터를 포함시키므로 데이터의 크기나 보안에 제약이 있을 수 있습니다.
- 데이터 유효성 검사: 위 코드에서는 사용자가 입력한 값을 바로 출력하고 있지만, 실제로는 입력된 값에 대한 유효성 검사(예: 빈 값, 특수 문자, 길이 제한 등)를 수행하는 것이 중요합니다. 예를 들어, isset($_POST['name'])로 입력이 비어 있지 않은지 확인하거나, htmlspecialchars()로 HTML 특수 문자를 처리할 수 있습니다.
5. 데이터베이스와의 연동
PHP는 MySQL 등 다양한 데이터베이스와 쉽게 연동할 수 있습니다. MySQL은 PHP와 매우 잘 호환되며, mysqli 또는 PDO를 사용하여 데이터베이스와 상호작용합니다.
<?php
$conn = new mysqli("localhost", "username", "password", "database");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br />";
}
} else {
echo "0 results";
}
$conn->close();
?>
1. 데이터베이스 연결
$conn = new mysqli("localhost", "username", "password", "database");
- new mysqli(): MySQL 데이터베이스에 연결하기 위한 객체를 생성합니다.
- 첫 번째 인자: 호스트 이름 (보통 localhost 또는 데이터베이스 서버의 주소).
- 두 번째 인자: 사용자 이름 (MySQL에 로그인할 때 사용하는 사용자 이름).
- 세 번째 인자: 비밀번호 (MySQL 사용자에 대한 비밀번호).
- 네 번째 인자: 데이터베이스 이름 (연결하고자 하는 데이터베이스 이름).
이 코드에서는 localhost, username, password, database를 각각 실제 값으로 대체해야 합니다.
2. 연결 실패 시 처리
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
- connect_error: 연결에 문제가 발생하면 오류 메시지를 반환합니다.
- die(): 오류가 발생하면 연결 실패 메시지와 함께 스크립트 실행을 종료합니다.
3. SQL 쿼리 실행
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);
- $sql: 실행할 SQL 쿼리문을 정의합니다. 이 예시에서는 users 테이블에서 id와 name을 조회하는 쿼리입니다.
- $conn->query($sql): 쿼리를 실행하고 결과를 반환받습니다. 이 결과는 $result에 저장됩니다.
4. 결과 처리
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br />";
}
} else {
echo "0 results";
}
- $result->num_rows: 결과로 반환된 행(row)의 개수를 확인합니다. 0보다 크면 데이터가 존재하는 것입니다.
- $result->fetch_assoc(): 결과셋에서 한 행(row)을 연관 배열(associative array) 형식으로 가져옵니다. 예를 들어, id와 name 컬럼의 값을 배열로 반환합니다.
- $row["id"]: id 컬럼의 값을 가져옵니다.
- $row["name"]: name 컬럼의 값을 가져옵니다.
- echo: 조회된 데이터를 출력합니다. <br />는 줄바꿈을 위해 사용됩니다.
5. 결과가 없을 경우 처리
else {
echo "0 results";
}
6. 데이터베이스 연결 종료
$conn->close();
- $conn->close(): 데이터베이스 연결을 종료합니다. 이는 리소스를 해제하고, 더 이상 연결을 사용할 필요가 없음을 나타냅니다.
전체 흐름 요약
- 데이터베이스에 연결: new mysqli()로 MySQL 데이터베이스에 연결합니다.
- 쿼리 실행: query() 메서드를 사용하여 데이터를 조회하는 SQL 쿼리를 실행합니다.
- 결과 처리:
- num_rows로 결과가 있는지 확인하고,
- fetch_assoc()로 각 행의 데이터를 가져와 출력합니다.
- 연결 종료: close() 메서드로 데이터베이스 연결을 종료합니다.
예시 실행 결과
만약 users 테이블에 아래와 같은 데이터가 있다고 가정해봅시다:
idname
1 | Alice |
2 | Bob |
3 | Charlie |
이 코드를 실행하면 다음과 같은 결과가 출력됩니다:
id: 1 - Name: Alice id: 2 - Name: Bob id: 3 - Name: Charlie
만약 데이터가 없으면 "0 results"가 출력됩니다.
'KnockOn > 2주차 TIL' 카테고리의 다른 글
[2주차 TIL] KnockOn Bootcamp - Mysql (0) | 2024.12.13 |
---|---|
[2주차 TIL] KnockOn Bootcamp - Apache (1) | 2024.12.13 |
[2주차 TIL] KnockOn Bootcamp - Javascript (0) | 2024.12.12 |
[2주차 TIL] KnockOn Bootcamp - HTML (0) | 2024.12.12 |