๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

๐ŸฌMySQL&๐Ÿ˜PHP : ๋Œ๊ณ ๋ž˜์™€ ์ฝ”๋ผ๋ฆฌ์˜ ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ๊ณผ ์ƒ์„ฑ ๋ณธ๋ฌธ

Server/๐ŸฌMySQL&๐Ÿ˜PHP

๐ŸฌMySQL&๐Ÿ˜PHP : ๋Œ๊ณ ๋ž˜์™€ ์ฝ”๋ผ๋ฆฌ์˜ ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ๊ณผ ์ƒ์„ฑ

4:Bee 2023. 10. 14. 00:16
728x90

์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด ๋†“์€ topic TABLE๊ณผ author TABLE์„ ์„œ๋กœ ์—ฐ๊ฒฐํ•ด ์ค„ ๊ฒƒ์ด๋‹ค. ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

author TABLE์„ ์ƒ์„ฑํ•  ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น MySQL ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

MariaDB [phpmysql]> CREATE TABLE author(
    -> id INT(11) NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(30) NOT NUL,
    -> profile VARCHAR(200) NULL,
    -> PRIMARY KEY(id)
    -> );

์ด์ œ topic TABLE์—์„œ ํ•ด๋‹น author_id๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” COLUM๋ฅผ ์ถ”๊ฐ€ ํ•ด์ค˜์•ผํ•œ๋‹ค.

MariaDB [phpmysql]> ALTER TABLE topic ADD COLUMN author_id INT(11);
MariaDB [phpmysql]> SELECT * FROM author;
+----+------------+-------------------+
| id | name       | profile           |
+----+------------+-------------------+
|  1 | egoing     | developer         |
|  2 | duru       | DBA               |
|  3 | taeho      | Data scientist    |
|  4 | leezche    | leezche is ...    |
|  5 | graphittie | graphittie is ... |
+----+------------+-------------------+
5 rows in set (0.001 sec)

์ด๋ ‡๊ฒŒ author TABLE ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค. ์ด์ œ ์ด ๋‘˜์„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฃจ๊ธฐ ์œ„ํ•ด ํŠน์ • sql๋ช…๋ น์–ด๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค. index.phpํŒŒ์ผ์„ ์‚ดํŽด๋ณด๋ฉด $sql ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊ฟ”์ค˜์•ผํ•œ๋‹ค. ์•„๋ž˜ ๋ณ‘๋™๋œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž. 

<?php
...
$update_link = '';
$delete_link = '';
$author = '';
if (isset($_GET['id'])) {
  $filtered_id = mysqli_real_escape_string($conn, $_GET['id']);
  $sql = "SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id WHERE topic.id={$filtered_id}";
  $result = mysqli_query($conn, $sql);
  $row = mysqli_fetch_array($result);
  $article['title'] = htmlspecialchars($row['title']);
  $article['description'] = htmlspecialchars($row['description']);
  $article['name'] = htmlspecialchars($row['name']);

  $update_link = '<a href="update.php?id=' . $_GET['id'] . '">update</a>';
  $delete_link = '
  <form action = "process_delete.php" method="post">
  <input type="hidden" name="id" value="' . $_GET['id'] . '">
  <input type="submit" value ="delete">
  </form>
  ';
  $author = "<p>by" . $article['name'] . "</p>";
}
?>

$sql ๋ณ€์ˆ˜๋ฅผ ์‚ดํŽด๋ณด๋ฉด LEFT JOIN์ด๋ผ๋Š” sql๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ topic๊ณผ author TABLE์„ ํ•ฉ์ณค๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฐ๋™ํ–ˆ์œผ๋‹ˆ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ์›น๋ธŒ๋ผ์šฐ์ €์˜ ํ˜•ํƒœ์™€ ๊ตฌ์ƒ๋„ ๋ฐ”๊ปด์•ผํ•œ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋‚˜๋จธ์ง€ HTML์ฝ”๋“œ์ด๋‹ค.

index.php

<!DOCTYPE html>
<html lang="eng">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WEB</title>
</head>

<body>
  <h1><a href="index.php">WEB</a></h1>
  <ol>
    <?= $list ?>
  </ol>

  <a href="create.php">create</a>
  <?= $update_link ?>
  <?= $delete_link ?>
  <h2><?= $article['title'] ?></h2>
  <?= $article['description'] ?>
  <?= $author ?>
