- 필요한 페이지
📄lib. php (라이브러리용 php)
📑list.php (작성한 글이 저장 완료되었을 때 보이는 페이지)
📃write.php (글을 작성할 때 보이는 페이지)
📃writePost.php (글을 다 쓰고 '저장' 했을 때 데이터를 받아서 mysql로 보내줄 페이지)
📃view.php (게시판의 글들을 눌러서 쓴 글을 들어가 보는 페이지)

: 게시판 데이터가 저장될 공간이 필요함.

(new!) 필요한 데이터 칼럼 수 만큼 만들어준다.
라이브러리의 경우 이전과 동일하게 복.붙 하여 사용하면 된다.
: action 태그의 링크(writePost.php)로 데이터를 POST 방식으로 보낸다.

(이 간단한 모양을 짜는데도 아직 좀 서투르다,, html/css 기초를 밟아주겠다,,,,😇💢)
<form action="writePost.php" method="POST">
✓ method="post" 라고 소문자로 썼더니 데이터가 안넘어감.
대문자로 쓰면 넘어간다.
: POST 방식으로 데이터를 받는 경우 url 에 명시되지 않는다.
: insert into
: mysql 에 넣자!
print_r($_POST);
//print_r($_GET); get 방식일 경우

배열의 형태로 잘 넘어간 걸 확인하면 데이터 넘기기는 정상임.
배열로 데이터를 확인할 때 잘 알아볼 수 있게
데이터는 항상 이름을 잘 매겨놓도록해야함.
그렇다면 이제 , 넘어온 데이터를 writePost 에서 mysql 로 넘겨줘야한다.
$name = $_POST['name'];
$memo = $_POST['memo'];
$subject = $_POST['subject'];
우선 데이터별로, 각 변수에다가 넘어온 데이터를 담아준다.
📌php 해킹 방지
$name = mysqli_real_escape_string($name);
//subject, memo 도 동일하게 해준다.
그리고 해킹 방지로 위의 코딩을 추가로 작성해준다고 한다.
일종의 2차 가공이랄까, 해주는게 좋다고 한다.
$regedate = date('Y-m-d H:i:s');
$ip= $_SERVER['REMOTE_ADDR']; 📌
$query = "insert into sing_board(name, memo, subject, regedate, ip)
values('$name','$memo','$subject','$regedate','$ip')";
echo $query;
📌PHP 에서 사용자 ip 를 알려주는 함수다.
[REMOTE_ADDR] 이라고 치면 안되고, 안에 '' 필수.
데이터는 mysql문으로 새로 만든 sing_board 데이터 테이블에 넣어준다.
echo 로 출력해보면,

이렇게 나온다. (mysql에 잘 넘어가는 군! 🙄)
확인했으니 이제... 진짜 넣어주면 끝.
mysqli_query($connect, $query); // . . . - > 📂
연결은 기초적인거니까 기억하기 !

쏘옥 - 잘 들어갔구나 (뿌듯)
또 복습 ! 동일하게, 저장버튼을 누른 뒤 다시 원래페이지로 돌아가도록 스크립트 작성해준다.
<script>
location.href ="list.php";
</script>
: my sql 에 저장된 데이터를 가지고와서 나타내기 (select from)
$query = "select * from sing_board order by idx desc";📌
$result = mysqli_query($connect, $query);
while($data= mysqli_fetch_array($result)){📌
?>
<tr>
<th><?=$data['idx']?></th>
<th><?=$data['name']?></th>
<th><?=$data['subject']?></th>
<th><?= $data['regedate']?></th>
</tr>
<?php
}
?>

+) substr() 함수
: 문자열의 길이를 줄여주는 함수
substr( 문자, 줄일 문자의 시작 idx, 마지막 idx)
<th><?=substr($data['regedate'],0,10)?></th>

