복습

2020. 4. 13. 02:29생활코딩/생활코딩웹

개요

지금까지 한 것들을 순차적으로 설명해봅니다.

복습

<?php
    $conn = mysqli_connect('localhost', 'root', 'jh1245');
    mysqli_select_db($conn, 'mytester');
 ?>

처음 위의 코드를 사용하여 라이브러리를 지정하여 데이터베이스를 연동을 준비하여 줍니다.

index.php
<?php
require_once('conn.php');
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <link rel="stylesheet" href="style.css" media="screen" title="no title" charset="utf-8">
    </head>
    <body id="body">
        <header>
            <h1><a href="index.php">생활코딩 JavaScript</a></h1>
        </header>
        <nav>
            <ol>
<?php
$sql = "SELECT * FROM `topic2`";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_assoc($result)){
    echo '<li><a href="index.php?id='.$row['id'].'">'.htmlspecialchars($row['title']).'</a></li>';
}
?>
            </ol>
        </nav>
        <div id="content">
            <article>
    <?php
    if(empty($_GET['id'])){
        echo "Welcome";
    } else {
        $id = mysqli_real_escape_string($conn, $_GET['id']);
        $sql = "SELECT topic2.id, topic2.title, topic2.description, user.name, topic2.created FROM topic2 LEFT JOIN user ON topic2.author = user.id WHERE topic2.id=".$id;
        $result = mysqli_query($conn, $sql);
        $row = mysqli_fetch_assoc($result);
    ?>
        <h2><?=htmlspecialchars($row['title'])?></h2>
        <div><?=htmlspecialchars($row['created'])?> | <?=htmlspecialchars($row['name'])?></div>
        <div><?=htmlspecialchars($row['description'])?></div>
    <?php
    }
    ?>

            </article>
            <input type="button" name="name" value="White" onclick="document.getElementById('body').className=''">
            <input type="button" name="name" value="Black" onclick="document.getElementById('body').className='black'">
            <a href="write.php">쓰기</a>
        </div>
    </body>
</html>

처음에는 index,php를 알아보겠습니다.

맨 처음 코드인 require_once('conn.php');을 입력하여 라이브러리에 있던 값을 가져와 데이터베이스를 연결해줍니다.

다음 html코드를 입력하고 head안에 css를 연결해줍니다. 다음 body를 입력하고 그 안에 아이디를 지정하여 css에 값을 가져올 수 있게 합니다.

다음 header을 사용하여 제목을 생활코딩으로 입력하여줍니다 그리고 제목을 누를시 링크를 통해 index, php로 넘어오게 됩니다.

다음은 nav를 사용하여 메뉴창을 만듭니다. 그 안에 ol태그를 사용해 리스트를 만들며 그 정보를 select문을 사용하여 topic2에 있는 정보를 데이터 베이스에서 가져옵니다

다음은 article을 사용하여 본문을 넣을 곳을 만들어주고 안에 넣을 값은 topic2과 user을 조인하여 보여줍니다.

그리고 mysqli_real_escape_string를 사용하면 주소창에 쿼리문을 입력 시 적용이 되는데 그것을 사전에 차단하여 줍니다.

마지막으로 버튼을 만들어주고 그것을 css 연결하면 index.php는 완성이 됩니다.

<?php
require_once('conn.php');
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <link rel="stylesheet" href="style.css" media="screen" title="no title" charset="utf-8">
    </head>
    <body id="body">
        <header>
            <h1><a href="index.php">생활코딩 JavaScript</a></h1>
        </header>
        <nav>
            <ol>