</body>

</html>

๋ˆ„๊ฐ€ ์ž‘์„ฑํ–ˆ๋Š”์ง€ ํ‘œ๊ธฐ ํ•˜๊ธฐ ์œ„ํ•ด์„œ HTML์ฝ”๋“œ์—์„œ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ œ์ž‘์„ ํ•˜์˜€๋‹ค.  ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ์„ ๋งŒ๋“ค์–ด ๋‚ด๊ธฐ ์ „์— create๋ถ€๋ถ„์„ ์ž ์‹œ ๋ณต์Šตํ•˜์ž. 


๋”๋ณด๊ธฐ

์•ž์‹œ๊ฐ„์— ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฃจ์—ˆ๋˜ create๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด์ž. create๋ผ๋Š” aํƒœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  create.php์—์„œ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ƒ์„ฑํ•ด ์ค„ ๊ฒƒ์ด๋‹ค. create.php์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

<?php
mysqli_report(MYSQLI_REPORT_OFF);
$conn = mysqli_connect(
  'localhost',
  'root',
  '*****',
  'phpmysql'
);

$sql = "SELECT * FROM topic";
$result = mysqli_query($conn, $sql);
$list = "";

while ($row = mysqli_fetch_array($result)) {
  $escaped_title = htmlspecialchars($row['title']);
  $list = $list . "<li><a href=\"index.php?id={$row['id']}\">{$escaped_title}</a></li>";
}

?>

<!DOCTYPE html>
<html lang="eng">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WEB</title>
</head>

<body>
  <h1><a href="index.php">WEB</a></h1>
  <ol>
    <?= $list ?>
  </ol>
  <form action="process_create.php" method="POST">
    <p><input type="text" name="title" placeholder="title"></p>
    <p><textarea name="description" placeholder="description"></textarea></p>
    <p><input type="submit"></p>
  </form>
</body>

</html>

ํ•ด๋‹น create aํƒœ๊ทธ๋ฅผ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น create.php๋กœ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ์šด ๋ฆฌ์‹œํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ƒ์„ฑํ•˜๊ฒŒ๋˜๋ฉด process_create.php๋กœ ๋„˜์–ด๊ฐ€์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ๊ณ„์† ์ž‘์—…ํ•ด์™”๋˜ ๋ฐฉ์‹์ด๋ผ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋‹ค. ์˜คํžˆ๋ ค ํ™•์ธํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ $sql๊ฐ’์ด ์–ด๋–ป๊ฒŒ ์–ด๋””์— ๋“ค์–ด๊ฐ€ ์žˆ๊ณ  ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋ˆˆ์—ฌ๊ฒจ์„œ ๋ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์•„๋ž˜๋Š” process_create.php์ฝ”๋“œ์ด๋‹ค.

<?php
mysqli_report(MYSQLI_REPORT_OFF);
$conn = mysqli_connect(
  'localhost',
  'root',
  '*****',
  'phpmysql'
);

$filtered = array(
  'title' => mysqli_real_escape_string($conn, $_POST['title']),
  'description' => mysqli_real_escape_string($conn, $_POST['description'])
);

$sql = "
  INSERT INTO topic(title, description, created)
  VALUES(
    '{$filtered['title']}',
    '{$filtered['description']}',
    NOW()
  )
";
$result = mysqli_query($conn, $sql);
if ($result === false) {
  echo '์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด์ฃผ์„ธ์š”.';
  error_log(mysqli_error($conn));
} else {
  echo '์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.<a href="index.php">๋Œ์•„๊ฐ€๊ธฐ</a>';
}

์—ญ์‹œ๋‚˜ ์•ž์„œ ๋งํ–ˆ๋“ฏ $sql๋ณ€์ˆ˜์— ์–ด๋–ค ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋Š”์ง€ ๋ด์•ผํ•œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ MySQL์—์„œ TABLE ๊ฐ’์„ ์‚ฝ์ž…ํ•  ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ ๋ช…๋ น์–ด๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค. ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ arrayํ˜•ํƒœ์˜ $filtered์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•ด์„œ ์œ ๋™์ ์œผ๋กœ ๊ฐ’์„ MySQL server๋กœ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ์•ž์„œ ๋ฐฐ์› ๋˜ '์ƒ์„ฑ'ํŒŒํŠธ์ด์ง€๋งŒ ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ author๋ผ๋Š” TABLE์„ ์—ฐ๊ฒฐํ•ด์„œ author ํ…Œ์ด๋ธ”๋กœ ๋„˜์•„๊ฐ€์„œ ์ž‘์„ฑ์ž์˜ ๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์‹œ๋„ํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.


