Nguyễn Lan Hương Sinh viên thực hiện : Phan Tiến Đạt Trang 2 PHIẾU GIAO ĐỀ TÀI ĐỒ ÁN/ KHÓA LUẬN TỐT NGHIỆP Họ tên sinh viên: Phan Tiến Đạt Mã SV: 16031147 Lớp: DH16MT Ngành: Công Nghệ
CƠ SỞ LÝ THUYẾT VÀ KHẢO SÁT
HTML,CSS và JavaScript
HTML, CSS và JavaScript là ba khái niệm cốt lõi mà mọi lập trình viên web chuyên nghiệp đều cần phải nắm vững Chúng đóng vai trò là nền tảng thiết yếu để xây dựng, thiết kế và làm cho các trang web trở nên sinh động Do đó, việc hiểu biết về HTML, CSS và JavaScript là điều bắt buộc cho những ai muốn theo đuổi sự nghiệp phát triển website HTML là gì?
HTML, viết tắt của HyperText Markup Language, là ngôn ngữ đánh dấu siêu văn bản được sử dụng để mô tả cấu trúc của các trang web và tạo ra các tài liệu có thể hiển thị trong trình duyệt.
HTML là nền tảng thiết yếu của mọi trang web, với mỗi trang được cấu thành từ các thẻ HTML đại diện cho từng loại nội dung Mỗi loại nội dung đều được "bọc" bởi các thẻ HTML, tạo nên cấu trúc và ý nghĩa cho trang.
HTML không phải là ngôn ngữ lập trình, vì vậy nó không thể tạo ra các chức năng động Thực chất, HTML tương tự như Microsoft Word, được sử dụng chủ yếu để bố cục và định dạng trang web.
CSS (Cascading Style Sheets) là ngôn ngữ định dạng dùng để mô tả cách trình bày các trang web, bao gồm màu sắc, bố cục và phông chữ Nó đảm bảo nội dung hiển thị tương thích trên nhiều loại thiết bị với kích thước màn hình khác nhau, từ màn hình lớn đến màn hình nhỏ và máy in.
HTML là cấu trúc cơ bản của một trang web, trong khi CSS mang đến phong cách và diện mạo mà bạn mong muốn cho trang web của mình CSS thực sự tạo nên bộ mặt của website.
− Cũng giống như HTML, CSS không phải là một ngôn ngữ lập trình
JavaScript (JS) là một ngôn ngữ kịch bản hướng đối tượng, nhẹ và nhỏ gọn, hoạt động trên nền tảng đa dạng Chạy trong môi trường máy chủ như trình duyệt web, JavaScript cho phép kết nối với các đối tượng trong môi trường, cung cấp khả năng kiểm soát chương trình hiệu quả.
JavaScript là một ngôn ngữ lập trình logic, cho phép sửa đổi nội dung trang web và tương tác với người dùng Nó được sử dụng phổ biến để tạo ra các hộp xác nhận, kêu gọi hành động và bổ sung thông tin mới vào nội dung hiện có.
Bootstrap
− Bootstrap là một front-end framework miễn phí giúp quá trình phát triển web nhanh chóng và dễ dàng hơn
− Bootstrap bao gồm các mẫu thiết kế dựa trên HTML và CSS như typography, forms, buttons, tables, navigation, modals, image carousels… cũng như các plugin JavaScript tùy chọn
− Bootstrap cũng cung cấp cho bạn khả năng tạo ra các responsive designs một cách dễ dàng Đồ án thiết kế
1.2.2 Tại sao nên dùng Bootstrap?
− Dễ sử dụng: Bất kỳ ai có kiến thức cơ bản về HTML và CSS đều có thể bắt đầu sử dụng Bootstrap
− Các tính năng đáp ứng (Responsive features): responsive CSS của Bootstrap điều chỉnh cho điện thoại, máy tính bảng và máy tính để bàn
− Khả năng tương thích trình duyệt: Bootstrap tương thích với tất cả các trình duyệt hiện đại (Chrome, Firefox, Internet Explorer, Edge, Safari và Opera)
Bootstrap giúp lập trình viên tiết kiệm thời gian và công sức trong việc thiết kế giao diện website nhờ vào các thư viện chứa sẵn mã nguồn có thể áp dụng ngay Điều này cho phép lập trình viên giảm thiểu thời gian cần thiết để viết code từ đầu cho giao diện của mình.
JQuery
jQuery là một thư viện JavaScript mạnh mẽ, giúp phát triển các chức năng một cách dễ dàng và nhanh chóng Thư viện này tích hợp nhiều module đa dạng, từ hiệu ứng đến truy vấn selector, mang lại tính năng phong phú cho các nhà phát triển Hiện nay, jQuery được sử dụng trên 99% tổng số website toàn cầu.
jQuery không phải là một ngôn ngữ lập trình độc lập mà là một thư viện kết hợp với JavaScript Sử dụng jQuery giúp bạn thực hiện nhiều tác vụ hơn với ít nỗ lực hơn.
1.3.2 Tại sao nên dùng jQuery?
− Gọn nhẹ: jQuery là một thư viện khá gọn nhẹ – có kích cỡ khoảng 19KB Đồ án thiết kế
− Tương thích đa nền tảng: Nó tự động sửa lỗi và chạy được trên mọi trình duyệt phổ biến như Chrome, Firefox, Safari, MS Edge, IE, Android và iOS
Thư viện jQuery giúp việc tạo Ajax trở nên đơn giản, cho phép mã Ajax dễ dàng tương tác với máy chủ và tự động cập nhật nội dung mà không cần tải lại trang.
jQuery cho phép xử lý DOM một cách nhanh nhạy, giúp người dùng dễ dàng lựa chọn và duyệt các phần tử DOM Với việc sử dụng Selector mã nguồn mở Sizzle, jQuery cung cấp khả năng chỉnh sửa nội dung của các phần tử này một cách hiệu quả.
Đơn giản hóa việc tạo hiệu ứng bằng cách sử dụng code snippet với hiệu ứng animation, giúp bạn dễ dàng áp dụng chỉ bằng cách thêm biến hoặc nội dung cần thiết.
jQuery cung cấp hỗ trợ mạnh mẽ cho việc xử lý sự kiện HTML, giúp quản lý các sự kiện đa dạng một cách hiệu quả Bằng cách sử dụng jQuery, bạn có thể xử lý sự kiện mà không làm cho mã HTML trở nên lộn xộn với các Event Handler, từ đó cải thiện tính tổ chức và khả năng bảo trì của mã.
Ajax là gì?
AJAX, viết tắt của Asynchronous JavaScript and XML, là công nghệ cho phép tạo ra các trang web động mà không cần tải lại trang.
JavaScript và XML đều hỗ trợ hoạt động bất đồng bộ trong AJAX, cho phép nhiều ứng dụng web gửi và nhận dữ liệu từ máy chủ mà không cần tải lại toàn bộ trang.
1.4.2 Tại sao nên dùng Ajax?
AJAX được sử dụng để thực hiện các cuộc gọi lại, cho phép truy xuất và lưu dữ liệu mà không cần tải lại toàn bộ trang Bằng cách gửi chỉ một phần của trang web đến máy chủ, AJAX giúp giảm thiểu việc sử dụng băng thông và cải thiện tốc độ hoạt động Điều này đặc biệt hữu ích trên các trang web có băng thông hạn chế, mang lại hiệu suất mạng tốt hơn nhờ vào việc tối thiểu hóa dữ liệu được gửi đi và nhận về từ máy chủ.
Ajax cho phép thực hiện các cuộc gọi không đồng bộ đến máy chủ web, giúp trình duyệt của người dùng không phải chờ đợi tất cả dữ liệu trước khi cho phép họ tiếp tục tương tác.
Các ứng dụng hỗ trợ Ajax mang lại trải nghiệm người dùng tốt hơn nhờ vào khả năng tải dữ liệu mà không cần phải gửi lại toàn bộ trang lên server, giúp tăng tốc độ và tính thân thiện.
Ajax được thiết kế để nâng cao tốc độ, hiệu suất và trải nghiệm người dùng của các ứng dụng web Một ví dụ điển hình là tính năng xếp hạng phim trên Netflix, cho phép người dùng đánh giá và lưu xếp hạng cá nhân mà không cần phải làm mới hoặc tải lại trang.
Lararel
Laravel là một framework PHP mã nguồn mở miễn phí, hỗ trợ xây dựng ứng dụng theo mô hình MVC (Model - View - Controller) một cách nhanh chóng Được phát triển bởi một lập trình viên kỳ cựu từng làm việc với NET, Laravel mang đến cho lập trình viên nhiều công cụ hữu ích để tối ưu hóa quy trình phát triển.
12 đó là Taylor Otwell Được phát hành lần đầu vào ngày 9 tháng 6 năm
Laravel, trước đây được gọi là Bootplant, là một framework PHP nổi tiếng Tên gọi Laravel được lấy cảm hứng từ tên một tòa lâu đài trong thế giới tưởng tượng của Narnia, một vùng đất không có thật.
Các phiên bản của laravel đến tháng 4 năm 2020 Đồ án thiết kế
Cuốn tiểu thuyết nổi tiếng "Biên niên sử Narnia" của nhà văn Clive Staples Lewis đã truyền cảm hứng cho nhiều tác phẩm, trong đó có tòa lâu đài Paravel Tên gọi Paravel khi đọc lái thành Laravel thể hiện ước mơ của Taylor Otwell về sự phát triển mạnh mẽ và bền vững của framework Laravel Đến nay, Laravel vẫn giữ vững vị trí là một trong những framework hàng đầu cho PHP.
1.5.2 Tại sao nên dùng Laravel?
Laravel là một framework PHP mạnh mẽ, cho phép phát triển các ứng dụng web phức tạp với hiệu năng cao Dù dễ dàng tiếp cận cho người mới, Laravel vẫn đảm bảo kiến trúc hệ thống thống nhất và khoa học.
Cộng đồng Laravel trên Laracast rất lớn, cung cấp nhiều câu trả lời cho các vấn đề và tình huống mà lập trình viên gặp phải Tài nguyên liên quan đến Laravel cũng đa dạng và dễ sử dụng Taylor Otwell, tác giả của framework này, đã biên soạn tài liệu giúp lập trình viên khám phá và trải nghiệm hiệu quả hơn.
Artisan là công cụ dòng lệnh tích hợp trong Laravel, hỗ trợ phát triển ứng dụng hiệu quả bằng cách tối ưu hóa ứng dụng, di chuyển dữ liệu, và tạo các template, controller, và nhiều tính năng khác.
Laravel sở hữu một bộ máy template mạnh mẽ mang tên Blade, giúp đơn giản hóa việc tương tác giữa PHP và HTML Blade cho phép tách biệt rõ ràng giữa mã hiển thị và mã logic nghiệp vụ, điều mà trước đây chỉ thấy ở NET hoặc Java Ngoài ra, Blade còn hỗ trợ kế thừa template và tích hợp các script như JavaScript, jQuery, mang lại sự linh hoạt cho việc phát triển ứng dụng.
Laravel tích hợp gói thư viện Webpack cùng với npm và yarn, giúp tự động hóa quá trình xây dựng ứng dụng và triển khai đồ án thiết kế, thay vì phải thực hiện thủ công.
Laravel hỗ trợ việc khai thác sản phẩm thông qua việc cài đặt các gói thư viện, giúp tạo ra những tính năng tuyệt vời.
Laravel cung cấp tính năng bảo mật mạnh mẽ với CSRF tokens, giúp bảo vệ ứng dụng khỏi các cuộc tấn công bằng cách kiểm tra mã CSRF trong mỗi yêu cầu POST Điều này đảm bảo rằng dữ liệu không bị thay đổi một cách trái phép, bao gồm cả việc chuyển đổi từ POST sang GET Hơn nữa, Laravel cung cấp các Middleware sẵn có, đồng thời cho phép lập trình viên tạo ra Middleware riêng để nâng cao mức độ bảo mật cho ứng dụng web của mình.
Laravel cung cấp hỗ trợ mạnh mẽ cho lập trình theo mô hình MVC, bao gồm các thành phần chính như Model, View và Controller Bên cạnh đó, Routes đóng vai trò quan trọng trong việc định tuyến người dùng đến các Urls chính xác.
− Laravel luôn thay đổi, cập nhật trong các phiên bản, luôn tìm kiếm những tính năng hay, những gói thư viện tốt và hữu ích để tích hợp vào
Cách thức hoạt động MVC trong Laravel Đồ án thiết kế
PHP
PHP bắt đầu như một dự án mã nguồn mở nhỏ nhưng nhanh chóng trở nên hữu ích và phổ biến Được phát triển từ sản phẩm PHP/FI do Rasmus Lerdorf tạo ra vào năm 1994, PHP/FI ban đầu chỉ là một tập hợp mã kịch bản Perl đơn giản để theo dõi truy cập vào sơ yếu lý lịch của ông Bộ mã này được gọi là "Personal Home Page Tools" Khi nhu cầu về các chức năng phức tạp hơn tăng lên, Rasmus đã phát triển một bộ thực thi bằng C lớn hơn để hỗ trợ truy vấn cơ sở dữ liệu và phát triển ứng dụng web đơn giản Ông đã quyết định công bố mã nguồn PHP/FI, cho phép mọi người xem, sử dụng, sửa lỗi và cải tiến mã nguồn.
− PHP viết hồi qui của "PHP: Hypertext Preprocessor"
PHP là một ngôn ngữ lập trình kịch bản phía máy chủ, cho phép nhúng mã vào HTML Ngôn ngữ này thường được sử dụng để quản lý nội dung động, theo dõi phiên làm việc và tương tác với cơ sở dữ liệu PHP tích hợp tốt với nhiều hệ quản trị cơ sở dữ liệu phổ biến như MySQL, PostgreSQL, Oracle, Sybase và Informix.
PHP hoạt động hiệu quả, đặc biệt khi được biên dịch dưới dạng Apache Module trên hệ điều hành Unix MySQL Server, khi khởi động, có khả năng thực thi các truy vấn phức tạp với các tập hợp kết quả lớn trong thời gian kỷ lục.
PHP hỗ trợ nhiều giao thức quan trọng như POP3, IMAP và LDAP Với phiên bản PHP4, sự hỗ trợ cho Java cùng các cấu trúc đối tượng phân phối như COM và CORBA đã được bổ sung.
− Cú pháp PHP là giống C
Những ngôn ngữ lập trình phổ biến từ năm 1965 – 2019
1.6.2 Tại sao nên dùng PHP
Hiện nay, có hàng ngàn ngôn ngữ lập trình, nhưng PHP nổi bật là một trong những ngôn ngữ phổ biến nhất, được tin dùng rộng rãi PHP được thiết kế đặc biệt cho phát triển web và hiện đang được cài đặt trên hơn 20 triệu website.
Ngôn ngữ ASP là một trong những đối thủ cạnh tranh chính của PHP trong lĩnh vực lập trình web Cả hai ngôn ngữ này đều được sử dụng để phát triển website động, mang lại khả năng tương tác và trao đổi thông tin cho người dùng, vượt trội hơn so với các trang web tĩnh được xây dựng bằng HTML.
Hiện nay, có hàng ngàn ngôn ngữ lập trình, nhưng chỉ một số ít ngôn ngữ phổ biến và được nhiều người sử dụng Trong số đó, PHP nổi bật như một ngôn ngữ lập trình được ưa chuộng PHP được thiết kế đặc biệt cho việc phát triển web, mang lại nhiều lợi ích cho các dự án thiết kế.
17 để phục vụ cho việc phát triển web và được cài đặt trên 20 triệu website,
Ngôn ngữ ASP được coi là một đối thủ cạnh tranh của PHP trong lĩnh vực lập trình web Cả hai ngôn ngữ này đều được sử dụng để phát triển các trang web động, mang lại khả năng tương tác và trao đổi thông tin tốt hơn so với các trang web tĩnh sử dụng HTML.
Khảo Sát Hiện Trạng
Trong bối cảnh kinh tế ngày càng phát triển, sự cạnh tranh giữa các doanh nghiệp ngày càng gia tăng Để tồn tại và phát triển trên thị trường, nhiều công ty đã xác định Marketing là yếu tố chiến lược hàng đầu Một trong những chiến lược quảng bá quan trọng trong thời đại internet hiện nay là việc sở hữu một website riêng để giới thiệu hình ảnh và thông tin của công ty.
So sánh giữa ASP và PHP Đồ án thiết kế
Trong thời đại 4.0 hiện nay, việc tìm kiếm thông tin trên các trang web trực tuyến trở nên dễ dàng và phong phú hơn bao giờ hết Sự gia tăng đa dạng của các trang web đã mang đến nhiều lựa chọn cho người dùng Nhờ vào các thiết bị như smartphone và laptop, cùng với khả năng kết nối mạng rộng rãi, mọi người có thể dễ dàng truy cập và tìm kiếm những gì mình cần một cách nhanh chóng.
1.7.2 Khảo sát các website tương tự
Nhiều công ty đã nhận thấy nhu cầu quảng bá hình ảnh của mình và đã mở website để giới thiệu sản phẩm, trong đó tandaithanh.vn.net là một trong những trang web tiêu biểu Tandaithanh.vn.net thành công trong việc cung cấp cho khách hàng cái nhìn rõ nét về hình ảnh công ty, thông tin sản phẩm và nhiều tin tức quan trọng khác.
Tandaithanh.vn.net là một trang web chuyên cung cấp các loại cửa kính, được thiết kế với giao diện thân thiện và bố trí nội dung hợp lý, mang lại trải nghiệm thoải mái cho người dùng Người truy cập dễ dàng tìm kiếm thông tin mà họ mong muốn trên trang.
*Phân tích website tandaithanh.vn.net:
+ Logo website, tên công ty
+ Silde tiêu đề hình ảnh sản phẩm Đồ án thiết kế
− Sản Phẩm Của Chúng Tôi: Cửa sổ nhôm kính, cửa sổ kính cường lực, kính ốp trang trí, cửa đi một cánh,
− Giới Thiệu: Cửa kính đẹp, lan can đẹp, cầu thang kính, kính cường lực ngoài trời
− Công Trình Tiêu Biểu: Lan can kính quận Tân Phú, công trình Bình Tiên quận 6, công trình cách mạng tháng 8, công trình Bùi Hữu Nghĩa quận Bình Thạnh,
Cửa nhôm kính mang lại nhiều ưu điểm vượt trội so với cửa truyền thống, bao gồm độ bền cao, khả năng cách âm và cách nhiệt tốt Đặc biệt, cửa nhôm kính sơn tĩnh điện không chỉ tăng cường tính thẩm mỹ mà còn chống oxi hóa hiệu quả Với nhiều mẫu mã đẹp và hiện đại, cửa nhôm kính là lựa chọn hoàn hảo cho các công trình xây dựng, giúp nâng cao giá trị thẩm mỹ và công năng sử dụng.
− Chân Trang: Các thông tin liên hệ và địa chỉ của công ty
Slide hình ảnh sản phẩm Đồ án thiết kế
+ Các chức năng: tìm kiếm, xem thêm chi tiết của từng bài đăng, gửi yêu cầu tới công ty
− Trang sản phẩm: Danh mục các sản phẩm
Mẫu gửi thông tin yêu cầu tới công ty
Danh mục các sản phẩm Đồ án thiết kế
− Trang thông tin về sản phẩm:
− Thông Tin Sản Phẩm: Bài đăng thông tin về sản phẩm, các hình ảnh liên quan về sản phẩm
− Sản Phẩm Tương Tự: Danh sách các sản phẩm tương tự
Bài đăng thông tin về sản phẩm Đồ án thiết kế
− Trang báo giá: Thông tin báo giá của từng loại sản phẩm
− Trang tin tức: Danh mục các tin tức
− Trang chi tiết tin tức:
− Tin Tức: Bài đăng về tin tức
− Các tin tức khác: Danh sách các tin khác
Bài đăng tin tức Đồ án thiết kế
− Trang công trình đã hoàn thiện: Danh mục các công trình đã hoàn thiện
− Trang thông tin về công trình:
− Thông Tin Công Trình: Bài đăng thông tin về công trình, các hình ảnh về công trình đã hoàn thiện
− Danh Sách Các Công Trình Khác: Danh sách các công trình khác
Danh sách các công trình khác Đồ án thiết kế
TỔNG QUAN CHỨC NĂNG WEBSITE
Quan Điểm Của Sản Phẩm
− Giao diện thân thiện, đẹp mắt
− Giúp người dùng tìm kiếm thông tin dễ dàng
− Tính bảo mật website cao.
Chức Năng Sản Phẩm
− Tìm kiếm thông tin về sản phẩm
− Gửi yêu cầu nhận báo giá
− Lọc các loại sản phẩm mong muốn
− Đánh giá, nhận xét bài đăng về sản phẩm
− Các chức năng riêng biệt dành cho admin như: quản lý bài đăng, quản lý tài khoản, nhận danh sách yêu cầu từ khách hàng.
Người Dùng
Quản lý tất cả tin đăng trên website, Admin nhận thông báo yêu cầu từ khách hàng và tự quản lý tài khoản, bao gồm cập nhật thông tin và đổi mật khẩu.
− Guest: Xem tin, tìm kiếm sản phẩm, lọc sản phẩm, nhận xét và gửi yêu cầu đến công ty Đồ án thiết kế
Các Ràng Buộc
Khách hàng chỉ có thể thực hiện 5 chức năng chính: xem tin tức, tìm kiếm sản phẩm, lọc sản phẩm, nhận xét tin và gửi yêu cầu Họ không có quyền thực hiện các hoạt động dành riêng cho quản trị viên.
YÊU CẦU CHỨC NĂNG WEBSITE
Xem tin
− Có thể xem các thông tin về công ty theo từng loại chủ đề khác nhau.
Tìm kiếm sản phẩm
− Có thể dễ dàng tìm kiếm thông tin về sản phẩm thông qua việc nhập từ khóa trên thanh tìm kiếm.
Lọc sản phẩm
− Dễ dàng lọc ra các sản phẩm thuộc những loại mong muốn một cách nhanh chóng.
Gửi yêu cầu nhận báo giá
− Hỗ trợ gửi yêu cầu dưới dạng tin nhắn đến công ty.
Nhận xét bài viết về sản phẩm
− Công khai nhận xét tất cả các bài đăng về sản phẩm của công ty.
Đăng nhập/đăng xuất
− Dành cho Admin: Đăng nhập để sử dụng tất cả quyền hạn cho việc quản lý website
Để bảo mật trang quản trị, người dùng cần thoát khỏi trang này và quay trở lại trang đăng nhập Việc truy cập vào trang quản trị thông qua đường link URL chỉ được phép khi đã đăng nhập thành công.
Quản lý các tin đăng trên website
− Dành cho Admin: Thực hiện các thao tác quản lý các tin đăng như: xem, thêm, sửa, xóa.
Nhận các thông báo yêu cầu từ khách hàng
− Dành cho Admin: Nhận danh sách những yêu cầu từ khách hàng, thông báo yêu cầu mới dưới dạng hộp thư.
Quản lý thông tin tài khoản
− Dành cho Admin: Quản lý tài khoản admin như thay đổi thông tin, đổi mật khẩu Đồ án thiết kế
MÔ HÌNH USECASE
Tác nhân
Bảng các tác nhân và quyền của tác nhân trong UseCase
STT Các Chức Năng Chính Admin Guest
1 Xem các thông tin về công ty X X
4 Lọc sản phẩm theo loại X X
5 Nhận xét bài viết về sản phẩm X X
6 Gửi yêu cầu nhận báo giá X X
7 Quản lý các tin đăng X
8 Nhận thông báo yêu cầu từ khách hàng
9 Quản lý thông tin tài khoản X
Các yêu cầu chức năng
Bảng các yêu cầu chức năng hệ thống
Chức Năng Hệ Thống Yêu Cầu Chức Năng Ký Hiệu Đăng nhập/Đăng xuất Đăng nhập UC_1.1 Đăng xuất UC_1.2
Xem các tin được đăng trên trang chủ UC_2.1 Xem chi tiết danh mục tin UC_2.2
Xem chi tiết tin đăng UC_2.3 Đồ án thiết kế
Hiển thị tiêu đề các tin liên quan UC_2.4 Tìm/Lọc Sản Phẩm
Tìm kiếm sản phẩm UC_3.1
Nhận Xét Bài Đăng Đăng nhận xét UC_4.1
Gửi Yêu Cầu Báo Giá
Gửi yêu cầu nhận báo giá sản phẩm UC_5.1 Quản Lý Tài Khoản
Cập nhập thông tin UC_6.1
Thay đổi mật khẩu UC_6.2
Nhận Thông Báo Yêu Cầu
Nhận thông báo yêu cầu mới UC_7.1 Xem danh sách các yêu cầu UC_7.2
Xem chi tiết yêu cầu UC_7.3
Xem danh sách tin đăng UC_8.1
Xóa tin đăng UC_8.4 Đồ án thiết kế
Lược Đồ Use Case
Lượt đồ tổng quan usecase Đồ án thiết kế
Chi Tiết Các Use Case
Bảng chi tiết các UseCase
Goal Đăng nhập thành công với tài khoản được cấp trước
(Thành công) 1 Hệ thống yâu cầu người truy cập cung cấp thông tin đăng nhập đã được cấp từ trước là tên đăng nhập và mật khẩu
2 Sau khi người truy cập điền đẩy đủ, sau đó nhấn vào nút đăng nhập
3 Hệ thống sẽ so sánh dữ liệu nhập vào với tên đăng nhập và mật khẩu được mã hóa với dữ liệu đã được cấp trong Database Nếu dữ liệu được cung cấp chính xác => Đăng nhập thành công, hệ thống sẽ trả về trang quản trị admin
(Thất bại) Đồ án thiết kế
1 Hệ thống yâu cầu người truy cập cung cấp thông tin đăng nhập đã được cấp từ trước là tên đăng nhập và mật khẩu
2 Sau khi người truy cập điền đẩy đủ sau, đó nhấn vào nút đăng nhập
3 Hệ thống sẽ so sánh dữ liệu nhập vào với tên đăng nhập và mật khẩu được mã hóa với dữ liệu đã được cấp trong Database Nếu dữ liệu được cung cấp sai, không trùng khớp Hệ thống sẽ trả lại trang đăng nhập với thông báo “Tên Đăng Nhập Hoặc Mật Khẩu Không Đúng”
Goal Đăng xuất tài khoản thành công chỉ khi đã đăng nhập
Pre-conditions Đã đăng nhập thành công (UC_1.1) và chưa đăng xuất sau đó Post-conditions
Basic flow Đồ án thiết kế
(Thành công) 1 Người dùng nhấp vào logo avatar người dùng
2 Hệ thống sẽ hiện ra một danh sách chức năng trong đó có nút đăng xuất sau đó nhấp vào đăng xuất
3 Hệ thống sẽ lập tức kết thúc section và quay lại trang đăng nhập
1 Không có Nút đăng xuất chỉ hiện lên khi người try cập đã đăng nhập thành công sau đó
Name Xem các tin được đăng trên trang chủ
Goal Các tin đăng được in lên trang chủ
(Thành công) 1 Truy cập vào đường dẫn Website
2 Tất cả tin đăng ở trang chủ với sắp xếp theo từng mục tương ứng với loại tin đó Một số tin đăng sẽ xuất hiện như tiêu đề tin để dẫn đến phần chi tiết của tin Một số Đồ án thiết kế
34 tin xuất hiện đóng vai trò làm danh mục cho những tin tương ứng Còn lại sẽ xuất hiện dưới dạng bài viết ngay trên trang
1 Không có tin đăng nào được hiển thị
Name Xem chi tiết mục tin
Goal Chuyển hướng đến trang chứa các tiêu đề tin thuộc mục tin được chọn
(Thành công) 1 Truy cập vào đường dẫn Website
2 Nhấp vào một mục tin bất kì trong danh sách mục tin
3 Hệ thống chuyển hướng đến trang chứa các tiêu đề tin thuộc mục tin được chọn
Alternativeflow Đồ án thiết kế
(Thất bại) 1 Truy cập vào đường dẫn Website
2 Nhấp vào một mục tin bất kì trong danh sách mục tin
3 Hệ thống ko có phản hồi Hoặc chuyển hướng lỗi
Name Xem chi tiết tin đăng
Goal Chuyển hướng đến trang chi tiết tin đăng với đầy đủ thông tin
(Thành công) 1 Truy cập vào đường dẫn Website
2 Nhấp vào một tiêu đề tin bất kỳ
3 Hệ thống sẽ chuyển hướng tới trang của tin vừa chọn Với đầy đủ thông tin chi tiết
Alternativeflow Đồ án thiết kế
(Thất bại) 1 Truy cập vào đường dẫn Website
2 Nhấp vào một tin bất kỳ
3 Hệ thống ko có phản hồi Hoặc chuyển hướng lỗi
Name Hiển thị tiêu đề các tin liên quan
Goal Hiển thị danh sách các tiêu đề tin có cùng loại mục tin với trang chi tiết tin đang truy cập
(Thành công) 1 Truy cập vào đường dẫn Website
2 Nhấp vào một tiêu đề tin bất kỳ
3 Hệ thống sẽ chuyển hướng tới trang của tin vừa chọn Với đầy đủ thông tin chi tiết cùng danh sách các tiêu đề tin có cùng loại mục với tin được truy cập Đồ án thiết kế
(Thất bại) 1 Truy cập vào đường dẫn Website
2 Nhấp vào một tin bất kỳ
3 Hệ thống sẽ chuyển hướng tới trang của tin vừa chọn Với đầy đủ thông tin chi tiết nhưng không hiển thị danh sách các tiêu đề tin có cùng loại mục với tin được truy cập hoặc danh sách không đúng
Name Tìm kiếm sản phẩm
Goal Hiển thị danh sách sản phẩm tương ứng với từ khóa được nhập
(Thành công) 1 Truy cập vào đường dẫn Website
2 Chọn công cụ tìm kiếm sản phẩm Đồ án thiết kế
3 Nhập từ khóa sản phẩm muốn tìm vào thanh tìm kiếm
4 Hệ thống trả về danh sách tên các sản phẩm tưng ứng với từ khóa được cung cấp
(Thất bại) 1 Truy cập vào đường dẫn Website
2 Chọn công cụ tìm kiếm sản phẩm
3 Nhập từ khóa sản phẩm muốn tìm vào thanh tìm kiếm
4 Hệ thống không phản hồi, hoặc phản hồi nhưng ko trả lại dữ liệu đúng
Goal Lọc ra danh sách sản phẩm theo những chủ đề được chọn
Flow of events Đồ án thiết kế
(Thành công) 1 Truy cập vào đường dẫn Website
2 Chọn mục loại sản phẩm
3 Hệ thống điều hướng đến trang danh sách loại sản phẩm
4 Tích chọn vào những chủ đề muốn lọc
5 Hệ thống sẽ trả về danh sách các sản phẩm tương ứng với những chủ đề được chọn
(Thất bại) 1 Truy cập vào đường dẫn Website
2 Chọn mục loại sản phẩm
3 Hệ thống điều hướng đến trang danh sách loại sản phẩm
4 Tích chọn vào những chủ đề muốn lọc
5 Hệ thống không phản hồi, hoặc phản hồi nhưng ko trả lại dữ liệu đúng
Extension Không có Đồ án thiết kế
Goal Đăng nhận xét về một bài đăng sản phẩm bất kỳ
(Thành công) 1 Truy cập vào đường dẫn Website
2 Nhấp vào một tiêu đề tin bất kỳ
3 Hệ thống sẽ chuyển hướng tới trang chi tiết tin đăng
5 Hệ thống sẽ yêu cầu điền đầy đủ thông tin như là tên người nhận xét và nội dung nhận xét
6 Sau khi điền đầy đủ thông tin, nhấn nút nhận xét
7 Hệ thống sẽ đăng bài nhận xét trong trang chi tiết tin đăng đó Đồ án thiết kế
(Thất bại) 1 Truy cập vào đường dẫn Website
2 Nhấp vào một tiêu đề tin bất kỳ
3 Hệ thống sẽ chuyển hướng tới trang chi tiết tin đăng
5 Hệ thống sẽ yêu cầu điền đầy đủ thông tin như là tên người nhận xét và nội dung nhận xét
6 Sau khi điền đầy đủ thông tin, nhấn nút nhận xét
7 Hệ thống không đăng bài nhận xét
Name Gửi yêu cầu nhận báo giá sản phẩm
Goal Gửi tin nhắn thông báo yêu cầu nhận báo giá tới công ty
Basic flow Đồ án thiết kế
(Thành công) 1 Truy cập vào đường dẫn Website
2 Chọn nút “Nhận Báo Giá”
3 Hệ thống sẽ đưa ra một mẫu đơn đăng ký nhận báo giá với các thông tin yêu cầu như họ tên, số điện thoại, địa chỉ và nội dung yêu cầu
4 Sau khi điền đầy đủ các trường yêu cầu, nhấn nút xác nhận
5 Hệ thống chuyển yêu cầu đến trang quản trị của admin
6 Hệ thống trả về thông báo “Đăng ký nhận báo giá thành công”
(Thất bại) 1 Truy cập vào đường dẫn Website
2 Chọn nút “Nhận Báo Giá”
3 Hệ thống sẽ đưa ra một mẫu đơn đăng ký nhận báo giá với các thông tin yêu cầu như họ tên, số điện thoại, địa chỉ và nội dung yêu cầu Đồ án thiết kế
4 Sau khi điền đầy đủ các trường yêu cầu, nhấn nút xác nhận
5 Hệ thống không phản hồi hoặc không trả về bất kỳ thông báo nào
Name Cập nhập thông tin
Goal Thay đổi thông tin tài khoản
Pre-conditions Đã đăng nhập thành công (UC_1.1) và chưa đăng xuất sau đó Post-conditions
(Thành công) 1 Người dùng nhấp vào logo avatar người dùng
2 Hệ thống sẽ hiện ra một danh sách chức năng trong đó có nút cập nhập thông tin, chọn chức năng cập nhập thông tin Đồ án thiết kế
3 Hệ thống sẽ chuyển hướng đến trang cập nhập thông tin và hiển thị các thông tin đã được thiết lập lần trước trên trang như tên đăng nhập, tên người dùng
4 Người dùng tùy ý thay đổi thông tin được thiết lập lần trước, sau đó nhấn nút cập nhập
5 Hệ thống thay đổi thông tin của bản user trong Database, và sau đó xuất ra thông báo cập nhập thành công
(Thất bại) 1 Người dùng nhấp vào logo avatar người dùng
2 Hệ thống sẽ hiện ra một danh sách chức năng trong đó có nút cập nhập thông tin, chọn chức năng cập nhập thông tin
3 Hệ thống sẽ chuyển hướng đến trang cập nhập thông tin và hiển thị các thông tin đã được thiết lập lần trước trên trang như tên đăng nhập, tên người dùng
4 Người dùng tùy ý thay đổi thông tin được thiết lập lần trước, sau đó nhấn nút cập nhập
5 Hệ thống không phản hồi hoặc xuất ra thông báo các trường nhập bị lỗi Đồ án thiết kế
Name Thay đổi mật khẩu
Goal Thay đổi thông tin mật khẩu tài khoản
Pre-conditions Đã đăng nhập thành công (UC_1.1) và chưa đăng xuất sau đó Post-conditions
(Thành công) 1 Người dùng nhấp vào logo avatar người dùng
2 Hệ thống sẽ hiện ra một danh sách chức năng trong đó có nút cập nhập thông tin, chọn chức năng cập nhập thông tin
3 Hệ thống sẽ chuyển hướng đến trang cập nhập thông tin
4 Người dùng tích chọn vào checkbox đổi mật khẩu, sau đó hai phần mật khẩu và xác nhận mật khẩu sẽ sáng lên Đồ án thiết kế
5 Người dùng đặt mật khẩu mới trong phần mật khẩu và nhập lại mật khẩu mới trong phần xác nhận mật khẩu, sau đó nhấn nút cập nhập
6 Hệ thống thay đổi thông tin mật khẩu của bản user trong Database, và sau đó xuất ra thông báo cập nhập thành công
(Thất bại) 1 Người dùng nhấp vào logo avatar người dùng
2 Hệ thống sẽ hiện ra một danh sách chức năng trong đó có nút cập nhập thông tin, chọn chức năng cập nhập thông tin
3 Hệ thống sẽ chuyển hướng đến trang cập nhập thông tin
4 Người dùng tích chọn vào checkbox đổi mật khẩu, sau đó hai phần mật khẩu và xác nhận mật khẩu sẽ sáng lên
5 Người dùng đặt mật khẩu mới trong phần mật khẩu và nhập lại mật khẩu mới trong phần xác nhận mật khẩu, sau đó nhấn nút cập nhập
6 Hệ thống không phản hồi hoặc xuất ra thông báo các trường nhập bị lỗi Đồ án thiết kế
Name Nhận thông báo yêu cầu mới
Goal Thông báo các yêu cầu mới chưa xem từ khách hàng
Pre-conditions Đã đăng nhập thành công (UC_1.1) và chưa đăng xuất sau đó Post-conditions
(Thành công) 1 Biểu tượng lá thư bên cạnh logo người dùng sẽ hiện thông báo số yêu cầu từ khách hàng chưa được xem
2 Nhấn vào biểu tượng lá thư, sau đó hệ thống sẽ hiện ra một hộp danh sách chứa các tóm tắt về những yêu cầu chưa được đọc
(Thất bại) 1 Biểu tượng lá thư bên cạnh logo người dùng sẽ hiện thông báo số yêu cầu từ khách hàng chưa được xem Đồ án thiết kế
2 Nhấn vào biểu tượng lá thư, hệ thống không hiện ra bất kỳ danh sách nào mặc dù số yêu cầu chưa đọc lớn hơn 0
Name Xem danh sách các yêu cầu
Goal Hiển thị tất cả danh sách yêu cầu nhận báo giá từ khách hàng
Pre-conditions Đã đăng nhập thành công (UC_1.1) và chưa đăng xuất sau đó Post-conditions
(Thành công) 1 Nhấn vào biểu tượng lá thư bên cạnh logo người dùng, sau đó chọn mục xem tất cả ở vị trí dưới cùng
2 Hệ thống trả về trang danh sách tất cả các yêu cầu nhận báo giá của khách hàng từ trước đến nay
(Thất bại) Đồ án thiết kế
1 Nhấn vào biểu tượng lá thư bên cạnh logo người dùng, sau đó chọn mục xem tất cả ở vị trí dưới cùng
2 Hệ thống không phản hồi hoặc trả về sai trang
Name Xem chi tiết yêu cầu
Goal Hiển thị chi tiết nội dung yêu cầu nhận báo giá từ khách hàng
Pre-conditions Đã đăng nhập thành công (UC_1.1) và chưa đăng xuất sau đó Post-conditions
(Thành công) 1 Nhấn vào biểu tượng lá thư bên cạnh logo người dùng, sau đó chọn mục xem tất cả ở vị trí dưới cùng
2 Hệ thống trả về trang chứa danh sách tất cả các yêu cầu nhận báo giá của khách hàng
3 Chọn một yêu cầu bất kỳ trong danh sách Đồ án thiết kế
4 Hệ thống trả về trang nội dung chi tiết của yêu cầu đó
(Thất bại) 1 Nhấn vào biểu tượng lá thư bên cạnh logo người dùng, sau đó chọn mục xem tất cả ở vị trí dưới cùng
2 Hệ thống trả về trang chứa danh sách tất cả các yêu cầu nhận báo giá của khách hàng
3 Chọn một yêu cầu bất kỳ trong danh sách
4 Hệ thống không phản hồi hoặc trả về sai trang
Name Xem danh sách tin đăng
Goal Hiển thị danh sách các bài đăng tương ứng với mục bài đăng được chọn
Pre-conditions Đã đăng nhập thành công (UC_1.1) và chưa đăng xuất sau đó Post-conditions
Basic flow Đồ án thiết kế
(Thành công) 1 Chọn mục bài đăng bất kỳ
2 Hệ thống sẽ hiện ra danh sách chức năng trong đó có chức năng xem danh sách, chọn chức năng xem danh sách
3 Sau khi đã chọn, hệ thống lập tức điều hướng đến trang danh sách tin đăng tương ứng với mục tin đăng được chọn trước đó
(Thất bại) 1 Chọn mục bài đăng bất kỳ
2 Hệ thống sẽ hiện ra danh sách chức năng trong đó có chức năng xem danh sách, chọn chức năng xem danh sách
3 Sau khi đã chọn, hệ thống không phản hồi hoặc chuyển hướng sai trang
Name Thêm tin đăng Đồ án thiết kế
Goal Thêm tin đăng mới tương ứng với mục tin đăng được chọn lên website
Pre-conditions Đã đăng nhập thành công (UC_1.1) và chưa đăng xuất sau đó Post-conditions
(Thành công) 1 Chọn mục bài đăng bất kỳ
2 Hệ thống sẽ hiện ra danh sách chức năng trong đó có chức năng thêm tin đăng, chọn chức năng thêm tin đăng
3 Sau khi đã chọn, hệ thống lập tức điều hướng đến trang thêm tin đăng tương ứng với mục tin đăng được chọn trước đó
4 Tại trang thêm tin đăng, người dùng phải nhập các thông tin bắt buộc vào các trường của tin đăng như là tên tin, tóm tắt, hình ảnh, nội dung, …
5 Sau khi đã nhập thông tin đầy đủ, nhấn nút thêm
6 Hệ thống sẽ thêm tin đăng mới vào Database và in tin đăng đó lên website ở mục tin tương ứng với tin đăng Đồ án thiết kế
7 Xuất ra thông báo thêm thành công ở trang thêm tin đăng
(Thất bại) 1 Chọn mục bài đăng bất kỳ
2 Hệ thống sẽ hiện ra danh sách chức năng trong đó có chức năng thêm tin đăng, chọn chức năng thêm tin đăng
3 Sau khi đã chọn, hệ thống lập tức điều hướng đến trang thêm tin đăng tương ứng với mục tin đăng được chọn trước đó
4 Tại trang thêm tin đăng, người dùng phải nhập các thông tin bắt buộc vào các trường của tin đăng như là tên tin, tóm tắt, hình ảnh, nội dung, …
5 Sau khi đã nhập thông tin đầy đủ, nhấn nút thêm
6 Hệ thống không phản hồi hoặc xuất hiện thông báo trường nhập bị lỗi hoặc xuất hiện thông báo thành công nhưng trên website vẫn chưa in tin mới đăng
Use Case ID UC_8.3 Đồ án thiết kế
Goal Sửa tin đăng tương ứng với mục tin đăng được chọn trên website
Pre-conditions Đã đăng nhập thành công (UC_1.1) và chưa đăng xuất sau đó Post-conditions
(Thành công) 1 Chọn mục bài đăng bất kỳ
2 Hệ thống sẽ hiện ra danh sách chức năng trong đó có chức năng xem danh sách, chọn chức năng xem danh sách
3 Sau khi đã chọn, hệ thống lập tức điều hướng đến trang danh sách tin đăng tương ứng với mục tin đăng được chọn trước đó
4 Tại trang danh sách tin đăng, tại một tin đăng bất kỳ trong danh sách, chọn chức năng sửa
5 Hệ thống điều hướng đến trang sửa tin đăng và hiển thị các thông tin về tin đăng được thiết lập trước đó như tên tin, tóm tắt, hình ảnh, nội dung, … Đồ án thiết kế
6 Người dùng tùy ý thay đổi nội dung các trường trong trang sửa tin đăng Sau đó nhấn nút sửa
7 Hệ thống sẽ sửa tin đăng được chọn trong Database và cập nhập lại tin đăng đó trên website
8 Xuất ra thông báo sửa thành công ở trang sửa tin đăng
(Thất bại) 1 Chọn mục bài đăng bất kỳ
2 Hệ thống sẽ hiện ra danh sách chức năng trong đó có chức năng xem danh sách, chọn chức năng xem danh sách
3 Sau khi đã chọn, hệ thống lập tức điều hướng đến trang danh sách tin đăng tương ứng với mục tin đăng được chọn trước đó
4 Tại trang danh sách tin đăng, tại một tin đăng bất kỳ trong danh sách, chọn chức năng sửa
5 Hệ thống điều hướng đến trang sửa tin đăng và hiển thị các thông tin về tin đăng được thiết lập trước đó như tên tin, tóm tắt, hình ảnh, nội dung, … Đồ án thiết kế
6 Người dùng tùy ý thay đổi nội dung các trường trong trang sửa tin đăng Sau đó nhấn nút sửa
7 Hệ thống không phản hồi hoặc xuất hiện thông báo trường nhập bị lỗi hoặc xuất hiện thông báo thành công nhưng trên website tin đăng vẫn chưa được cập nhập
Goal Xóa tin đăng tương ứng với mục tin đăng được chọn trên website
Pre-conditions Đã đăng nhập thành công (UC_1.1) và chưa đăng xuất sau đó Post-conditions
(Thành công) 1 Chọn mục bài đăng bất kỳ
2 Hệ thống sẽ hiện ra danh sách chức năng trong đó có chức năng xem danh sách, chọn chức năng xem danh sách Đồ án thiết kế
3 Sau khi đã chọn, hệ thống lập tức điều hướng đến trang danh sách tin đăng tương ứng với mục tin đăng được chọn trước đó
4 Tại trang danh sách tin đăng, tại một tin đăng bất kỳ trong danh sách, chọn chức năng xóa
5 Hệ thống xóa tin đăng đó khỏi Database và cập nhập lại trên website
6 Xuất ra thông báo xóa thành công ở trang danh sách tin đăng
(Thất bại) 1 Chọn mục bài đăng bất kỳ
2 Hệ thống sẽ hiện ra danh sách chức năng trong đó có chức năng xem danh sách, chọn chức năng xem danh sách
3 Sau khi đã chọn, hệ thống lập tức điều hướng đến trang danh sách tin đăng tương ứng với mục tin đăng được chọn trước đó
4 Tại trang danh sách tin đăng, tại một tin đăng bất kỳ trong danh sách, chọn chức năng xóa Đồ án thiết kế
5 Hệ thống không phản hồi hoặc xuất hiện thông báo thành công nhưng trên website tin đăng vẫn chưa được xóa
Extension Không có Đồ án thiết kế
THIẾT KẾ WEBSITE
Thiết kế cơ sở dữ liệu
5.1.1 Lược đồ cơ sở dữ liệu
Tên trường Kiểu dữ liệu Mô tả id Int Xác định từng bản ghi riêng
Lượt đồ cơ sở dữ liệu Đồ án thiết kế
Bài viết này trình bày cấu trúc cơ sở dữ liệu cho tài khoản người dùng, bao gồm các trường quan trọng như: "Tên đăng nhập" (tenuser) với kiểu dữ liệu VarChar, "Tên hiển thị" của người dùng cũng với kiểu VarChar, "Mật khẩu" được mã hóa (password) với kiểu VarChar, và thời gian tạo tài khoản (created_at) cùng thời gian sửa đổi tài khoản (updated_at) đều sử dụng kiểu TimeStamp.
Tên trường Kiểu dữ liệu Mô tả
ID Int Xác định từng bản ghi riêng
TenCT Text Tên công ty
DiaChi Text Địa chỉ của công ty
SDT VarChar Số điện thoại liên hệ công ty
FB VarChar Facebook liên hệ công ty
Email VarChar Email liên hệ công ty
HinhAnh VarChar Hình ảnh về công ty
GioiThieu MediumText Bài đăng giới thiệu về công ty
Tên trường Kiểu dữ liệu Mô tả
ID Int Xác định từng bản ghi riêng
TenTP Text Tên thành phẩm đã hoàn thiện
DiaChi Text Địa chỉ của khách hàng
TomTat Text Tóm tắt về bài đăng thành phẩm
NoiDung MediumText Nội dung bài đăng thành phẩm
TenKH Text Tên khách hàng Đồ án thiết kế
NhanXet Text Nhận xét của khách hàng về thành phẩm
AnhKH VarChar Ảnh khách hàng
AnhTP VarChar Ảnh thành phẩm
Tên trường Kiểu dữ liệu Mô tả
ID Int Xác định từng bản ghi riêng
Khách hàng vui lòng cung cấp họ tên, địa chỉ, và số điện thoại để nhận báo giá Ngoài ra, xin hãy ghi chú nội dung yêu cầu của mình để chúng tôi có thể phục vụ tốt nhất.
DaXem Int cho phép người dùng đánh dấu tin yêu cầu đã đọc hay chưa Thông tin về thời gian yêu cầu được tạo ra được lưu trữ trong trường created_at dưới dạng TimeStamp, trong khi thời gian sửa đổi yêu cầu được ghi lại trong trường updated_at cũng dưới dạng TimeStamp.
Tên trường Kiểu dữ liệu Mô tả
ID Int Xác định từng bản ghi riêng
TenSP Text Tên sản phẩm công ty cung cấp
TomTat Text Tóm tắt về bài đăng
MoTa MediumText Nội dung bài đăng
NhaSX Text Nhà sản xuất ra sản phẩm mà công ty cung cấp AnhTD Varchar Ảnh đại diện sản phẩm
NoiBat Int Đánh dấu sản phẩm có nổi bật hay không Đồ án thiết kế
Tên trường Kiểu dữ liệu Mô tả
ID Int Xác định từng bản ghi riêng
TenLoai Text Tên loại sản phẩm công ty cung cấp
MoTa Text Mô tả về loại sản phẩm
HinhAnh VarChar Hình ảnh loại sản phẩm
Tên trường Kiểu dữ liệu Mô tả
ID Int xác định từng bản ghi riêng, sanpham_id Int là ID sản phẩm liên kết với bản sản phẩm, và loaisanpham_id Int là ID loại sản phẩm liên kết với bản loại sản phẩm.
Tên trường Kiểu dữ liệu Mô tả
ID Int Xác định từng bản ghi riêng
IDSanPham Int ID sản phẩm liên kết với ID của bản sanpham HinhAnh Varchar Hình ảnh của sản phẩm
Tên trường Kiểu dữ liệu Mô tả
ID Int Xác định từng bản ghi riêng Đồ án thiết kế
IDSanPham Int ID sản phẩm liên kết với ID của bản sanpham
HoTen Text Họ tên người đăng nhận xét
NoiDung Text Nội dung nhận xét created_at TimeStamp Thời gian nhận xét được tạo updated_at TimeStamp Thời gian nhận xét được sửa Đồ án thiết kế
Mối quan hệ giữa các bản dữ liệu
Các bản dữ liệu có mối quan hệ với nhau
Thiết kế giao diện Website – Front-End
Trang chủ website Viko Đồ án thiết kế
Mục giới thiệu trên trang chủ
Mục sản phẩm trên trang chủ Đồ án thiết kế
Mục sản phẩm nổi bật trên trang chủ
Mục tiêu chí hoạt động trên trang chủ Đồ án thiết kế
Mục dự án đã thực hiên trên trang chủ
Mục khách hàng nói về chúng tôi trên trang chủ Đồ án thiết kế
Mục liên hệ trên trang chủ
+ Trang danh sách sản phẩm
Trang danh sách sản phẩm Đồ án thiết kế
Mục lọc sản phẩm trên trang danh sách sản phẩm
+ Trang chi tiết sản phẩm
Trang chi tiết sản phẩm Đồ án thiết kế
Mục bài viết trên trang chi tiết sản phẩm
Mục bài viết trên trang chi tiết sản phẩm Đồ án thiết kế
Mục nhận xét cùng mục sản phẩm cùng loại trên trang chi tiết sản phẩm
+ Trang danh sách dự án thực hiện
Trang danh sách dự án đã thưc hiện Đồ án thiết kế
Mục các danh sách dự án đã thực hiện trên trang dự án đã thực hiện
+ Trang chi tiết dự án
Trang chi tiết dự án Đồ án thiết kế
Mục bài viết trên trang chi tiết dự án
Mục các dự án khác trên trang chi tiết dự án
Trang đăng nhập Admin Đồ án thiết kế
+ Trang thêm loại sản phẩm (Admin)
Trang thêm loại sản phẩm
Trang Admin Đồ án thiết kế
+ Trang danh sách loại sản phẩm (Admin)
Trang danh sách loại sản phẩm
+ Trang sửa loại sản phẩm(Admin)
Trang sửa loại sản phẩm Đồ án thiết kế
+ Trang thêm sản phẩm (Admin)
Trang thêm sản phẩm Đồ án thiết kế
+ Trang danh sách sản phẩm (Admin)
Trang danh sách sản phẩm Đồ án thiết kế
+ Trang sửa sản phẩm (Admin)
Trang sửa sản phẩm Đồ án thiết kế
+ Trang cập nhập hình ảnh sản phẩm liên quan (Admin)
Trang cập nhập hình ảnh sản phẩm liên quan Đồ án thiết kế
+ Trang thêm dự án đã thực thiện (Admin)
Trang thêm dự án đã thực hiện Đồ án thiết kế
+ Trang danh sách dự án đã thực thiện (Admin)
Trang danh sách dự án đã thực hiện Đồ án thiết kế
+ Trang sửa dự án đã thực thiện (Admin)
Trang sửa dự án đã thực hiện Đồ án thiết kế
+ Trang cập nhập thông tin công ty (Admin)
Trang cập nhật thông tin công ty Đồ án thiết kế
+ Trang danh sách yêu cầu báo giá sản phẩm (Admin)
Trang danh sách yêu cầu báo giá
+ Trang sửa thông tin tài khoản (Admin)
Trang sửa thông tin tài khoản
+ Trang báo lỗi Not Found
Trang báo lỗi Not Found khi không tìm thấy trang Đồ án thiết kế
Lập trình Website – Back-End với Laravel
− Tạo các Route định hướng request cho trang người dùng:
− Route::get('/home','HomeController@getHome') ->name('home');
− Route::post('/tim-kiem', 'HomeController@postSearchAjax')-
− Route::post('/nhan-bao-gia', 'HomeController@postBaoGia')-
− Route::get('/du-an','ShowDuAnController@getDuAn') -
− Route::get('/du-an/chi- tiet/{id}','ShowDuAnController@getChiTiet') -
− Route::get('/san- pham/{id?}','ShowSanPhamController@getDanhSach') -
− Route::get('/san-pham/chi- tiet/{id}','ShowSanPhamController@getChiTiet') -
− Route::post('/san-pham/chi-tiet/them-nhan- xet/{id}','ShowSanPhamController@postNhanXet') -
− Tạo các Route định hướng request kết hợp cùng Middleware để kiểm tra đăng nhập cho trang admin:
− Route::get('/admin/dang-nhap','UserController@getDangNhap');
− Route::post('/admin/dang-nhap','UserController@postDangNhap')-
>name('postdangnhap'); Đồ án thiết kế
− Route::get('/admin/dang-xuat','UserController@getDangXuat')-
− Route::group(['prefix'=>'admin','middleware'=>'AdminLogin'],funct ion () {
− Route::group(['prefix'=>'loai-san-pham'],function () {
− Route::get('/danh-sach','TheLoaiController@getDanhSach') -
− Route::get('/them','TheLoaiController@getThem') -
− Route::post('/them','TheLoaiController@postThem') -
− Route::get('/sua/{id}','TheLoaiController@getSua') -
− Route::post('/sua/{id}','TheLoaiController@postSua') -
− Route::get('/xoa/{id}','TheLoaiController@postXoa') -
− Route::group(['prefix'=>'du-an-da-thuc-hien'],function () {
− Route::get('/danh-sach','DuAnController@getDanhSach') -
− Route::get('/them','DuAnController@getThem') -
− Route::post('/them','DuAnController@postThem') -
>name('postthemduan'); Đồ án thiết kế
− Route::get('/sua/{id}','DuAnController@getSua') -
− Route::post('/sua/{id}','DuAnController@postSua') -
− Route::get('/xoa/{id}','DuAnController@postXoa') -
− Route::get('/noi-dung/{id}','DuAnController@getNoiDung') -
− Route::group(['prefix'=>'thong-tin-cong-ty'],function () {
− Route::get('/sua/{id}','InfoCtController@getSua') -
− Route::post('/sua/{id}','InfoCtController@postSua') -
− Route::group(['prefix'=>'san-pham'],function () {
− Route::get('/danh-sach','SanPhamController@getDanhSach') -
− Route::get('/them','SanPhamController@getThem') -
− Route::post('/them','SanPhamController@postThem') -
− Route::get('/sua/{id}','SanPhamController@getSua') -
− Route::post('/sua/{id}','SanPhamController@postSua') -
>name('postsuasanpham'); Đồ án thiết kế
− Route::get('/xoa/{id}','SanPhamController@postXoa') -
− Route::get('/xoacmt/{id}','SanPhamController@postXoaCmt') -
− Route::get('/noi- dung/{id}','SanPhamController@getNoiDung') -
− Route::get('/tom-tat/{id}','SanPhamController@getTomTat') -
− Route::get('/hinh- anh/{id}','SanPhamController@getHinhAnh') -
− Route::post('/hinh- anh/{id}','SanPhamController@postHinhAnh') -
− Route::group(['prefix'=>'user'],function () {
− Route::get('/sua/{id}','UserController@getSua') -
− Route::post('/sua/{id}','UserController@postSua') -
− Route::group(['prefix'=>'bao-gia'],function () {
− Route::get('/danh-sach','BaoGiaController@getDanhSach') -
>name('dsbaogia'); Đồ án thiết kế
− Route::get('/xoa/{id}','BaoGiaController@postXoa') -
− Route::get('/chi-tiet/{id}','BaoGiaController@getChiTiet') -
− Tạo Middleware AdminLogin để xác nhận đăng nhập:
− use Illuminate\Support\Facades\Auth;
− * @param \Illuminate\Http\Request $request
− public function handle($request, Closure $next)
− if(Auth::check()){ Đồ án thiết kế
− return redirect("admin/dang-nhap");
Để thao tác với cơ sở dữ liệu một cách dễ dàng, cần tạo các Eloquent ORM tương ứng với từng bảng trong Database, mỗi bảng sẽ trở thành một Model.
+ use Illuminate\Database\Eloquent\Model;
+ use Illuminate\Database\Eloquent\Model; +
+ use Illuminate\Database\Eloquent\Model; +
+ use Illuminate\Contracts\Auth\MustVerifyEmail;
+ use Illuminate\Foundation\Auth\User as Authenticatable; +
+ class tai_khoan extends Authenticatable
+ * The attributes that are mass assignable
+ * The attributes that should be hidden for arrays + *
+ use Illuminate\Database\Eloquent\Model;
+ public function loaisanpham(){ Đồ án thiết kế
>belongsToMany('App\loaisanpham','loaisanpham_sanpham','sa npham_id','loaisanpham_id');
>hasMany('App\hinhsanpham','IDSanPham','ID');
+ return $this -> hasMany('App\nhanxet','IDSanPham','ID'); + }
+ use Illuminate\Database\Eloquent\Model;
>belongsToMany('App\sanpham','loaisanpham_sanpham','loaisa npham_id','sanpham_id');
+ use Illuminate\Database\Eloquent\Model;
+ return $this -> belongsTo('App\sanpham','IDSanPham','ID'); Đồ án thiết kế
+ use Illuminate\Database\Eloquent\Model;
+ return $this -> belongsTo('App\sanpham','IDSanPham','ID'); + }
− Tạo các Controller để xử lý, điều hướng giữa Model và View sau khi nhận request thông qua Route từ trình duyệt: Đồ án thiết kế
+ return view('admin.baogia.danhsachbaogia',['dsbaogias'=>$ baogias]);
+ public function postXoa(Request $request){
+ return redirect('admin/bao-gia/danh-sach') -
>with('thongbao','Xóa thành công');
+ return view('admin.erorr.notfound'); Đồ án thiết kế
+ public function getChiTiet(Request $request){
+ return view('admin.baogia.chitietbaogia',['ctbaogia'=>$ctbao gia]);
+ return view('admin.erorr.notfound');
+ return view('admin.thanhpham.danhsachduan',['thanhphams' => $thanhpham]);
+ return view('admin.thanhpham.themduan');
+ public function postThem(Request $request){
+ else if($request ->input('anhtieude')!="" && $request -
>input('noidung')!="" && $request ->input('nhanxet')!=""){ + $this -> validate($request,[
+ 'tenduan' =>'required|min:2|max:50', Đồ án thiết kế
+ 'tenduan.required'=>'Bạn chưa nhập tên dự án',
+ 'tenduan.min'=>'Tên dự án phải có độ dài lớn hơn 1 ký tự',
+ 'tenduan.max'=>'Tên dự án phải có độ dài nhỏ hơn 50 ký tự', + 'diachi.required'=>'Bạn chưa nhập địa chỉ',
+ 'diachi.min'=>'Địa chỉ phải có độ dài lớn hơn 1 ký tự', + 'diachi.max'=>'Địa chỉ phải có độ dài nhỏ hơn 100 ký t ự',
Tên khách hàng là thông tin bắt buộc phải nhập, với yêu cầu độ dài tối thiểu là 2 ký tự và tối đa là 50 ký tự.
+ 'nhanxet.required'=>'Bạn chưa nhập nhận xét',
+ 'nhanxet.min'=>'Nhận xét phải có độ dài lớn hơn 1 ký t ự',
+ 'noidung.required'=>'Bạn chưa nhập nội dung', Đồ án thiết kế
+ 'noidung.min'=>'Nội dung phải có độ dài lớn hơn 1 ký tự',
+ 'tomtat.required'=>'Bạn chưa nhập tóm tắt',
+ 'tomtat.min'=>'Tóm tắt phải có độ dài lớn hơn 1 ký tự', + 'tomtat.max'=>'Tóm tắt phải có độ dài nhỏ hơn 300 ký tự',
+ return redirect('/admin/du-an-da-thuc-hien/them') -
> with('thongbao','Thêm thành công');
+ return redirect('/admin/du-an-da-thuc-hien/them')-
> with('err','Bạn cần thêm đầy đủ các trường bắt buộc');
+ public function postXoa(Request $request){
+ $image_path1 = "img/".$thanhpham -> AnhKH;
+ $image_path2 = "img/".$thanhpham -> AnhTP;
+ if (file_exists($image_path1)) {
+ if (file_exists($image_path2)) {
+ return redirect('/admin/du-an-da-thuc-hien/danh-sach') -
>with('thongbao','Xóa thành công');
+ return view('admin.erorr.notfound');
+ public function getSua(Request $request){
+ $thanhpham = thanhpham::find($query); Đồ án thiết kế
+ return view('admin.thanhpham.suaduan',['thanhpham'=>$tha nhpham]);
+ return view('admin.erorr.notfound');
+ public function postSua(Request $request){
+ else if($request ->input('tenduan')!="" && $request -
>input('nhanxet')!="" && $request ->input('noidung')!=""){ + $this -> validate($request,[
+ 'tenduan' =>'required|min:2|max:50', Đồ án thiết kế
+ 'tenduan.required'=>'Bạn chưa nhập tên dự án',
+ 'tenduan.min'=>'Tên dự án phải có độ dài lớn hơn 1 ký tự',
+ 'tenduan.max'=>'Tên dự án phải có độ dài nhỏ hơn 50 ký tự', + 'diachi.required'=>'Bạn chưa nhập địa chỉ',
+ 'diachi.min'=>'Địa chỉ phải có độ dài lớn hơn 1 ký tự', + 'diachi.max'=>'Địa chỉ phải có độ dài nhỏ hơn 100 ký t ự',
Để đảm bảo thông tin khách hàng chính xác, bạn cần nhập tên khách hàng Tên khách hàng phải có độ dài lớn hơn 1 ký tự và không vượt quá 50 ký tự.
+ 'nhanxet.required'=>'Bạn chưa nhập nhận xét',
+ 'nhanxet.min'=>'Nhận xét phải có độ dài lớn hơn 1 ký t ự',
+ 'noidung.required'=>'Bạn chưa nhập nội dung', Đồ án thiết kế
+ 'noidung.min'=>'Nội dung phải có độ dài lớn hơn 1 ký tự',
+ 'tomtat.required'=>'Bạn chưa nhập tóm tắt',
+ 'tomtat.min'=>'Tóm tắt phải có độ dài lớn hơn 1 ký tự', + 'tomtat.max'=>'Tóm tắt phải có độ dài nhỏ hơn 300 ký tự',
+ $image_path = "img/".$thanhpham -> AnhTP;
+ if (file_exists($image_path)) {
+ $image_path = "img/".$thanhpham -> AnhKH; Đồ án thiết kế
+ if (file_exists($image_path)) {
+ return view('admin.thanhpham.suaduan',['thanhpham'=>$ thanhpham]) -> with('thongbao','Sửa thành công');
+ return view('admin.thanhpham.suaduan',['thanhpham'=>$ thanhpham]) -> with('err','Bạn không được bỏ trống nội dung'); + }
+ public function getNoiDung(Request $request){
+ return view('admin.thanhpham.noidungduan',['thanhpham' > $thanhpham]);
+ return view('admin.erorr.notfound'); Đồ án thiết kế
+ return view('admin.thongtinct.thongtinct',['info'=>$info]); + }
+ public function postSua(Request $request){
+ $name = $hinhanh ->getClientOriginalName(); Đồ án thiết kế
+ else if($request ->input('tenct')!="" && $request -
>input('diachi')!=""&& $request ->input('gioithieu')!=""
>input('fb')!="" && $request ->input('email')!=""){
+ 'sdt' =>'required|numeric|digits_between:3,10',
+ 'tenct.required'=>'Bạn chưa nhập tên công ty',
+ 'tenct.min'=>'Tên công ty phải có độ dài lớn hơn 1 ký t ự',
+ 'tenct.max'=>'Tên công ty phải có độ dài nhỏ hơn 50 k ý tự', + 'diachi.required'=>'Bạn chưa nhập địa chỉ',
+ 'diachi.min'=>'Địa chỉ phải có độ dài lớn hơn 1 ký tự', Đồ án thiết kế
+ 'diachi.max'=>'Địa chỉ phải có độ dài nhỏ hơn 100 ký t ự',
+ 'sdt.required'=>'Bạn chưa nhập số điện thoại',
+ 'sdt.numeric'=>'Số điện thoại chỉ bao gồm số',
The phone number must be between 3 and 10 digits long Additionally, Facebook information is required and must be longer than 1 character but shorter than the maximum allowed length.
100 ký tự', + 'email.required'=>'Bạn chưa nhập thông tin email', + 'email.email'=>'Email không hợp lệ',
+ 'gioithieu.required'=>'Bạn chưa nhập giới thiệu',
+ 'gioithieu.min'=>'Gới thiệu phải có độ dài lớn hơn 1 ký tự',
+ if($request -> anhct !="" && $request -> anhct != $info -
+ $image_path = "img/".$info -> HinhAnh; Đồ án thiết kế
+ if (file_exists($image_path)) {
+ return view('admin.thongtinct.thongtinct',['info'=>$info]) -> with('thongbao','Sửa thành công');
+ return view('admin.thongtinct.thongtinct',['info'=>$info]) -> with('err','Bạn không được bỏ trống phần giới thiệu');
+ use Illuminate\Http\Request; Đồ án thiết kế
+ return view('admin.sanpham.danhsachsanpham',['sanphams'
+ return view('admin.sanpham.themsanpham',['loaisanphams'
+ public function postThem(Request $request){
+ $hinhanh->move($destinationPath, $name); Đồ án thiết kế
+ else if($request ->input('hinhanh')!="" && $request -
>input('noidung')!="" && $request ->input('tomtat')!=""){
+ 'tensp' =>'required|min:2|max:50|unique:sanpham,TenS P',
+ 'tensp.required'=>'Bạn chưa nhập tên sản phẩm',
Tên sản phẩm cần có độ dài từ 2 đến 49 ký tự và không được trùng lặp với các tên sản phẩm đã tồn tại.
+ 'tomtat.required'=>'Bạn chưa nhập tóm tắt',
+ 'tomtat.min'=>'Phần tóm tắt phải có độ dài lớn hơn 1 k ý tự', + 'noidung.required'=>'Bạn chưa nhập nội dung',
+ 'noidung.min'=>'Phần nội dung phải có độ dài lớn hơn
1 ký tự', + 'nhasx.required'=>'Bạn chưa nhập tên nhà sản xuất', Đồ án thiết kế
+ 'nhasx.min'=>'Phần tên nhà sản xuất phải có độ dài lớn hơn 1 ký tự',
+ 'nhasx.max'=>'Phần tên nhà sản xuất phải có độ dài nh ỏ hơn 50 ký tự', + ]);
+ $pivot= sanpham::find($sanpham ->ID);
+ foreach($request ->loaisp as $lsp){
+ return redirect('/admin/san-pham/them') -
>with('thongbao','Thêm thành công');
+ return redirect('/admin/san-pham/them') -
>with('err','Bạn cần nhập đầy đủ các trường bắt buộc'); + }
+ public function postXoa(Request $request){
+ $image_path = "img/".$sanpham -> AnhTD; +
+ if (file_exists($image_path)) {
+ return redirect('/admin/san-pham/danh-sach') -
>with('thongbao','Xóa thành công');
+ return view('admin.erorr.notfound');
+ public function postXoaCmt(Request $request){ + $query = $request ->id;
+ $cmt = nhanxet::find($query); Đồ án thiết kế
+ return redirect('/admin/san-pham/sua/'.$idsanpham) -
>with('thongbao','Xóa thành công');
+ return view('admin.erorr.notfound');
+ public function getSua(Request $request){
+ return view('admin.sanpham.suasanpham',['sanpham'=>$san pham,'loaisanphams'=>$loaisanphams,'loaidcchons'=>$loaidcch ons,'comments'=>$comments]);
+ return view('admin.erorr.notfound');
+ public function postSua(Request $request){
+ $name = $hinhanh ->getClientOriginalName(); + $destinationPath = 'img/';
+ else if($request ->input('noidung')!="" &&$request -
+ if($request ->input('tensp')== $sanpham -> TenSP){ + $this -> validate($request,[
+ 'tensp.required'=>'Bạn chưa nhập tên sản phẩm', Đồ án thiết kế
Tên sản phẩm cần có độ dài từ 2 đến 49 ký tự, và bạn phải nhập tóm tắt cho sản phẩm.
+ 'tomtat.min'=>'Phần tóm tắt phải có độ dài lớn hơn 1 k ý tự', + 'noidung.required'=>'Bạn chưa nhập nội dung',
+ 'noidung.min'=>'Phần nội dung phải có độ dài lớn hơn
1 ký tự', + 'nhasx.required'=>'Bạn chưa nhập tên nhà sản xuất', + 'nhasx.min'=>'Phần tên nhà sản xuất phải có độ dài lớn hơn 1 ký tự',
+ 'nhasx.max'=>'Phần tên nhà sản xuất phải có độ dài nh ỏ hơn 50 ký tự', + ]);
+ 'tensp' =>'required|min:2|max:50|unique:sanpham,Te nSP',
+ 'tensp.required'=>'Bạn chưa nhập tên sản phẩm', Đồ án thiết kế
+ 'tensp.min'=>'Tên sản phẩm phải có độ dài lớn hơn 1 ký tự', + 'tensp.max'=>'Tên sản phẩm phải có độ dài nhỏ hơn
50 ký tự', + 'tensp.unique'=>'Tên sản phẩm đã tồn tại',
+ 'tomtat.required'=>'Bạn chưa nhập tóm tắt',
Phần tóm tắt cần có độ dài lớn hơn 1 ký tự Nội dung không được để trống và phải có độ dài tối thiểu 1 ký tự Tên nhà sản xuất cũng cần được nhập đầy đủ, không được để trống, với độ dài tối thiểu 1 ký tự và tối đa 50 ký tự.
+ else{ Đồ án thiết kế
+ $image_path = "img/".$sanpham -> AnhTD;
+ if (file_exists($image_path)) {
+ $pivot= sanpham::find($sanpham ->ID);
+ $pivot ->loaisanpham()->sync($request->loaisp);
+ return view('admin.sanpham.suasanpham',['sanpham'=>$s anpham,'loaisanphams'=>$loaisanphams,'loaidcchons'=>$loaidcc hons,'comments'=>$comments])-
> with('thongbao','Bạn đã sửa thành công');
+ $loaisanphams =loaisanpham::all(); Đồ án thiết kế
+ return view('admin.sanpham.suasanpham',['sanpham'=>$s anpham,'loaisanphams'=>$loaisanphams,'loaidcchons'=>$loaidcc hons,'comments'=>$comments]) -
> with('err','Bạn không được bỏ trống nội dung hoặc tóm tắt'); + }
+ public function getNoiDung(Request $request){
+ return view('admin.sanpham.noidungsanpham',['sanpham' > $sanpham]);
+ return view('admin.erorr.notfound');
+ public function getTomTat(Request $request){
+ return view('admin.sanpham.tomtatsanpham',['sanpham' =>
+ return view('admin.erorr.notfound');
+ public function getHinhAnh(Request $request){
+ return view('admin.sanpham.hinhanhsanpham',['sanpham' > $sanpham,'hinhanhs' => $hinhanhs]);
+ return view('admin.erorr.notfound');
+ public function postHinhAnh(Request $request){
+ mkdir($destinationPath, 0755, true); Đồ án thiết kế
>hinhanh1 !=""&& $request ->hinhanh1 !="xoa"){ + $hinhsp = new hinhsanpham;
+ $hinhsp ->HinhAnh =$request ->hinhanh1; + $hinhsp -> save();
>hinhanh2 !=""&& $request ->hinhanh2 !="xoa"){ + $hinhsp = new hinhsanpham;
+ $hinhsp ->HinhAnh =$request ->hinhanh2; + $hinhsp -> save();
>hinhanh3 !=""&& $request ->hinhanh3 !="xoa"){ + $hinhsp = new hinhsanpham;
+ $hinhsp ->HinhAnh =$request ->hinhanh3; + $hinhsp -> save();
+ $hinhsp = hinhsanpham::find($request ->idanh1); + $image_path = "img/".$hinhsp -> HinhAnh; +
+ if (file_exists($image_path)) {
+ $hinhsp = hinhsanpham::find($request ->idanh2); + $image_path = "img/".$hinhsp -> HinhAnh; +
+ if (file_exists($image_path)) {
+ $hinhsp = hinhsanpham::find($request ->idanh3); + $image_path = "img/".$hinhsp -> HinhAnh; +
+ if (file_exists($image_path)) {
+ $hinhsp = hinhsanpham::find($request ->idanh4); + $image_path = "img/".$hinhsp -> HinhAnh; Đồ án thiết kế
+ if (file_exists($image_path)) {
+ $hinhsp = hinhsanpham::find($request ->idanh5); + $image_path = "img/".$hinhsp -> HinhAnh; +
+ if (file_exists($image_path)) {
+ $hinhsp = hinhsanpham::find($request ->idanh1); + if($request->hinhanh1 != $hinhsp ->HinhAnh){ + $image_path = "img/".$hinhsp -> HinhAnh; + if (file_exists($image_path)) {
+ $hinhsp = hinhsanpham::find($request ->idanh2); + if($request->hinhanh2 != $hinhsp ->HinhAnh){ + $image_path = "img/".$hinhsp -> HinhAnh; + if (file_exists($image_path)) {
+ $hinhsp = hinhsanpham::find($request ->idanh3); + if($request->hinhanh3 != $hinhsp ->HinhAnh){ + $image_path = "img/".$hinhsp -> HinhAnh; + if (file_exists($image_path)) {
+ $hinhsp = hinhsanpham::find($request ->idanh4); + if($request->hinhanh4 != $hinhsp ->HinhAnh){ + $image_path = "img/".$hinhsp -> HinhAnh; + if (file_exists($image_path)) {
+ $hinhsp = hinhsanpham::find($request ->idanh5); + if($request->hinhanh5 != $hinhsp ->HinhAnh){ + $image_path = "img/".$hinhsp -> HinhAnh; + if (file_exists($image_path)) {
+ return view('admin.sanpham.hinhanhsanpham',['sanpham' > $sanpham,'hinhanhs' => $hinhanhs]) -
>with('thongbao','Cập nhập thành công');
+ return view('admin.loaisanpham.danhsachloai',['theloais' =>
+ return view('admin.loaisanpham.themloai');
+ public function postThem(Request $request){
+ else if($request ->input('hinhanh')!=""){
+ 'tenloai' =>'required|min:2|max:50|unique:loaisanpham, TenLoai',
+ 'tenloai.required'=>'Bạn chưa nhập tên loại',
+ 'tenloai.min'=>'Tên loại phải có độ dài lớn hơn 1 ký tự', + 'tenloai.max'=>'Tên loại phải có độ dài nhỏ hơn 50 ký t ự',
+ 'tenloai.unique'=>'Tên loại đã tồn tại',
+ 'mota.required'=>'Bạn chưa nhập mô tả',
+ 'mota.min'=>'Phần mô tả phải có độ dài lớn hơn 1 ký t ự',
+ 'mota.max'=>'Phần mô tả phải có độ dài nhỏ hơn 200 k ý tự' + ]);
+ return redirect('/admin/loai-san-pham/them') -
> with('thongbao','Thêm thành công');
+ return redirect('/admin/loai-san-pham/them') -
> with('err','Bạn cần thêm đầy đủ các trường bắt buộc');
+ public function getSua(Request $request){ Đồ án thiết kế
+ return view('admin.loaisanpham.sualoai',['loaisp'=>$loaisp])
+ return view('admin.erorr.notfound');
+ public function postSua(Request $request){
+ else if($request ->input('tenloai')!="" && $request -
+ if($request ->input('tenloai')== $loaisp -> TenLoai){ + $this -> validate($request,[ Đồ án thiết kế
+ 'tenloai.required'=>'Bạn chưa nhập tên loại',
+ 'tenloai.min'=>'Tên loại phải có độ dài lớn hơn 1 ký tự', + 'tenloai.max'=>'Tên loại phải có độ dài nhỏ hơn 50 ký t ự',
+ 'mota.required'=>'Bạn chưa nhập mô tả',
+ 'mota.min'=>'Phần mô tả phải có độ dài lớn hơn 1 ký t ự',
+ 'mota.max'=>'Phần mô tả phải có độ dài nhỏ hơn 200 k ý tự' + ]);
+ 'tenloai' =>'required|min:2|max:50|unique:loaisanpha m,TenLoai',
+ 'tenloai.required'=>'Bạn chưa nhập tên loại',
+ 'tenloai.min'=>'Tên loại phải có độ dài lớn hơn 1 ký tự',
+ 'tenloai.max'=>'Tên loại phải có độ dài nhỏ hơn 50 k ý tự', Đồ án thiết kế
+ 'tenloai.unique'=>'Tên loại đã tồn tại',
+ 'mota.required'=>'Bạn chưa nhập mô tả',
+ 'mota.min'=>'Phần mô tả phải có độ dài lớn hơn 1 ký tự',
+ 'mota.max'=>'Phần mô tả phải có độ dài nhỏ hơn 20
+ $image_path = "img/".$loaisp -> HinhAnh;
+ if (file_exists($image_path)) {
+ return view('admin.loaisanpham.sualoai',['loaisp'=>$loais p]) -> with('thongbao','Sửa thành công');
+ public function postXoa(Request $request){
+ $image_path = "img/".$loaisp -> HinhAnh;
+ if (file_exists($image_path)) {
+ return redirect('/admin/loai-san-pham/danh-sach') -
>with('thongbao','Xóa thành công');
+ return view('admin.erorr.notfound');
+ use Illuminate\Support\Facades\Auth;
+ public function getSua(Request $request){
+ $user = tai_khoan::find($query);
+ return view('admin.user.suauser',['user'=>$user]); + }
+ return view('admin.erorr.notfound');
+ public function postSua(Request $request){
+ $user = tai_khoan::find($query);
+ 'tendn.required'=>'Bạn chưa nhập tên đăng nhập', Đồ án thiết kế
+ 'tendn.min'=>'Tên đăng nhập phải có độ dài lớn hơn 3 ký tự',
+ 'mk.required'=>'Bạn chưa nhập mật khẩu',
Mật khẩu của bạn cần có độ dài từ 4 đến 12 ký tự Ngoài ra, bạn phải nhập lại mật khẩu để xác nhận.
+ 'nhaplaimk.same'=>'Nhập lại mật khẩu không khớp với mật khẩu',
+ $user ->password rypt($request->mk);
+ return view('admin.user.suauser',['user'=>$user])-
>with('thongbao','Cập nhập thành công');
+ return view('admin.user.login');
+ public function postDangNhap(Request $request){
+ 'tendn.required'=>'Bạn chưa nhập tên đăng nhập',
+ 'tendn.min'=>'Tên đăng nhập phải có độ dài lớn hơn 3 ký tự',
+ 'tendn.max'=>'Tên đăng nhập phải có độ dài nhỏ hơn 13 k ý tự', + 'matkhau.required'=>'Bạn chưa nhập mật khẩu',
+ 'matkhau.min'=>'Mật khẩu phải có độ dài lớn hơn 3 ký tự' , Đồ án thiết kế
+ 'matkhau.max'=>'Mật khẩu phải có độ dài nhỏ hơn 13 ký tự',
+ if(Auth::attempt(['tendn'=>$request-
+ return redirect("admin/loai-san-pham/danh-sach");
+ return view('admin.user.login')-
>with('err','Sai tên tài khoản hoặc mật khẩu');
+ return view('admin.user.login');
+ use Illuminate\Http\Request; Đồ án thiết kế
+ $sanphamnoibats= sanpham::where('NoiBat',1)->get(); + $thanhphams= thanhpham::all()->sortByDesc('ID');
+ return view('pages.home.home',['rdsanphams'=>$rdsanpham s,'intro'=>$intro,'loaisanphams'=>$loaisanphams,'sanphamnoibat s'=>$sanphamnoibats,'thanhphams'=>$thanhphams]);
+ public function postSearchAjax(Request $request){
+ ->where('TenSP', 'LIKE', "%{$query}%") Đồ án thiết kế
+ $output = '