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

C-log

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

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

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

4:Bee 2023. 10. 16. 12:05
728x90

์ด์ œ ๋งˆ์ง€๋ง‰ ํŒŒํŠธ์ด๋‹ค. topic๊ณผ author๋ฅผ ์—ฐ๊ฒฐํ–ˆ๊ณ  author์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ˆ˜์ •๊ณผ ์‚ญ์ œ๋ฅผ ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ์ด์ „์— topic ๋ถ€๋ถ„์—์„œ ์ˆ˜์ •๊ณผ ์‚ญ์ œ์™€ ๋ณ„๋ฐ˜ ๋‹ค๋ฅธ ๊ฒƒ์ด ์—†๋‹ค. ์•„๋ž˜ 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>
      <td></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>
      <td><a href="author.php?id=<?= $filtered['id'] ?>">update</a></td>
      <td>
        <form action="process_delete_author.php" method="POST" onsubmit="if(!confirm('sure?')){return false;}">
          <input type="hidden" name="id" value="<?= $filtered['id'] ?>">
          <!-- {<?= $filtered['id'] ?>} ์—ฌ๊ธฐ์„œ ๊ด„ํ˜ธ๋ฅผ ๋„ฃ๊ณ  ์•ˆ๋†“๊ณ ์— ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ณ  ์—†๊ณ ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค. -->
          <input type="submit" value="delete">
        </form>
      </td>
    </tr>

  <?php
      }
  ?>
  </tr>
  </table>

  <?php
  $escaped = array(
    'name' => '',
    'profile' => ''
  );

  $label_submit = 'Create author'; //ํ•ด๋‹น id๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ๊ตฌ๋ฌธ์œผ๋กœ
  $form_author = 'process_create_author.php'; //ํ•ด๋‹น id๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ๊ตฌ๋ฌธ์œผ๋กœ
  $form_id = '';
  if (isset($_GET['id'])) {
    $filtered_id = mysqli_real_escape_string($conn, $_GET['id']);
    settype($filtered_id, 'integer');
    $sql = "SELECT * FROM author WHERE id = {$filtered_id}";
    $result = mysqli_query($conn, $sql);
    $row = mysqli_fetch_array($result);
    $escaped['name'] = htmlspecialchars($row['name']);
    $escaped['profile'] = htmlspecialchars($row['profile']);
    $label_submit = 'Update author';
    $form_author = 'process_update_author.php';
    $form_id = '<input type="hidden" name="id" value="' . $_GET['id'] . '">';
  }
  ?>

  <form action="<?= $form_author ?>" method='POST'>
    <!-- ๋™์ ์œผ๋กœ ๊ฐ’๋“ค์ด ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ • -->
    <?= $form_id ?>
    <p><input type="text" name="name" placeholder="name" value="<?= $escaped['name'] ?>"></p>
    <p><textarea name="profile" placeholder="profile"><?= $escaped['profile'] ?></textarea></p>
    <p><input type="submit" value="<?= $label_submit ?>"></p>
  </form>
</body>

</html>

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์œ ์˜ ๊นŠ๊ฒŒ ๋ด์•ผํ•  ๋ถ€๋ถ„์€ $label_submit๋ณ€์ˆ˜์™€ $form_author๋ณ€์ˆ˜์ด๋‹ค. ์ด ๋ณ€์ˆ˜๋“ค์ด if๋ฌธ ์กฐ๊ฑด์— ํ•ฉ๋‹นํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” create์—ญํ• ๋กœ์จ ์กด์žฌํ•˜์ง€๋งŒ if๋ฌธ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•œ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด update์˜ ์—ญํ• ๋กœ ์ „ํ™˜์ด ๋œ๋‹ค. ๊ฐ ๋ณ€์ˆ˜๋“ค์ด ์–ด๋””์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  ๊ทธ๊ฒƒ๋“ค์ด ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”์ง€ ํ™•์ธํ•ด ๋ด์•ผํ•œ๋‹ค.