์šฐ์„  author๋ผ๋Š” ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•˜๊ณ  ๊ทธ ํƒœ๊ทธ์•ˆ์— ๋“ค์–ด๊ฐ€๋ฉด ํ•ด๋‹น author์˜ ํ‘œ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ๋ชฉ์ ์ด๋‹ค. ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

<!DOCTYPE html>
<html lang="eng">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WEB</title>
</head>

<body>
  <h1><a href="index.php">WEB</a></h1>
  <a href="author.php">author</a>
  <ol>
    <?= $list ?>
  </ol>

  <p><a href="create.php">create</a></p>
  <?= $update_link ?>
  <?= $delete_link ?>
  <h2><?= $article['title'] ?></h2>
  <?= $article['description'] ?>
  <?= $author ?>
</body>

</html>

์šฐ๋ฆฌ๊ฐ€ index.php์—์„œ ๋งŒ๋“ค์—ˆ๋˜ ์ฝ”๋“œ์—์„œ aํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ author.php๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” aํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ทธ๋งŒ์ด๋‹ค. ์•„์ง ๊ฐˆ๊ธธ์ด ๋จธ๋‹ˆ ๋นจ๋ฆฌ author.php๋ฅผ ์‚ดํŽด๋ณด์ž.  

<?php
mysqli_report(MYSQLI_REPORT_OFF);
$conn = mysqli_connect(
  'localhost',
  'root',
  '*****',
  'phpmysql'
);
?>

<!DOCTYPE html>
<html lang="eng">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WEB</title>
</head>

<body>
  <h1><a href="index.php">WEB</a></h1>
  <p><a href="index.php">topic</a></p>
  <table border="1">
    <tr>
      <td>id</td>
      <td>name</td>
      <td>profile</td>
      <?php
      $sql = "SELECT * FROM author";
      $result = mysqli_query($conn, $sql);
      while ($row = mysqli_fetch_array($result)) {
        $filtered = array(
          'id' => htmlspecialchars($row['id']),
          'name' => htmlspecialchars($row['name']),
          'profile' => htmlspecialchars($row['profile']),
        )
      ?>

    <tr>
      <td><?= $filtered['id'] ?></td>
      <td><?= $filtered['name'] ?></td>
      <td><?= $filtered['profile'] ?></td>
    </tr>
  <?php
      }
  ?>
  </tr>
  </table>
  <form action="process_create_author.php" method='POST'>
    <p><input type="text" name="name" placeholder="name"></p>
    <p><textarea name="profile" placeholder="profile"></textarea></p>
    <p><input type="submit" value="Create author"></p>
  </form>
</body>

</html>

์šฐ๋ฆฌ๊ฐ€ author๋Š” ํ‘œ๋กœ ์ง์ ‘ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ๊ธฐ๋•Œ๋ฌธ์— tableํƒœ๊ทธ์™€ trํƒœ๋ฅผ ์ด์šฉํ•ด์„œ ์›น๋ธŒ๋ผ์šฐ์ €๋กœ ์ž‘์„ฑ์ž๋“ค์˜ ํ‘œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด ๊ณต๊ฐ„์€ author์˜ createํŽ˜์ด์ง€๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ํ†ตํ•ฉํ™” ํ•œ ๊ฒƒ์ด๋‹ค. ์ž‘์„ฑ์ž๋ฅผ createํ–ˆ์„ ๋•Œ๋Š” porcess_create_author.php๋กœ ๋„˜์–ด๊ฐ€๋ฉฐ ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

<?php
mysqli_report(MYSQLI_REPORT_OFF);
$conn = mysqli_connect(
  'localhost',
  'root',
  '******',
  'phpmysql'
);

$filtered = array(
  'name' => mysqli_real_escape_string($conn, $_POST['name']),
  'profile' => mysqli_real_escape_string($conn, $_POST['profile']),
);
$sql = "
  INSERT INTO author(name, profile)
  VALUES(
    '{$filtered['name']}',
    '{$filtered['profile']}'
  )
";

