diff --git a/src/pages/AddAlbumPage.tsx b/src/pages/AddAlbumPage.tsx
index a44c8c0cfab8dc0014652cc7f31180aaa5780047..2fa1d3caa7f6c79aa9471648a1d621e15d3e66c2 100644
--- a/src/pages/AddAlbumPage.tsx
+++ b/src/pages/AddAlbumPage.tsx
@@ -1,5 +1,13 @@
 import {useState} from "react";
 import axios from "axios";
+import { date, object, string, z } from "zod";
+
+const albumSchema = object({
+  albumName: string().min(1, "Album Name cannot be empty"),
+  releaseDate: date(),
+  genre: string().min(1, "Genre cannot be empty"),
+  artist: string().min(1, "Artist cannot be empty"),
+});
 
 export default function AddAlbum() {
   const [albumName, setAlbumName] = useState("");
@@ -21,6 +29,9 @@ export default function AddAlbum() {
         formData.append("coverFile", coverFile);
       }
 
+      // Validate
+      albumSchema.parse({ albumName, releaseDate, genre, artist });
+
       await axios.post("http://localhost:3000/api/premium-album", formData, {
         headers: {
           "Content-Type": "multipart/form-data",
diff --git a/src/pages/AddSongPage.tsx b/src/pages/AddSongPage.tsx
index 3c5d202ffd04caf11396beda2681df7982c43ecc..bb3f976bb8b54e4857bc50cdd4a168e293147a88 100644
--- a/src/pages/AddSongPage.tsx
+++ b/src/pages/AddSongPage.tsx
@@ -1,6 +1,15 @@
 import axios from "axios";
 import { useState } from "react";
 import { useParams } from "react-router";
+import { number, object, string, z } from "zod";
+
+const songSchema = object({
+  title: string().min(1, "Title cannot be empty"),
+  artist: string().min(1, "Artist cannot be empty"),
+  songNumber: number().int("Song Number must be an integer").min(1, "Song Number must be greater than or equal to 1"),
+  discNumber: number().int("Disc Number must be an integer").min(1, "Disc Number must be greater than or equal to 1"),
+  duration: number().int("Duration must be an integer").min(1, "Duration must be greater than or equal to 1"),
+});
 
 const AddSong = () => {
   const { albumId }= useParams();
@@ -25,6 +34,8 @@ const AddSong = () => {
         formData.append("audioFile", audioFile);
       }
 
+      songSchema.parse({ title, artist, songNumber, discNumber, duration });
+
       await axios.post(`http://localhost:3000/api/premium-album/${albumId}`, formData, {
         headers: {
           "Content-Type": "multipart/form-data",
diff --git a/src/pages/EditAlbumPage.tsx b/src/pages/EditAlbumPage.tsx
index 58b587124d715b4b4613f6309da12ddf6141ec4b..76b8f6d26da66fb5230c98234ab06ca631487e1d 100644
--- a/src/pages/EditAlbumPage.tsx
+++ b/src/pages/EditAlbumPage.tsx
@@ -1,6 +1,15 @@
 import axios from 'axios';
 import { useEffect, useState } from 'react';
 import { useParams } from 'react-router-dom';
+import { date, object, string, z } from 'zod';
+
+const albumSchema = object({
+  albumName: string().min(1, "Album Name cannot be empty"),
+  releaseDate: date(),
+  genre: string().min(1, "Genre cannot be empty"),
+  artist: string().min(1, "Artist cannot be empty"),
+  coverFile: string().nullable(),
+});
 
 export default function EditAlbum() {
   const { albumId } = useParams();
@@ -29,6 +38,7 @@ export default function EditAlbum() {
 
   const handleEditAlbum = async () => {
     try {
+      albumSchema.parse(albumData);
       await axios.patch(
         `http://localhost:3000/api/premium-album/${albumId}`,
         albumData
diff --git a/src/pages/EditSongPage.tsx b/src/pages/EditSongPage.tsx
index 0eb0172856585a30802c7c91162382c61b33c122..80d5f9965e753ce393ed3eb4afc8922cf42d735f 100644
--- a/src/pages/EditSongPage.tsx
+++ b/src/pages/EditSongPage.tsx
@@ -1,6 +1,16 @@
 import axios from "axios";
 import { useState } from "react";
 import { useParams } from "react-router-dom";
+import { number, object, string, z } from "zod";
+
+const songSchema = object({
+  title: string().min(1, "Title cannot be empty"),
+  artist: string().min(1, "Artist cannot be empty"),
+  songNumber: number().int("Song Number must be an integer").min(1, "Song Number must be greater than or equal to 1"),
+  discNumber: number().int("Disc Number must be an integer").min(1, "Disc Number must be greater than or equal to 1"),
+  duration: number().int("Duration must be an integer").min(1, "Duration must be greater than or equal to 1"),
+  audioFile: string().nullable(),
+});
 
 const EditSong = () => {
   const { albumId, songId } = useParams();
@@ -15,6 +25,7 @@ const EditSong = () => {
 
   const handleEditSong = async () => {
     try {
+      songSchema.parse(songsData);
       await axios.patch(
         `/api/premium-album/${albumId}/${songId}`,
         songsData