diff --git a/app/api/anime/filter.php b/app/api/anime/filter.php
index a9e8d5e4d6b389f4c921e7f85a3dc7b0b94374df..9e040887d4baabcf9c73421dc53f9dfb20fad8d8 100644
--- a/app/api/anime/filter.php
+++ b/app/api/anime/filter.php
@@ -3,34 +3,80 @@
 require_once(dirname(__DIR__,2).'/define.php');
 require_once(BASE_DIR.'/models/Anime.php');
 
-$first = true;
-
-$a = new Anime();
-$genreFilter = $_POST['filter-genre'] != "Any" ? 'genre='.$_POST['filter-genre'] : "";
-$typeFilter = $_POST['filter-type'] != "Any" ? 'type='.$_POST['filter-type'] : "";
-$statusFilter = $_POST['filter-status'] != "Any" ? 'status='.$_POST['filter-status'] : "";
-$ratingFilter = $_POST['filter-rating'] != "Any" ? 'rating='.$_POST['filter-rating'] : "";
-$studioFilter = $_POST['filter-studio'] != "Any" ? 'studio='.$_POST['filter-studio'] : "";
-$sortFilter = $_POST['filter-sort'] != "Any" ? 'sort='.$_POST['filter-sort'] : "";
-
-$filterArray = array (
-  $genreFilter, $typeFilter, $statusFilter, $ratingFilter, $studioFilter, $sortFilter
-);
+
+// $xml = file_get_contents('php://input');
+// $data = json_decode($xml, true);
+
 $url = '/?anime/';
 