$result = mysqli_query($conn, $sql);
if ($result === false) {
  echo '์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด์ฃผ์„ธ์š”.';
  echo mysqli_error($conn);
  error_log(mysqli_error($conn));
} else {
  // echo '์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.<a href="author.php">๋Œ์•„๊ฐ€๊ธฐ</a>';
  header('Location: author.php'); //๋ฆฌ๋‹ค์ด๋ ‰์…˜ ๋ฐฉ๋ฒ•
}

ํ•ด๋‹น php๋Š” ๋‹ค๋ฅธ process.phpํŒŒ์ผ๋“ค๊ณผ ๋‹ค๋ฅผ๊ฒŒ ์—†๋‹ค. ์—ญ์‹œ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ์œ ์˜ ๊นŠ๊ฒŒ ๋ด์•ผํ•œ๋Š” ๊ฒƒ์€ $sql๋ณ€์ˆ˜์ด๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ author์˜ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•œ ๋ถ€๋ถ„์ด๋‹ค. ์ด์ œ create๋ถ€๋ถ„์—์„œ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์–ด๋–ค ์ž‘์„ฑ์ž๊ฐ€ ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š” ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” selectํƒœ๊ทธ๋ฅผ ์ด์šฉํ•œ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ ์ž‘์„ฑํ•ด๋ณด์ž. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

<?php
mysqli_report(MYSQLI_REPORT_OFF);
$conn = mysqli_connect(
  'localhost',
  'root',
  '******',
  'phpmysql'
);

$sql = "SELECT * FROM topic";
$result = mysqli_query($conn, $sql);
$list = "";

while ($row = mysqli_fetch_array($result)) {
  $escaped_title = htmlspecialchars($row['title']);
  $list = $list . "<li><a href=\"index.php?id={$row['id']}\">{$escaped_title}</a></li>";
}

$sql = "SELECT * FROM author";
$result = mysqli_query($conn, $sql);
$select_form = '<select name="author_id">';
while ($row = mysqli_fetch_array($result)) { //
  $select_form .= '<option value="' . $row['id'] . '">' . $row['name'] . '</option>';
} //์—ฌ๊ธฐ์„œ $select_form๋ณ€์ˆ˜๋Š” value๊ฐ’์„ process_create.php๋กœ ์ „๋‹ฌ ๋ฐ›์•„์•ผํ•œ๋‹ค. ๋งŒ์•ฝ value์˜ ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  POST๋กœ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด row['name']๊ฐ’์ด process_create.php๋กœ ์ „๋‹ฌ์ด ๋˜๊ณ  ๊ทธ ๊ณณ์—์„  'author_id' => mysqli_real_escape_string($conn, $_POST['author_id'])๋ผ๋Š” array ๋ถ€๋ถ„์—์„œ $filtered['author_id']๋กœ string๋ฌธ์ด ์ „๋‹ฌ๋˜๋ฉฐ ์ดํ›„ sql์—์„œ ํ•ด๋‹น author_id์˜ colum๊ฐ’(INT)์™€ type์ด ๋งž์ง€ ์•Š์•„ ์ €์žฅํ•จ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
//.= ๋Š” ์ด์ „์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋”ํ•ด์„œ ์ƒˆ๋กœ ๋Œ€์ž…ํ•œ๋Š” ๊ฐ’์„ ์ด์–ด๋ถ™ํžˆ๋ผ๋Š” ๋ฌธ๋ฒ•์ด๋‹ค.
$select_form .= '</select>';
?>

<!DOCTYPE html>
<html lang="eng">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WEB</title>
</head>

<body>
  <h1><a href="index.php">WEB</a></h1>
  <ol>
    <?= $list ?>
  </ol>
  <form action="process_create.php" method="POST">
    <p><input type="text" name="title" placeholder="title"></p>
    <p><textarea name="description" placeholder="description"></textarea></p>
    <?= $select_form ?>
    <p><input type="submit"></p>
  </form>
</body>

</html>

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ด์•ผํ•  ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

<php

...

