사용자가 보낸 요청값을 처리하는 곳(웹프로그래밍)으로 아파치가 보내줌
(ex. php(싱글스레드 처리:대량처리 어려움, 무료) / asp(윈도우 용)/ jsp(유료)/ node.js(자바스크립을 서버로))
php : 인터프리터 / 컴파일 안함
c 언어를 기준으로 만듦
php에서 변수를 지칭하는 문자 : $ (유일)
$_ : 원래부터 php가 정해둔 변수들(super전역변수) ex) $_GET, $_POST
php에선 배열 종류
1. 인덱스 배열
2. 연관배열(map방식) : [] 안에 input에 name 쓴다
_GET['msg'];
서버 주소 뒤에 요청값을 보내는 것, url 뒤에 붙여서 보냄, 보안취약, but 속도 빠름
<!DOCTYPE html>
<html>
<head>
<title>Http Request</title>
<meta charset="utf-8">
</head>
<body>
<h2>This is http Request Test page</h2>
<fieldset>
<legend>GET METHOD TEST</legend>
<!-- HTML에서 서버의 다른 문서를 실행하는 요소 - HTTP를 요청하는... -->
<form action="./getText.php" method="GET">
<!-- php 문서에 보낼 데이터 입력받는 요소들 -->
<p>
<label for="title">title:</label>
<input type="text" name="title">
</p>
<p>
<label for="msg">message:</label>
<input type="text" name="msg">
</p>
<p>
<!-- form요소 안에서 서버로 데이터 전송하는 버튼 -->
<!-- 이 버튼을 클릭하면 form요소에 action 속성에 지정한 문서가 실행됨 -->
<!-- file:///D:/AndroidGiraffe/Web/02HttpRequest/getText.php?title=aaa&msg=hello -->
<input type="submit">
</p>
</form>
</fieldset>
</body>
</html>
<?php
//0.php문서가 응답하는 데이터의 형식지정, 한글깨짐(인코딩) 방지 설정
header('Content-Type:text/html; charset=utf-8');
//1.php에서는 $가 변수를 지칭하는 문자 - 자동 문자 변환
//사용자가 get방식으로 보낸 값들을 $_GET[](값들이니까 배열로)이라는 수퍼전역 변수에 저장함
// ($_ : 원래부터 php가 정해둔 변수들 : super전역변수)
//$title=$_GET[0]; //인덱스 배열
$title=$_GET['title'];
$msg=$_GET['msg'];
//php에선 배열 종류
//1. 인덱스 배열
//2. 연관배열(map방식) = [] 안에 input name 이름 쓴다
//잘 받았는지 확인해 보기 위해 응답 : echo
//php 에서 . 은 문자열 결합 연산자
echo "제목 : " . $title ."<br>";
echo "메세지 : " . $msg;
?>
사용자의 요청값을 body안에 숨겨서 보내는 것
<!DOCTYPE html>
<html>
<head>
<title>Http Request</title>
<meta charset="utf-8">
</head>
<body>
<fieldset>
<legend>POST METHOD TEST</legend>
<!-- file:///D:/AndroidGiraffe/Web/02HttpRequest/postText.php -->
<form action="./postText.php" method="post">
<p>
<label for="id">아이디 : </label>
<input type="text" name="id">
</p>
<p>
<label for="passwd">비밀번호 : </label>
<input type="password" name="pwd">
</p>
<p>
<input type="submit">
<input type="reset">
</p>
</form>
</fieldset>
</body>
</html>
<?php
header('Content-Type:text/html; charset=utf-8');
//사용자가 post방법으로 보낸 데이터들은 $_POST[]이라는 배열에 저장되어 있음
$id= $_POST['id'];
$password=$_POST['pwd'];
//잘 받았는지 확인하기 위해 사용자 [web brower]에게 응답 Request
echo "아이디 : $id <br>"; //php ""안에서는 $가 변수로 인식됨
echo "비밀번호 : $password";
?>
<!DOCTYPE html>
<html>
<head>
<title>Http Request</title>
<meta charset="utf-8">
</head>
<body>
<fieldset>
<legend>Image File Upload</legend>
<!-- 파일은 바이트 덩어리임 기본 enctype으로 보내면 head 정보(meta)를 주지않아 이미지 인지 모른다-->
<!-- form의 기본 enctype은 enctype="application/x-www-form-urlencoded"-->
<!-- 파일(이미지)를 보내려면 enctype="multipart/form-data"를 써줘야함 -->
<form action="./uploadFile.php" method="post" enctype="multipart/form-data">
<!-- 사용자가 파일을 선택할 수 있도록 하는 입력 요소 -->
<input type="file" accept=".jpg" name="img">
<br><br>
<input type="submit">
</form>
</fieldset>
</body>
</html>
<?php
header('Content-Type:text/html; charset=utf-8');
//사용자가 File을 보내면 실제 파일데이터들은 임시저장소(tmp)에 임시로 저장되어
//이 php 문서에는 File의 정보만 전달됨
//그 정보들은 $_FILES[] 에 저장됨
//file을 보내면 파일은 정보를 가진 헤더와 바이트 덩어리를 가진 바디가 서버에 도착한다
//서버에 도착하면 무서운 바디정보는 임시저장소(tmp)에 넣어두고 헤더 정보만 읽는다
//헤더에 에러없이 잘 왔으면 영구저장소에 move 시켜야함
$file = $_FILES['img'];
//$file 변수도 배열임 즉 $file배열 변수 안에 전송된 파일에 대한 여러정보(헤더 정보)가 있음
// $file[''] : []안에 이름은 정해진 이름임
$srcName = $file['name']; //원본 파일명
$type= $file['type']; //파일의 타입
$size= $file['size']; //파일 크기
$tmpName= $file['tmp_name']; //파일 데이터가 저장된 임시 저장소의 파일 주소(위치)
$error= $file['error']; //에러 정보
//제대로 왔는지 확인해보기 위해 출력(응답)
echo "$srcName <br>";
echo "$type <br>";
echo "$size <br>";
echo "$tmpName <br>";
echo "$error <br>"; //0 : 에러 없음
//정보가 잘 확인 되었다면 분명 서버에 이미지파일이 전송된 것
//하지만 이 파일데이터는 임시저장소에 저장되어 있어서 이 php 가 끝나면 삭제된다
//온전히 업로드를 하려면 임시저장소에 있는 파일[$tmpName]을
//영구히 사라지지 않는 본인폴더(html폴더 안) 쪽으로 이동해야함
//이 php문서가 있는 폴더에 [upload]라는 폴더를 새로 만들어서
//이 폴더 안으로 이동시키기
$dstName="./upload/".date('YmdHis').$srcName; //이름을 오늘날짜 (Y = yyyy / H = 24기준)
//파일질라는 폴더 자동으로 못 만듦 올리기 전에 미리 만들어야함
//임시저장소($tmpName)에 있는 파일을 원하는 위치($dstName)로 이동
$result = move_uploaded_file($tmpName, $dstName); //(~에서/ 어디로)
if($result) {
echo "success upload";
} else {
echo "fail upload";
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Http Request</title>
<meta charset="utf-8">
</head>
<body>
<fieldset>
<legend>POST data whit File</legend>
<form action="./postDataFile.php" method="post" enctype="multipart/form-data">
<p>
<label for="name">name : </label>
<input type="text" name="name">
</p>
<p>
<label for="msg">message : </label>
<input type="text" name="msg">
</p>
<p>
<label for="img">첨부 이미지 : </label>
<input type="file" accept="Image/*" name="img">
</p>
<input type="submit" value="작성완료">
<input type="reset" value="취소">
</form>
</fieldset>
</body>
</html>
<?php
header('Content-Type:text/html; charset=utf-8');
//사용자로부터 전달된 데이터와 파일정보를 받기
//글씨와 파일 따로따로 받아야함
$name = $_POST['name'];
$message=$_POST['msg'];
$file = $_FILES['img'];
//파일의 세부 정보 5개 중에서 가용할 것들만
$srcName = $file['name'];
$tmpName = $file['tmp_name'];
//업로드된 파일이 영구적으로 저장될 위치
$dstName="./upload/".date('YmdHis').$srcName;
$moveResult = move_uploaded_file($tmpName, $dstName);
if($moveResult) echo "success";
else echo "fail";
echo "<br>";
?>
$db = mysqli_connect(DB서버주소, DB접속 아이디, DB접속 비번, DB명);
mysqli_query($db, "set names utf8");
$sql= "INSERT INTO board(name, msg, file, date) VALUES ('$name', '$message', '$dstName', '$now')";
if($result) { //c언어는 0이 아님 다 참임~ (== 뭐냐 라고 안물어도 됨)
//총 레코드(한 줄 : row) 수
$rowNum = mysqli_num_rows($result);
// $rowNum = mysqli_num_calums();
for($i=0; $i<$rowNum; $i++){
$row=mysqli_fetch_array($result , MYSQLI_ASSOC);
//한줄을 배열로 읽어오는 것, 연관배열로 받기 설정 : ($result , MYSQLI_ASSOC);
//MYSQLI_NUM : 디폴트 , 인덱스 배열
$no = $row['no']; //배열의 칸번호 대신 식별자 사용 [연관 배열] DB의 컬럼명과 동일해야함
$name= $row['name'];
$message= $row['msg'];
$file= $row['file'];
$date= $row['date'];
echo "<h2> $no $name</h2>";
echo "<p> $message </p>";
echo "<p> $date </p>";
if($file != null) echo "<img src='$file' whith='50%' alt='$file'>";
echo "<br>=================================================<br><br>";
}
} else echo "connect fail";
mysqli_close($db);
<?php
header('Content-Type:text/html; charset=utf-8');
//사용자로부터 전달된 데이터와 파일정보를 받기
//글씨와 파일 따로따로 받아야함
$name = $_POST['name'];
$message=$_POST['msg'];
$file = $_FILES['img'];
//파일의 세부 정보 5개 중에서 가용할 것들만
$srcName = $file['name'];
$tmpName = $file['tmp_name'];
//업로드된 파일이 영구적으로 저장될 위치
$dstName="./upload/".date('YmdHis').$srcName;
$moveResult = move_uploaded_file($tmpName, $dstName);
if($moveResult) echo "success";
else echo "fail";
echo "<br>";
//테이블에 저장할 값
//저장할 날짜와 시간
$now = date('Y-m-d H:i:s');
//전송된 데이터들 ($name, $message, $ dstName, $now)을 DB에 저장
//dothome 서버에는 이미 DBMS(MySQL)이 설치되어 있음
//MySQL이라는 DBMS를 이용하여 데이터를 저장하기
//1. MySQL DB에 접속하기
$db = mysqli_connect('localhost', DB접속 아이디, DB접속 비번, DB명);
// 파라미터 4개 : DB서버주소, DB접속 아이디, DB접속 비번, DB명
//닷홈은 php와 db가 같은 컴퓨터 안에 있음 그래서 DB서버주소 : localhost
// $db : 연결된 db를 제어하는 객체
//2. mySQL DB는 한글이 깨짐 [한글도 저장하도록 쿼리 요청]
mysqli_query($db, "set names utf8"); //정해진 키워드임!! (~통해서, ~를)
//3. 원하는 쿼리 작업 수행
// DB에 저장하고자 하는 데이터들($name, $message, $ dstName, $now)을
// 'board' 라는 이름의 테이블(표)에 삽입(insert)하는 명령어(SQL)
$sql= "INSERT INTO board(name, msg, file, date) VALUES ('$name', '$message', '$dstName', '$now')";
$result = mysqli_query($db,$sql); //리턴값이 있음
if($result) echo "insert success";
else echo "insert fail";
//4. DB연결 종료
mysqli_close($db);
?>
<?php
header('Content-Type:text/html; charset=utf-8');
//1. MYSQL 접속
$db = mysqli_connect('localhost', DB접속 아이디, DB접속 비번, DB명);
//2. 인코딩
mysqli_query($db, 'set names utf8');
//3. board 테이블의 테이블 읽어오기 (select)
$sql = "SELECT * FROM board";
$result = mysqli_query($db, $sql); //쿼리문에 따른 검색'결과표' 리턴해줌
//원본 테이블을 건드리지 않음 결과표셋으로 내가 요청한 결과를 가져오고 그걸 읽음
if($result) { //c언어는 0이 아님 다 참임~ (== 뭐냐 라고 안물어도 됨)
//총 레코드(한 줄 : row) 수
$rowNum = mysqli_num_rows($result);
// $rowNum = mysqli_num_calums();
for($i=0; $i<$rowNum; $i++){
$row=mysqli_fetch_array($result , MYSQLI_ASSOC);
//한줄을 배열로 읽어오는 것, 연관배열로 받기 설정 : ($result , MYSQLI_ASSOC);
//MYSQLI_NUM : 디폴트 , 인덱스 배열
$no = $row['no']; //배열의 칸번호 대신 식별자 사용 [연관 배열] DB의 컬럼명과 동일해야함
$name= $row['name'];
$message= $row['msg'];
$file= $row['file'];
$date= $row['date'];
echo "<h2> $no $name</h2>";
echo "<p> $message </p>";
echo "<p> $date </p>";
if($file != null) echo "<img src='$file' whith='50%' alt='$file'>";
echo "<br>=================================================<br><br>";
}
} else echo "connect fail";
//4. 쿼리 닫기
mysqli_close($db);
?>