이렇게 문자열이 줄어든다.
이제 제목을 누르면 페이지가 view 로 이동하도록 한다.
<th>
<a href="view.php?idx=<?=$data['idx']?>"><?=$data['subject']?></a>
</th>
"view.php" 로 링크를 걸어준다음 GET 방식을 사용하여
( '?idx =' )내가 클릭한 제목의 idx 를 보낸다.
⭐️GET 방식은 url 전달!
: 제목을 누르면 글을 들어가서 보게하는 페이지.
: list.php 에서 보낸 idx 데이터를 받아서 보여주는 페이지.
: 추가 응용 기능 - 삭제 / 수정
:Get 방식으로 데이터가 보내졌으면 Get 으로 받는다!
콩콩팥팥
<?php
include "lib.php";
$idx= $_GET['idx'];
$idx = mysqli_real_escape_string($connect, $idx);
$query = "select * from sing_board where idx ='$idx' ";
$result = mysqli_query($connect, $query);
$data = mysqli_fetch_array($result);
// print_r($data);
?>
배열로 나눠진 데이터를 배열형태로 잘 넣어주기만 하면

idx에 따른 게시글이 잘 보인다. ㅠ ㅅ ㅠ b
+) 내용 줄바꿈 반영하는 법 (php)
<tr>
<th height=300>내용</th>
<td>
<?=nl2br($data['memo'])?>
</td>
</tr>
<?php
include "lib.php";
$idx = $_GET['idx'];
$query = "delete from sing_board where idx='$idx' ";
mysqli_query($connect,$query);
?>
<script>
location.href = "list.php";
</script>
삭제의 경우 저번시간에 사용한 걸 그대로 가져와서 사용했다.
간단하다.
:수정 기능의 경우 write 페이지를 응용하여 만들어주면 된다.
:기존에 write.php 에서 썼던 데이터를 들고와서 보여줘야하기 때문이다.

<form action="writePost.php" method="POST">
<table border="1" width="800" cellpadding=5>
<tr>
<th>이름</th>
<td>
<input type="text" name="name" style="width:100%;" value="<?=$data['name']?>" >
</td>
</tr>
<tr>
<th>제목</th>
<td>
<input type="text" name="subject" style="width: 100%;" value="<?=$data['subject']?>">
</td>
</tr>
<tr>
<th>내용</th>
<td>
<textarea name="memo" style="width:100%; height:300px" ><?=$data['memo']?></textarea>
</td>
</tr>
<tr>
왜냐하면 글쓰기 데이터를 관리하는 writePost.php 가 무조건 insert 만을 하고 있기 때문이다.
(수정이 안되고 새글로 만들어짐.)
➡️ 따라서 , WritePost.php 에서 이 두가지를 구분해줘야한다.
key : 새 글을 쓸 때는 idx 가 넘어가지 않고, 수정할 때는 수정된 기존 인덱스의 정보가 넘어간다.
기존의 write .php 는 새 글만을 다뤘기 때문에 idx 가 따로 필요없었으나
수정을 하기 위해서는 기존 인덱스의 정보를 받아야 한다.
우선 idx 값을 보내기 위해 write.php 에
<input type="hidden" name="idx" value="<?=$idx?>">
이걸 추가해준다. 화면에 표시되지 않지만 idx를 보내준다.
$name = $_POST['name'];
$memo = $_POST['memo'];
$subject = $_POST['subject'];
$idx = $_POST['idx'];
$name = mysqli_real_escape_string($connect, $name);
$subject = mysqli_real_escape_string($connect, $subject);
$memo = mysqli_real_escape_string($connect, $memo); //해킹 방지
$idx = mysqli_real_escape_string($connect, $idx);
데이터를 보내면 뭐다? 받아야한다..
writePost 에서는 이렇게 인덱스 정보를 추가로 받게 해준다. 그리고,
if($idx){//수정
$query="update sing_board set name='$name',
subject='$subject',📌
memo='$memo'
where idx='$idx' ";
mysqli_query($connect, $query);
}else{
$regedate = date('Y-m-d H:i:s');
$ip= $_SERVER['REMOTE_ADDR'];
$query = "insert into sing_board(name, memo, subject, regedate, ip)
values('$name','$memo','$subject','$regedate','$ip')";
mysqli_query($connect, $query);
}
인덱스가 있다면 수정글로 기존글을 업데이트만 해준다. 라는 조건문을 사용하여
만들어주면 된다.
그 외의 것은 다 새 글로 간주!