$sql = "SELECT * FROM author";
$result = mysqli_query($conn, $sql);
$select_form = '<select name="author_id">';
while ($row = mysqli_fetch_array($result)) { //
  $select_form .= '<option value="' . $row['id'] . '">' . $row['name'] . '</option>';
} //์—ฌ๊ธฐ์„œ $select_form๋ณ€์ˆ˜๋Š” value๊ฐ’์„ process_create.php๋กœ ์ „๋‹ฌ ๋ฐ›์•„์•ผํ•œ๋‹ค. ๋งŒ์•ฝ value์˜ ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  POST๋กœ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด row['name']๊ฐ’์ด process_create.php๋กœ ์ „๋‹ฌ์ด ๋˜๊ณ  ๊ทธ ๊ณณ์—์„  'author_id' => mysqli_real_escape_string($conn, $_POST['author_id'])๋ผ๋Š” array ๋ถ€๋ถ„์—์„œ $filtered['author_id']๋กœ string๋ฌธ์ด ์ „๋‹ฌ๋˜๋ฉฐ ์ดํ›„ sql์—์„œ ํ•ด๋‹น author_id์˜ colum๊ฐ’(INT)์™€ type์ด ๋งž์ง€ ์•Š์•„ ์ €์žฅํ•จ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
//.= ๋Š” ์ด์ „์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋”ํ•ด์„œ ์ƒˆ๋กœ ๋Œ€์ž…ํ•œ๋Š” ๊ฐ’์„ ์ด์–ด๋ถ™ํžˆ๋ผ๋Š” ๋ฌธ๋ฒ•์ด๋‹ค.
$select_form .= '</select>';
?>

$sql๋ณ€์ˆ˜๋Š” author TABLE์„ ์„ ํƒํ–ˆ๊ณ  ํ•ด๋‹น TABLE์˜ ํ˜•์‹์„ selectํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค. ๋” ๋‚˜์•„๊ฐ€์„œ selectํƒœ๊ทธ์˜ option๋“ค์˜ ์†์„ฑ์„ ์œ ์‹ฌํžˆ ๋ณด๋ฉด value๊ฐ€ $row['id']๋ฅผ ์ง€์ •ํ•˜๊ณ  ์žˆ๊ณ  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น select๋ฅผ ์„ ํƒํ•˜๊ณ  ์ƒ์„ฑ์„ ํ•˜๊ฒŒ ๋˜๋ฉด  formํƒœ๊ทธ์—์„œ POST๋กœ process_create.php์— ์ „๋‹ฌํ•˜๊ณ  ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋ณ€๊ฒฝ๋˜๋Š” ์ฝ”๋“œ๋Š” $sql๋ฌธ์ด๋‹ˆ ์ด์ „ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์˜ process_create.php์™€ ๋น„๊ตํ•˜๋ฉด์„œ ์‚ดํŽด๋ณด์ž.

๋ณ€๊ฒฝํ•˜๊ธฐ ์ „ process_create.php๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

$filtered = array(
  'title' => mysqli_real_escape_string($conn, $_POST['title']),
  'description' => mysqli_real_escape_string($conn, $_POST['description'])
);

$sql = "
  INSERT INTO topic(title, description, created)
  VALUES(
    '{$filtered['title']}',
    '{$filtered['description']}',
    NOW()
  )
";

๋ณ€๊ฒฝ๋œ process_create.php๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

$filtered = array(
  'title' => mysqli_real_escape_string($conn, $_POST['title']),
  'description' => mysqli_real_escape_string($conn, $_POST['description']),
  'author_id' => mysqli_real_escape_string($conn, $_POST['author_id'])
);
$sql = "
  INSERT INTO topic(title, description, created, author_id)
  VALUES(
    '{$filtered['title']}',
    '{$filtered['description']}',
    NOW(),
    {$filtered['author_id']}
  )
";

์šฐ๋ฆฌ๊ฐ€ ์ด์ „ index.php ์—์„œ formํƒœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ POST๋ฐ›์€ ๋ฐ์ดํ„ฐ ๊ฐ’์ธ  author์˜ row['id']๊ฐ€ author_id๋กœ ์ „๋‹ฌ๋˜์–ด $sql ๋ณ€์ˆ˜์˜ INSERT๊ฐ€ ๋˜๋ฉด์„œ MySQL monitor๋กœ ๊ฐ’์ด ์ž˜ ์ „๋‹ฌ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. (์›น์ƒ์—์„œ by ~id๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ์œผ๋กœ๋„ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.) ์•„๋ž˜ ์ฝ”๋“œ๋Š” MySQL monitor๋กœ ํ™•์ธํ•œ ์ฝ”๋“œ์ด๋‹ค.

MariaDB [phpmysql]> SELECT * FROM topic
    -> ;
