Ngu ngơ học làm web (78) - Bài tập xử lý tập tin 1

Tiếp theo của: Ngu ngơ học làm web (77) - Xử lý tập tin 2
------

Phần 78.       Bài tập xử lý tập tin 1


Đây là clip số 81:


Liệt kê cấu trúc tập tin (đến cấp 2),

  $data = scandir('.');
  $result = '<ul>';
  foreach ($data as $key => $value) {
    if ($value != '.' && $value != '..') {
      if (is_dir($value)) {
        $result .= '<li>'. 'D: ' . $value . '<ul>';
        $childData = scandir('./'.$value);
        foreach ($childData as $key1 => $value1) {
          if ($value1 != '.' && $value1 != '..') {
            if (is_dir("./$value/$value1")) {
              $result .= '<li>'. 'D: ' . $value1 . '</li>';
            } else {
              $result .= '<li>' . 'F: ' . $value1 . '</li>';     
            }
          }
        }
        $result .= '</ul></li>';
      } else {
        $result .= '<li>' . 'F: ' . $value . '</li>';
      }
    }
  }
  $result .= '</ul>';
  echo $result;

Đây là clip số 82:


Bài tập liên quan đến xử lý tập tin.

Xử lý cho việc bấm nút cancel để quay lại trang chủ: tới thời điểm này, để chuyển từ trang web này sang trang web khác có hai cách: một là sử dụng thuộc tính action của form, hai là sử dụng thẻ <a>. Ở phần này sẽ học thêm một cách mới là sử dụng JavaScript. Ví dụ,

[HTML – trang add.php]

<input type="button" value="Hủy" id="btnHuy">

[jQuery]

$(document).ready(function() {
      $('#btnHuy').click(function() {
        window.location = 'index.php';
      });
    });

Đây là clip số 83:


Các bước thực hiện:

1. Tạo giao diện để nhập tiêu đề và mô tả của tập tin (add.php)

2. Viết đoạn mã kiểm tra dữ liệu đầu vào

3. Nếu dữ liệu nhập vào hợp lệ, thực hiện tạo tập tin với tên ngẫu nhiên, tạo dữ liệu và ghi dữ liệu vào tập tin.

Lưu lại đoạn mã để tham khảo:

[add.php]

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <link rel="stylesheet" href="style.css">
  <script src="js/jquery.js"></script>
  <script>
    $(document).ready(function() {
      $('#btnHuy').click(function() {
        window.location = 'index.php';
      });
    });
  </script>
</head>
<body>
<?php
  require_once 'functions.php';
  $flag = false;
  $errorTitle = '';
  $errorDescription = '';
  $title = '';
  $description = '';
  if (isset($_POST['title']) && isset($_POST['description'])) {
    $title = $_POST['title'];
    $description = $_POST['description'];
    // kiểm tra dữ liệu nhập vào
    if (checkEmpty($title)) {
      $errorTitle = '<p class="error">Tiêu đề không được để trống</p>';
    }
    if (checkLength($title, 5, 100)) {
      $errorTitle .= '<p class="error">Tiêu đề dài từ 5 đến 100 kí tự</p>';
    }
    if (checkEmpty($description)) {
      $errorDescription = '<p class="error">Mô tả không được để trống</p>';
    }
    if (checkLength($description, 10, 500)) {
      $errorDescription .= '<p class="error">Mô tả dài từ 10 đến 500 kí tự</p>';
    }
    // nếu dữ liệu hợp lệ
    if ($errorTitle == '' && $errorDescription == '') {
      $data = $title . '||' . $description;
      $name = randomString(5);
      $fileName = './files/' . $name . '.txt';
      if (file_put_contents($fileName, $data)) {
        $title = '';
        $description = '';
        $flag = true;
      }
    }
  }
?>
  <div class="wrapper">
    <div class="heading">ADD FILE</div>
    <div id="form">
      <form action="add.php" method="post">
        <div class="row">
          <p class="title">Tiêu đề</p>
          <input type="text" name="title" value="<?php echo $title; ?>">
          <?php echo $errorTitle; ?>
        </div>
        <div class="row">
          <p class="title">Mô tả</p>
          <textarea name="description" rows="5" cols="100"><?php echo $description; ?></textarea>
          <?php echo $errorDescription; ?>
        </div>
        <div class="row">
          <input type="submit" value="Lưu">
          <input type="button" value="Hủy" id="btnHuy">
        </div>
        <?php
          if ($flag == true) {
            echo '<div class="row">Ghi dữ liệu thành công!</div>';
          }
        ?>
      </form>
    </div>
  </div>
</body>
</html>

[functions.php]

<?php
// kiểm tra dữ liệu khác rỗng
  function checkEmpty($value) {
    $flag = false;
    if (!isset($value) || trim($value) == '') {
      $flag = true;
    }
    return $flag;
  }
// kiểm tra chiều dài dữ liệu
  function checkLength($value, $min, $max) {
    $flag = false;
    $length = strlen($value);
    if ($length < $min || $length > $max) {
      $flag = true;
    }
    return $flag;
  }
// tạo tên tập tin ngẫu nhiên
  function randomString($length = 5) {
    // tạo ra một mảng gồm các kí tự AZaz09
    $arrChar = array_merge(range('A', 'Z'), range('a', 'z'), range('0', '9'));
    // chuyển mảng thành chuỗi
    $chars = implode($arrChar, '');
    // đảo chuỗi ngẫu nhiên
    $chars = str_shuffle($chars);
    $result = substr($chars, 0, 5);
    return $result;
  }
?>

[style.css]

* {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
}
.wrapper {
  width: 800px;
  height: 400px;
  margin: 10px auto;
}
.heading {
  font-style: 18px;
  font-weight: bold;
  color: red;
  text-align: center;
  margin: 10px 0;
}
#form {
  width: 100%;
  height: 300px;
  border: 2px solid blue;
  padding: 10px;
}
.title {
  font-style: 16px;
  font-weight: bold;
  color: blue;
}
.error {
  font-style: italic;
  color: red;
}
input[type="submit"],
input[type="button"] {
  padding: 5px;
  width: 60px;
  font-weight: bold;
  margin: 10px;

}
-----------
Cập nhật [16/9/2020]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web