delete์˜ ์‚ญ์ œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” tdํƒœ๊ทธ์˜ form์„ ๋ณด๋ฉด hidden ์†์„ฑ์„ ๊ฐ€์ง„ inputํƒœ๊ทธ๊ฐ€ value ๊ฐ’์œผ๋กœ <?=$filtered['id'?> ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‚ด๊ฐ€ ํ–ˆ๋˜ ์‹ค์ˆ˜๋Š” ํ•ด๋‹น value ์†์„ฑ์— {}์ด ํ‘œ๊ธฐ๋ฅผ ํ•จ๊ป˜ ์ ์–ด ๋‚ด๋ฉด์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ์—ˆ๋‹ค. ์ด๋Ÿฐ ์‹ค์ˆ˜๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜๋Š”๋ฐ ์žˆ์–ด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์ง€๋ง์ž. ์ด์ œ process_update_author.php์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

<?php
mysqli_report(MYSQLI_REPORT_OFF);
$conn = mysqli_connect(
  'localhost',
  'root',
  '******',
  'phpmysql'
);
settype($_POST['id'], 'integer');
$filtered = array(

  'id' => mysqli_real_escape_string($conn, $_POST['id']),
  'name' => mysqli_real_escape_string($conn, $_POST['name']),
  'profile' => mysqli_real_escape_string($conn, $_POST['profile'])
);

$sql = "
  UPDATE author
    SET
      name = '{$filtered['name']}',
      profile = '{$filtered['profile']}'
    WHERE
      id = {$filtered['id']}
";
$result = mysqli_query($conn, $sql);
if ($result === false) {
  echo '์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด์ฃผ์„ธ์š”.';
  error_log(mysqli_error($conn));
} else {
  header('Location: author.php?id=' . $filtered['id']);
}

process_update_author.php์˜ ์ฝ”๋“œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด์ „์— ๋ดค๋˜ process_update.php์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค ๋‹ค๋งŒ $sql๋ณ€์ˆ˜์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์„ ํƒํ•œ TABLE์ด author๊ฐ€ ๋งž๋Š”์ง€ ์ž˜ํ™•์ธ ํ•ด์•ผํ•œ๋‹ค. ์ด์ „์— ๋ฐฐ์› ๋˜ ์ฝ”๋“œ์™€ ํฌ๊ฒŒ ๋‹ค๋ฅธ๊ฒŒ ์—†์–ด์„œ process_delete_author.php์ฝ”๋“œ๋กœ ๋„˜์–ด๊ฐ€์ž. ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

<?php
mysqli_report(MYSQLI_REPORT_OFF);
$conn = mysqli_connect(
  'localhost',
  'root',
  '******',
  'phpmysql'
);
//settype์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” $_POST์˜ id๊ฐ’์„ ์ •์ˆ˜๋กœ ๊ณ ์ •ํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜์ด๋‹ค.
settype($_POST['id'], 'integer');
// ์—ฌ๊ธฐ array์˜ ์—ญํ• ์—์„œ id ๋ฐฐ์—ด์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ์—ฌ๊ธฐ์„œ filtered์˜ ์—ญํ• ์€?
$filtered = array(
  'id' => mysqli_real_escape_string($conn, $_POST['id']),
);

$sql = "
DELETE FROM author WHERE id = {$filtered['id']}
";
// die($sql);
$result = mysqli_query($conn, $sql);
if ($result === false) {
  echo '์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด์ฃผ์„ธ์š”.';
  error_log(mysqli_error($conn));
} else {
  header('Location: author.php');
}

$sql๋ฌธ์„ ๋ณด๋ฉด DELETE ๋ช…๋ น๋ฌธ์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ delete๋ฅผ ํ•  ๋•Œ ์šฐ๋ฆฌ๊ฐ€ POST๋ฅผ ํ†ตํ•ด์„œ ๋ฐ›์˜จ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์ž˜ ์ „๋‹ฌ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„  die($spl)๋ฌธ์„ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. 

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

728x90
Comments