<?php
$sql = "SELECT * FROM `topic2`";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_assoc($result)){
    echo '<li><a href="index.php?id='.$row['id'].'">'.htmlspecialchars($row['title']).'</a></li>';
}
?>
            </ol>
        </nav>
        <div id="content">
            <article>
                <form class="" action="process.php" method="post">
                    <p>
                        <label for="title">제목 :</label>
                        <input id="title" type="text" name="title">
                    </p>
                    <p>
                        <label for="author">저자 : </label>
                        <input id="author" type="text" name="author" value="">
                    </p>
                    <p>
                        <label for="description">본문 :</label>
                        <textarea id="description" name="description" rows="8" cols="40"></textarea>
                    </p>
                    <p>
                        <input type="submit"  value="전송">
                    </p>
                </form>
            </article>
            <input type="button" name="name" value="White" onclick="document.getElementById('body').className=''">
            <input type="button" name="name" value="Black" onclick="document.getElementById('body').className='black'">
            <a href="write.php">쓰기</a>
        </div>
    </body>
</html>

다음은 write.php입니다 큰 틀은 index, php와 같습니다 다음으로 form에 process.php를 지정하여 주고 여기서 추가된 것은 제목, 저자에 textbox를 넣고 본문에는 textarea 이름은 각각 지정하여줍니다 그리고 전송은 버튼으로 지정하여주고 누를 시 process.php로 넘어가게 됩니다.

<?php
require_once('conn.php');
$author = mysqli_real_escape_string($conn, $_POST['author']);
$sql = "SELECT * FROM `user` WHERE `name` = '{$author}'";
$result = mysqli_query($conn, $sql);
if($result->num_rows > 0){
    $row = mysqli_fetch_assoc($result);
    $user_id = $row['id'];
} else {
    $sql = "INSERT INTO user (id, name) VALUES(NULL, '{$author}');";
    $result = mysqli_query($conn, $sql);
    $user_id = mysqli_insert_id($conn);
}
$title = mysqli_real_escape_string($conn, $_POST['title']);
$description = mysqli_real_escape_string($conn, $_POST['description']);
$sql = "INSERT INTO
                `topic2`
                (`id`, `title`, `description`, `author`, `created`)
                VALUES (NULL, '{$title}', '{$description}', '{$user_id}', now());";
mysqli_query($conn, $sql);
header('Location: index.php');
 ?>

다음 파일인 process.php입니다 여기서도 라이브러리인 conn, php에 데이터베이스 값을 가져오며 write.php에서 넘어온 값을 데이터화 시켜 데이터베이스에 insert를 시켜줍니다. 그 후 다시 index.php로 넘어가 메뉴와 내용이 생기게 됩니다

body{
    margin:0;
}
body.black{
    background-color: black;
    color:white;
}
header{
    border-bottom: 1px solid grey;
    padding-left: 30px;
}
nav {
    border-right:1px solid grey;
    width:200px;
    height:700px;
    float:left;
}
nav ol {
    margin:0;
    padding:20px;
    list-style: none;
}
#content {
    padding-left:20px;
    float:left;
    width:500px;
}

마지막으로 css입니다 각각 body에는 여백을 뜻하는 margin을 0으로 지정해주고 body안에 버튼인 black를 누를 시 배경이 검정 글자가 흰색으로 바뀌게 하고 header에는 밑에 생기는 선을 1px 만 큰 회색으로 지정해줍니다.

그리고 왼쪽 간의 간격을 30px로 지정합니다,

다음은 메뉴를 담당하고 있는 nav에 ol 즉 리스트 부분에 모양을 없애고 여백을 0px 간격을 20px으로 지정해줍니다,

마지막으로 contnent의 간격을 왼쪽으로부터 20px 왼쪽으로 배치하고 크기를 500px로 지정해줍니다.

이렇게 하면 지금까지 한 모든 것이 완성이 됩니다.

 

참고한 수업 링크

https://opentutorials.org/course/1688/10231

https://opentutorials.org/course/1688/10249

'생활코딩 > 생활코딩웹' 카테고리의 다른 글

성장  (0) 2020.04.11
호스팅과 클라우드  (0) 2020.04.11
인터넷  (0) 2020.04.11
라이브러리 1  (0) 2020.04.11
보안  (0) 2020.04.10