-foreach($filterArray as $f){
-  if ($first){
-    if ($f != ""){
-      $url = $url.$f;
-      $first = false;
-    }
-  } else {
-    if ($f != ""){
-      $url = $url.'&'.$f;
+
+// if (!$data) {
+  $first = true;
+
+  $a = new Anime();
+  $genreFilter = $_POST['filter-genre'] != "Any" ? 'genre='.$_POST['filter-genre'] : "";
+  $typeFilter = $_POST['filter-type'] != "Any" ? 'type='.$_POST['filter-type'] : "";
+  $statusFilter = $_POST['filter-status'] != "Any" ? 'status='.$_POST['filter-status'] : "";
+  $ratingFilter = $_POST['filter-rating'] != "Any" ? 'rating='.$_POST['filter-rating'] : "";
+  $studioFilter = $_POST['filter-studio'] != "Any" ? 'studio='.$_POST['filter-studio'] : "";
+  $sortFilter = $_POST['filter-sort'] != "Any" ? 'sort='.$_POST['filter-sort'] : "";
+  $searchFilter = $_POST['filter-search'] != "" ? 'search='.strtolower($_POST['filter-search']) : "";
+  
+  $filterArray = array (
+    $searchFilter, $genreFilter, $typeFilter, $statusFilter, $ratingFilter, $studioFilter, $sortFilter
+  );
+
+  foreach($filterArray as $f){
+    if ($first){
+      if ($f != ""){
+        $url = $url.$f;
+        $first = false;
+      }
+    } else {
+      if ($f != ""){
+        $url = $url.'&'.$f;
+      }
     }
   }
-}
-$url = $first ? $url.'page=1' : $url.'&page=1';
+  $url = $first ? $url.'page=1' : $url.'&page=1';
+
+  header("Location: ".$url);
+// } else {
+//   $searchFilter = $data['filter-search'] != "Any" ? 'search='.$data['filter-search'] : "";
+//   $genreFilter = $data['filter-genre'] != "Any" ? 'genre='.$data['filter-genre'] : "";
+//   $typeFilter = $data['filter-type'] != "Any" ? 'type='.$data['filter-type'] : "";
+//   $statusFilter = $data['filter-status'] != "Any" ? 'status='.$data['filter-status'] : "";
+//   $ratingFilter = $data['filter-rating'] != "Any" ? 'rating='.$data['filter-rating'] : "";
+//   $studioFilter = $data['filter-studio'] != "Any" ? 'studio='.$data['filter-studio'] : "";
+//   $sortFilter = $data['filter-sort'] != "Any" ? 'sort='.$data['filter-sort'] : "";
+
+//   $filterArray = array (
+//     $searchFilter, $genreFilter, $typeFilter, $statusFilter, $ratingFilter, $studioFilter, $sortFilter
+//   );
+
+//   foreach($filterArray as $f){
+//     if ($first){
+//       if ($f != ""){
+//         $url = $url.$f;
+//         $first = false;
+//       }
+//     } else {
+//       if ($f != ""){
+//         $url = $url.'&'.$f;
+//       }
+//     }
+//   }
+//   $url = $first ? $url.'page=1' : $url.'&page=1';
+
+//   http_response_code(200);
+//   echo json_encode (
+//     array (
+//       'status' => 'success',
+//       'url' => $url
+//     )
+//   );
+// }
+
+
 
-header("Location: ".$url);
 ?>
\ No newline at end of file
diff --git a/app/models/anime.php b/app/models/anime.php
index 4915a1da43b7d20334793f63be52b87950865bf3..957ecc3bbdc11f3cbabd31586aad0a718849d4f4 100644
--- a/app/models/anime.php
+++ b/app/models/anime.php
@@ -135,7 +135,7 @@ class Anime {
     return $this->db->fetchAllData();
   }
 
-  public function getAllAnimeWithFilter($genre, $type, $status, $rating, $studio, $sortColumn, $desc, $limit, $offset)
+  public function getAllAnimeWithFilter($genre, $type, $status, $rating, $studio, $sortColumn, $desc, $limit, $offset, $search)
   {
     $first = true;
     $genreQuery = $genre ? " genre.name = ".$this->db->processDataType($genre) : "";
@@ -144,7 +144,7 @@ class Anime {
     $ratingQuery = $rating ? " anime.rating = ".$this->db->processDataType($rating) : "";
     $studioQuery = $studio ? " studio.studio_id = ".$studio : "";
     $limitQuery = $limit ? ' LIMIT '.$limit.' OFFSET '.$offset : "";
-
+    $searchQuery =  $search ? " LOWER(anime.title) LIKE '%".$search."%' OR LOWER(studio.name) LIKE '%".$search."%' OR LOWER(genre.name) LIKE '%".$search."%' " : "";
 
     if ($sortColumn){
       if ($desc){
@@ -166,7 +166,7 @@ class Anime {
   
 
     $additionalQuery = array (
-      $genreQuery, $typeQuery, $statusQuery, $ratingQuery, $studioQuery
+      $genreQuery, $typeQuery, $statusQuery, $ratingQuery, $studioQuery, $searchQuery
     );
     
     foreach($additionalQuery as $q){
diff --git a/app/public/handler/anime.js b/app/public/handler/anime.js
index 36ed66245827882983190c4e5d78d4be3e3a6f98..7b86f8f6d78931e29b3d84ce9b909bc05afc2e01 100644
--- a/app/public/handler/anime.js
+++ b/app/public/handler/anime.js
@@ -1,3 +1,32 @@
 function handleSearch(){
-  let val = document.getElementById('search-bar').value;
+  let search = document.getElementById('search-bar').value;
+  let genre = document.getElementById('filter-genre').value;
+  let type = document.getElementById('filter-type').value;
+  let status = document.getElementById('filter-status').value;
+  let rating = document.getElementById('filter-rating').value;
+  let studio = document.getElementById('filter-studio').value;
+  let sort = document.getElementById('filter-sort').value;
+
+  const xhr = new XMLHttpRequest();
+  xhr.open('POST', '../../api/anime/filter.php', true);
+  xhr.onload = function() {
+    if (this.status == 200){
+      let response = JSON.parse(this.responseText);
+      if (response.status == 'success'){
+        window.location.hred = response.url;
+      }
+    }
+  };
+  xhr.send(JSON.stringify(
+    {
+      'filter-search' : search,
+      'filter-genre' : genre,
+      'filter-type' : type,
+      'filter-status' : status,
+      'filter-rating' : rating,
+      'filter-studio' : studio,
+      'filter-sort' : sort,
+    }
+  ));
+
 }
\ No newline at end of file
diff --git a/app/public/style/anime.css b/app/public/style/anime.css
index b2aa1ec7a7b1d91466a49aa6174ba10869b22024..5849eab7179d731fab7f61cdc6357437988f4c03 100644
--- a/app/public/style/anime.css
+++ b/app/public/style/anime.css
@@ -6,7 +6,7 @@
   background-color: #dedede;
   padding-top: 20px;
   padding-bottom: 20px;
-  gap: 5px;
+  gap: 20px;
 }
 
 .filter-part {
@@ -75,6 +75,7 @@
   justify-content: center;
   align-items: center;
   padding: 0px 20px;
+  gap: 20px;
 }
 
 .search-bar {
diff --git a/app/views/anime/index.php b/app/views/anime/index.php
index 7531ce7ddb0646f4079ff9bfaf0066f63a17dc9a..aef8ed06e5371e9d4722550f28c0b662275c0c5e 100644
--- a/app/views/anime/index.php
+++ b/app/views/anime/index.php
@@ -20,6 +20,8 @@ $sortColumn = null;
 $desc = null;
 $page = 1;
 $limitPerPage = 12;
+$searchFilter = null;
+
 
 $filter = explode('&', $path);
 foreach($filter as $f){
@@ -47,9 +49,11 @@ foreach($filter as $f){
     $sortColumn = $sortArr[0];
     $desc = $sortArr[1] == 'desc' ? true : false;
   }
+  else if ($temp[0] == 'search'){
+    $searchFilter = $temp[1];
+  }
 }
 
-
 $animes = $a->getAllAnimeWithFilter(
   $genreFilter, 
   $typeFilter, 
@@ -59,7 +63,8 @@ $animes = $a->getAllAnimeWithFilter(
   $sortColumn, 
   $desc,
   $limitPerPage,
-  ($page-1) * $limitPerPage
+  ($page-1) * $limitPerPage,
+  $searchFilter
 );
 
 $totalAnime = 
@@ -72,7 +77,8 @@ count($a->getAllAnimeWithFilter(
   $sortColumn, 
   $desc,
   null,
-  null
+  null,
+  $searchFilter
 ));
 $maxPage = ceil($totalAnime/$limitPerPage);
 
@@ -89,8 +95,8 @@ $maxPage = ceil($totalAnime/$limitPerPage);
 </head>
 
 <body>
-  <div class="filter-flex"> 
-    <form action='/api/anime/filter.php' method='post' class='filter-part'> 
+  <form action='/api/anime/filter.php' method='post' class="filter-flex"> 
+    <div class='filter-part'>
       <div class="filter-block">
         <label class='filter-label' for='filter-genre'>Genre </label>
         <select class='filter-select' id='filter-genre' name='filter-genre' placeholder='Genre'>
@@ -98,8 +104,9 @@ $maxPage = ceil($totalAnime/$limitPerPage);
             $genres = $g->getAllGenre();
             echo "<option value='Any'> Any </option>";
             foreach($genres as $genre){
+              $selected = $genreFilter == $genre['name'] ? 'selected' : "";
               echo "
-                <option value=$genre[name]> $genre[name] </option>
+                <option value=$genre[name] $selected> $genre[name] </option>
               ";
             }
           ?>
@@ -109,32 +116,48 @@ $maxPage = ceil($totalAnime/$limitPerPage);
       <div class="filter-block">
         <label class='filter-label' for='filter-type'>Type </label>
         <select class='filter-select' id='filter-type' name='filter-type' placeholder='Type'>
-          <option value='Any'> Any </option>
-          <option value="TV">TV</option>
-          <option value="MOVIE">Movie</option>
-          <option value="OVA">OVA</option>
+          <?php 
+            $typeArr = array('TV', 'MOVIE', 'OVA');
+            echo "<option value='Any'> Any </option>";
+            foreach ($typeArr as $type) {
+              $selected = $typeFilter == $type ? 'selected' : "";
+              echo "
+                <option value=$type $selected> $type </option>
+              ";
+            }
+          ?>
         </select>
       </div>
 
       <div class="filter-block">
         <label class='filter-label' for='filter-status'>Status </label>
         <select class='filter-select' id='filter-status' name='filter-status' placeholder='Status'>
-          <option value='Any'> Any </option>  
-          <option value="ON-GOING">On Going</option>
-          <option value="COMPLETED">Completed</option>
-          <option value="HIATUS">Hiatus</option>
-          <option value="UPCOMING">Upcoming</option>
+          <?php 
+            $statusArr = array('ON-GOING', 'COMPLETED', 'HIATUS', 'UPCOMING');
+            echo "<option value='Any'> Any </option>";
+            foreach ($statusArr as $status) {
+              $selected = $statusFilter == $status ? 'selected' : "";
+              echo "
+                <option value=$status $selected> $status </option>
+              ";
+            }
+          ?>  
         </select>
       </div>
 
       <div class="filter-block">
         <label class='filter-label' for='filter-rating'>Rating </label>
         <select class='filter-select' id='filter-rating' name='filter-rating' placeholder='Rating'>
-          <option value='Any'> Any </option>  
-          <option value="G">G</option>
-          <option value="PG-13">PG-13</option>
-          <option value="R(17+)">R(17+)</option>
-          <option value="Rx">Rx</option>
+          <?php 
+            $ratingArr = array('G', 'PG-13', 'R(17+)', 'Rx');
+            echo "<option value='Any'> Any </option>";
+            foreach ($ratingArr as $rating) {
+              $selected = $ratingFilter == $rating ? 'selected' : "";
+              echo "
+                <option value=$rating $selected> $rating </option>
+              ";
+            }
+          ?>    
         </select>
       </div>
 
@@ -142,14 +165,15 @@ $maxPage = ceil($totalAnime/$limitPerPage);
         <label class='filter-label' for='filter-studio'>Studio </label>
         <select class='filter-select' id='filter-studio' name='filter-studio' placeholder='Studio'>
           <?php 
-              $studios = $s->getAllStudio();
-              echo "<option value='Any'> Any </option>";
-              // Special for studio, use Studio ID
-              foreach($studios as $studio){
-                echo "
-                  <option value=$studio[studio_id]> $studio[name] </option>
-                ";
-              }
+            $studios = $s->getAllStudio();
+            echo "<option value='Any'> Any </option>";
+            // Special for studio, use Studio ID
+            foreach($studios as $studio){
+              $selected = $studioFilter == $studio['studio_id'] ? 'selected' : "";
+              echo "
+                <option value=$studio[studio_id] $selected> $studio[name] </option>
+              ";
+            }
           ?>
         </select>
       </div>
@@ -157,24 +181,37 @@ $maxPage = ceil($totalAnime/$limitPerPage);
       <div class="filter-block">
         <label class='filter-label' for='filter-sort'>Sort </label>
         <select class='filter-select' id='filter-sort' name='filter-sort' placeholder='Sort'>
-          <option value='Any'> None </option>  
-          <option value="title.asc">Title Ascending</option>
-          <option value="title.desc">Title Descending</option>
-          <option value="score.asc">Score Ascending</option>
-          <option value="score.desc">Score Descending</option>
-          <option value="release_date.asc">Release Date Ascending</option>
-          <option value="release_date.desc">Release Date Descending</option>
+          <?php 
+            $sortListArr = array (
+              "title.asc" => 'Title Ascending',
+              "title.desc" => 'Title Descending',
+              "score.asc" => 'Score Ascending',
+              "score.desc" => 'Score Descending',
+              "release_date.asc" => 'Release Date Ascending',
+              "release_date.desc" => 'Release Date Descending'
+            );
+            echo "<option value='Any'> Any </option>";
+            foreach ($sortListArr as $key => $value) {
+              $selected = $sortArr[0].'.'.$sortArr[1] == $key ? 'selected' : '';
+              echo "
+                <option value=$key $selected> $value </option>
+              ";
+            }
+
+          ?>
         </select>
       </div>
-      
-      <input class='filter-submit-btn' type='submit' value='Submit Filter'>
-    </form>
+    </div>
+
     <div class='search-part'> 
       <div class='search-bar'>
-        <input class='search-bar' id='search-bar' type='text' onkeyup='handleSearch()' placeholder='Search...'>
+        <input class='search-bar' id='filter-search' name='filter-search' type='text' placeholder='Search...'>
       </div>
+
+      <input class='filter-submit-btn' type='submit' value='Submit Filter'>
     </div>
-  </div>
+    
+  </form>
 
   <div class="flex-wrap">
     <?php