+----+-------------+--------------------+---------------------+-----------+
| id | title       | description        | created             | author_id |
+----+-------------+--------------------+---------------------+-----------+
|  8 | MySQL       | MySQL is ...       | 2023-10-06 13:54:47 |         1 |
|  9 | Oracle      | Oracle is ...      | 2023-10-06 13:55:01 |         1 |
| 10 | SQL Servera | SQL Servera is ... | 2023-10-06 13:55:20 |         2 |
| 22 | test        | test is ..         | 2023-10-15 19:32:43 |         1 |
+----+-------------+--------------------+---------------------+-----------+
4 rows in set (0.001 sec)

 

์˜ค๋Š˜ ํฌ์ŠคํŠธ๋Š” ์ด์ „ ํฌ์ŠคํŠธ์— ๋น„ํ•ด์„œ ๋งŽ์ด ํ˜ผ๋™ ์Šค๋Ÿฌ์šธ ๊ฒƒ์ด๋‹ค. ์‹ค์ œ๋กœ ์ž‘์„ฑ์ž๋„ ์–ด๋–ป๊ฒŒ ํฌ์ŠคํŠธ ํ•ด์•ผ ๋…์ž๋“ค์ด ์‰ฝ๊ฒŒ ์ดํ•ดํ• ์ง€ ๊ณ ๋ฏผํ•˜๋ฉฐ ์ž‘์„ฑํ•ด ๋ณด์•˜๋‹ค. ์šฐ์„  ์šฐ๋ฆฌ๊ฐ€ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ณด์•„์•ผํ•˜๋Š” ๊ฒƒ์€ $sql๋ณ€์ˆ˜๊ฐ€ ๊ฐ ์ŠคํŠธ๋ฆฝํŠธ ๋งˆ๋‹ค ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€์— ๋”ฐ๋Ÿฟ ๋ณ€๋™์ด ๋˜๊ณ  ์ด๊ฒƒ๋“ค์„ MySQL server ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”์ง€๋ฅผ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ณด์•„์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด์— ๋”ํ•ด์„œ formํƒœ๊ทธ์— ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ ๊ฐ’๋“ค์ด ์ •๋ฆฌ๊ฐ€ ๋˜๊ณ  if๋ฌธ์„ ํ†ตํ•ด์„œ ํ™œ์„ฑํ™”๊ฐ€ ๋˜๋Š”์ง€ ํƒœ๊ทธ๋“ค์˜ ์†์„ฑ๊ฐ’๋“ค์„ ๋ฉด๋ฐ€ํ•˜๊ฒŒ ๋ด์•ผ ํ•œ๋‹ค. ๊ฒฐ๊ณผ ์ ์œผ๋กœ php์—์„œ MySQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋‚ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋‹ค์–‘ํ•œ MySQL๋ฌธ์˜ ๋ช…๋ น์–ด๋ฅผ ์•„๋Š๋ƒ์— ๋”ฐ๋ผ์„œ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์™€ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋‹ค์–‘ํ•œ ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์กฐ๊ธˆ ๋‚œ์žกํ•˜๊ณ  ๋‚œํ•ดํ•ด ๋ณด์—ฌ๋„ ์ฒœ์ฒœํžˆ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž˜ ์ฝ์–ด๋ณด๊ณ  ๋ณ€ํ™”๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์† $sql๋ณ€์ˆ˜๋ฅผ ์ „๊ณผ ํ›„๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ํ•™์Šตํ•˜๋ฉด ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋‹ค. ์ด ๋‹ค์Œ ํฌ์ŠคํŠธ๋Š” authorํŽ˜์ด์ง€์—์„œ ์ˆ˜์ •์„ ํ•˜๋Š” ํฌ์ŠคํŒ…์„ ์ง„ํ–‰ ํ•  ๊ฒƒ์ด๋‹ค. ์ด์ „ ํฌ์ŠคํŠธ๋“ค๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅผ ๊ฒƒ์ด ์—†์„ ๊ฒƒ์ด๋‹ค. ๋‚ด๊ฐ€ ๋งํ–ˆ๋˜ ์ ๋“ค์„ ์œ ์˜ํ•˜๋ฉด์„œ ๋”ฐ๋ผ์˜ค๋ฉด ํฌ๊ฒŒ ์–ด๋ ค์›€์ด ์—†์„ ๊ฒƒ์ด๋‹ค.

728x90
Comments