1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án tốt nghiệp Công nghệ thông tin Thiết kế và lập trình Website

168 17 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết kế và lập trình website
Tác giả Phan Tiến Đạt
Người hướng dẫn ThS. Nguyễn Lan Hương
Trường học Đại Học Bà Rịa - Vũng Tàu
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2020
Thành phố Vũng Tàu
Định dạng
Số trang 168
Dung lượng 4,76 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1: CƠ SỞ LÝ THUYẾT VÀ KHẢO SÁT (15)
    • 1.1 HTML,CSS và JavaScript (15)
      • 1.1.1 HTML là gì? (15)
      • 1.1.2 CSS là gì? (15)
      • 1.1.3 JavaScript là gì? (16)
    • 1.2 Bootstrap (16)
      • 1.2.1 Bootstrap là gì? (16)
      • 1.2.2 Tại sao nên dùng Bootstrap? (17)
    • 1.3 JQuery (17)
      • 1.3.1 JQuery là gì? (17)
      • 1.3.2 Tại sao nên dùng jQuery? (17)
    • 1.4 Ajax (18)
    • 1.4 Ajax là gì? (18)
      • 1.4.2 Tại sao nên dùng Ajax? (19)
    • 1.5 Lararel (19)
      • 1.5.1 Laravel là gì? (19)
      • 1.5.2 Tại sao nên dùng Laravel? (21)
    • 1.6 PHP (23)
      • 1.6.1 PHP là gì? (23)
      • 1.6.2 Tại sao nên dùng PHP (24)
    • 1.7 Khảo Sát Hiện Trạng (25)
      • 1.7.1 Khảo sát thực tế (25)
      • 1.7.2 Khảo sát các website tương tự (26)
  • CHƯƠNG 2: TỔNG QUAN CHỨC NĂNG WEBSITE (32)
    • 2.1 Quan Điểm Của Sản Phẩm (32)
    • 2.2 Chức Năng Sản Phẩm (32)
    • 2.3 Người Dùng (32)
    • 2.4 Các Ràng Buộc (33)
  • CHƯƠNG 3: YÊU CẦU CHỨC NĂNG WEBSITE (34)
    • 3.1 Xem tin (34)
    • 3.2 Tìm kiếm sản phẩm (34)
    • 3.3 Lọc sản phẩm (34)
    • 3.4 Gửi yêu cầu nhận báo giá (34)
    • 3.5 Nhận xét bài viết về sản phẩm (34)
    • 3.6 Đăng nhập/đăng xuất (34)
    • 3.7 Quản lý các tin đăng trên website (35)
    • 3.8 Nhận các thông báo yêu cầu từ khách hàng (35)
    • 3.9 Quản lý thông tin tài khoản (35)
  • CHƯƠNG 4: MÔ HÌNH USECASE (36)
    • 4.1 Tác nhân (36)
    • 4.2 Các yêu cầu chức năng (36)
    • 4.3 Lược Đồ Use Case (38)
    • 4.4 Chi Tiết Các Use Case (39)
  • CHƯƠNG 5: THIẾT KẾ WEBSITE (67)
    • 5.1 Thiết kế cơ sở dữ liệu (67)
      • 5.1.1 Lược đồ cơ sở dữ liệu (67)
      • 5.1.2 Chi tiết các trường (67)
    • 5.2 Mối quan hệ giữa các bản dữ liệu (72)
    • 5.3 Thiết kế giao diện Website – Front-End (72)
    • 5.4 Lập trình Website – Back-End với Laravel (93)
    • 5.5 Một số đoạn code nổi bật (153)
  • KẾT LUẬN (164)

Nội dung

CƠ SỞ LÝ THUYẾT VÀ KHẢO SÁT

HTML,CSS và JavaScript

HTML, CSS và JavaScript là những khái niệm cơ bản và thiết yếu cho lập trình website chuyên nghiệp Chúng tạo thành nền tảng quan trọng để xây dựng và làm phong phú các trang web Do đó, việc nắm vững 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, hay còn gọi là ngôn ngữ đánh dấu siêu văn bản, là công cụ chính để mô tả cấu trúc của các trang web và tạo ra tài liệu có thể hiển thị trong trình duyệt.

HTML là nền tảng chính của tất cả các trang web, với mỗi trang được cấu thành từ các thẻ HTML đặc trưng cho từng loại nội dung Từng loại nội dung trên trang đều được "bọc" trong các thẻ HTML, giúp định hình và tổ chức thông tin một cách rõ ràng.

HTML không phải là ngôn ngữ lập trình, điều này có nghĩa là nó không thể tạo ra các chức năng động Thay vào đó, HTML giống như Microsoft Word, được sử dụng để 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 trang web, bao gồm màu sắc, bố cục và phông chữ Nó giúp nội dung hiển thị đồng nhất trên nhiều 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à cả 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à chạy trên nhiều nền tảng Được thực thi trong môi trường máy chủ lưu trữ như trình duyệt web, JavaScript cho phép kết nối và điều khiển các đối tượng trong môi trường đó, mang lại khả năng kiểm soát chương trình hiệu quả.

JavaScript là ngôn ngữ lập trình logic, cho phép sửa đổi nội dung trang web và tạo ra các phản hồi linh hoạt theo hành động của người dùng Một số ứng dụng phổ biến của JavaScript bao gồm việc tạo hộp xác nhận, kêu gọi hành động, và bổ sung danh tính mới vào thông tin 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

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 nhiều đoạn mã sẵn có Điều này cho phép họ áp dụng ngay vào dự án của mình, giảm thiểu thời gian cần thiết để viết mã từ đầu.

JQuery

jQuery là một thư viện JavaScript mạnh mẽ, giúp việc phát triển các chức năng bằng JavaScript trở nên dễ dàng và nhanh chóng hơn Thư viện này tích hợp nhiều module đa dạng, từ hiệu ứng cho đến truy vấn selector, mang lại tính năng phong phú cho người dùng Hiện nay, jQuery được sử dụng trên 99% tổng số website trên 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 được xây dựng trên nền tảng JavaScript Sử dụng jQuery giúp bạn thực hiện nhiều tác vụ phức tạp một cách dễ dàng và hiệu quả 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

− 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

Việc tạo Ajax trở nên đơn giản hơn nhờ thư viện jQuery, cho phép mã Ajax tương tác dễ dàng với server 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 Bằng cách sử dụng Selector mã nguồn mở Sizzle, việc chỉnh sửa nội dung của các phần tử trở nên đơn giản hơn bao giờ hết.

Đơn giản hóa quá trình tạo hiệu ứng với code snippet giúp bạn dễ dàng áp dụng animation chỉ bằng cách thêm biến hoặc nội dung vào mà không cần viết lại toàn bộ mã.

jQuery hỗ trợ hiệu quả việc xử lý sự kiện HTML, giúp quản lý các sự kiện đa dạng mà không làm rối mã HTML bằng cách sử dụng các Event Handler.

Ajax là gì?

AJAX, viết tắt của Asynchronous JavaScript and XML, là một 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ừ server 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 cho phép thực hiện các cuộc gọi lại mà không cần tải lại toàn bộ trang, giúp truy xuất và lưu dữ liệu hiệu quả hơn Bằng cách gửi chỉ một phần của trang web đến máy chủ, AJAX giảm thiểu việc sử dụng băng thông và cải thiện tốc độ hoạt động của trang web Điều này đặc biệt có lợi cho các trang web có băng thông hạn chế, vì nó có thể nâng cao đáng kể hiệu suất mạng khi dữ liệu được gửi đi và nhận về một cách tối thiểu.

Ajax cho phép thực hiện các cuộc gọi không đồng bộ tới máy chủ web, giúp trình duyệt của người dùng không cần chờ đợi toàn bộ dữ liệu được tải về 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 nhanh chóng và thân thiện hơn, vì không cần phải tải lại trang từ server.

Ajax giúp tăng tốc độ và hiệu suất của ứng dụng web, mang lại trải nghiệm người dùng mượt mà hơn Một ví dụ điển hình là tính năng xếp hạng phim trên Netflix, nơi người dùng có thể đánh giá phim mà không cần chờ trang tải lại, giúp lưu trữ xếp hạng ngay lập tức vào cơ sở dữ liệu.

Lararel

Là một framework PHP mã nguồn mở miễn phí, giúp phát triển ứng dụng theo mô hình MVC (Model - View - Controller) một cách nhanh chóng, nó được sáng tạo bởi một lập trình viên dày dạn kinh nghiệm trong lĩnh vực NET.

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, đã được đổi tên thành Laravel, với nguồn gốc tên gọi lấy cảm hứng từ một tòa lâu đài trong Narnia - một vùng đất hư cấu trong thế giới tưởng tượng.

Các phiên bản của laravel đến tháng 4 năm 2020

Tiểu thuyết "Biên niên sử Narnia" của nhà văn Clive Staples Lewis đã trở thành nguồn cảm hứng cho nhiều tác phẩm điện ảnh Tòa lâu đài Paravel, khi đọc ngược lại, trở thành Laravel, phản ánh ước mơ của Taylor Otwell về một framework PHP phát triển mạnh mẽ và bền vững Đến nay, Laravel vẫn giữ vững vị trí là một trong những framework tốt nhất 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 Mặc 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 phong phú và dễ sử dụng Taylor Otwell, tác giả của framework này, đã biên soạn tài liệu hữu ích để giúp các lập trình viên khám phá và trải nghiệm Laravel một cách hiệu quả.

Artisan là công cụ dòng lệnh tích hợp trong Laravel, giúp tối ưu hóa ứng dụng, thực hiện migrate dữ liệu, và tạo các template cũng như controller một cách dễ dàng, hỗ trợ hiệu quả trong quá trình phát triển ứng dụng.

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 tách biệt rõ ràng mã hiển thị và mã logic, điều này 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.

− Laravel sử dụng gói thư viện Webpack kết hợp với npm, yarn nhằm giúp bạn tự động hóa thay vì build thủ công các ứng dụng và triển

Laravel hỗ trợ việc cài đặt các gói thư viện, giúp người dùng dễ dàng tạo ra những tính năng tuyệt vời cho ứng dụng của mình.

Laravel đảm bảo an toàn bảo mật thông qua việc sử dụng CSRF tokens, giúp kiểm tra mã CSRF trong mỗi yêu cầu POST, từ đó bảo vệ ứng dụng khỏi các tấn công thay đổi bản chất Hơn nữa, Laravel cung cấp các Middleware sẵn có, cho phép lập trình viên tạo ra Middleware riêng để nâng cao độ bảo mật cho website.

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 được sử dụng để định tuyến người dùng đến các URL 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

PHP

PHP bắt đầu như một dự án mã nguồn mở nhỏ, nhưng nhanh chóng trở thành một công cụ hữu ích cho nhiều người Đượ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 trang cá nhân của ông Rasmus đã đặt tên cho nó là "Personal Home Page Tools" Khi cần thêm chức năng, ông đã viết 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 Cuối cùng, ông quyết định công bố mã nguồn của PHP/FI để mọi người có thể xem, sử dụng, sửa lỗi và cải tiến nó.

− PHP viết hồi qui của "PHP: Hypertext Preprocessor"

PHP là ngôn ngữ lập trình kịch bản phía máy chủ, cho phép nhúng trong HTML và quản lý nội dung động Nó hỗ trợ quản lý cơ sở dữ liệu, theo dõi phiên làm việc và tương tác 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 rất 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 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 Phiên bản PHP4 đã mở rộng khả năng hỗ trợ Java cùng với các cấu trúc đối tượng phân phối như COM và CORBA.

− 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, trong số hàng ngàn ngôn ngữ lập trình, PHP nổi bật như 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 của PHP, cả hai đều được sử dụng để phát triển website động So với web tĩnh sử dụng HTML, ASP và PHP cho phép người dùng tương tác và trao đổi thông tin hiệu quả hơn.

Hiện nay, có hàng ngàn ngôn ngữ lập trình, nhưng chỉ một số ít được ưa chuộng và tin dùng rộng rãi Trong số đó, PHP nổi bật như một ngôn ngữ lập trình phổ biến, được thiết kế để phát triển web một cách hiệu quả.

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 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 các trang web độ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.

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 trở nên gay gắt Để 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 quan trọng hàng đầu Một trong những chiến lược quảng bá thiết yếu 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 doanh nghiệp.

So sánh giữa ASP và PHP

Trong thời đại 4.0 hiện nay, việc tìm kiếm thông tin trên các website 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 đáp ứng nhu cầu của người dùng Với sự phổ biến của các thiết bị như smartphone và laptop, người dùng có thể dễ dàng truy cập internet và tìm kiếm những gì họ cần chỉ với một cú chạm.

1.7.2 Khảo sát các website tương tự

Nhằm đáp ứng nhu cầu giới thiệu và quảng bá hình ảnh, nhiều công ty đã xây dựng website riêng, trong đó tandaithanh.vn.net nổi bật như một trong những trang web hàng đầ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, cùng với 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, sở hữu giao diện thân thiện và cách bố trí nội dung hợp lý, mang lại cho người dùng cảm giác thoải mái và dễ dàng tìm kiếm thông tin mong muốn.

*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

− 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, như khả năng cách âm, cách nhiệt tốt hơn và độ bền cao Đặ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 bảo vệ bề mặt khỏi tác động của thời tiết Nếu bạn đang tìm kiếm mẫu cửa nhôm kính đẹp cho công trình của mình, hãy tham khảo các thiết kế hiện đại và sang trọng để tạo điểm nhấn cho không gian số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

+ 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

− 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

− 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

− 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

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 trị viên có nhiệm vụ quản lý toàn bộ tin đăng trên website, tiếp 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 việc cập nhật thông tin và thay đổ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

Các Ràng Buộc

Khách mời chỉ có thể thực hiện năm chức năng chính, bao gồm 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 truy cập vào 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ị, bạn cần thoát khỏi trang này và trở về trang đăng nhập Lưu ý rằng bạn không thể truy cập vào trang quản trị thông qua đường link URL nếu chưa đăng nhập.

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

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

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

Lược Đồ Use Case

Lượt đồ tổng quan usecase

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

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

(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ố

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

(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

(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

(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

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

(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

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 đó

(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

(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

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

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

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

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

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

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

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

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

(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

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

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

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, …

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, …

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

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

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

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

Bài viết mô tả cấu trúc của một bảng cơ sở dữ liệu với các trường quan trọng như: "Tên đăng nhập tài khoản" (tenuser) được định dạng là VarChar, "Tên hiển thị người dùng", "Mật khẩu" (được mã hóa) cũng là VarChar, và hai trường thời gian "Thời gian tài khoản được tạo" (created_at) và "Thời gian tài khoản được sửa đổi" (updated_at) định 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

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

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 cần cung cấp thông tin để nhận báo giá bao gồm họ tên, địa chỉ, số điện thoại và nội dung yêu cầu Họ tên khách hàng được ghi trong trường "HoTen", địa chỉ trong trường "DiaChi", số điện thoại trong trường "SDT", và ghi chú yêu cầu trong trường "GhiChu".

DaXem Int cho phép người dùng đánh dấu tin yêu cầu đã được đọ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, trong khi thời gian sửa đổi yêu cầu được ghi lại trong trường updated_at.

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

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 mỗi bản ghi riêng biệt, sanpham_id Int là ID sản phẩm liên kết với bản ghi sản phẩm, và loaisanpham_id Int là ID loại sản phẩm liên kết với bản ghi 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

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

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

Mục giới thiệu trên trang chủ

Mục sản phẩm trên trang chủ

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ủ

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ủ

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

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

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

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

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

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 thêm loại sản phẩm (Admin)

Trang thêm loại sản phẩm

+ 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

76 + Trang thêm sản phẩm (Admin)

77 + Trang danh sách sản phẩm (Admin)

Trang danh sách sản phẩm

78 + Trang sửa sản phẩm (Admin)

79 + 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

80 + Trang thêm dự án đã thực thiện (Admin)

Trang thêm dự án đã thực hiện

81 + Trang danh sách dự án đã thực thiện (Admin)

Trang danh sách dự án đã thực hiện

82 + Trang sửa dự án đã thực thiện (Admin)

Trang sửa dự án đã thực hiện

83 + Trang cập nhập thông tin công ty (Admin)

Trang cập nhật thông tin công ty

+ 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

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')-

− 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') -

− 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') -

− 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') -

− 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)

− return redirect("admin/dang-nhap");

Tạo các Eloquent ORM cho từng bảng trong cơ sở dữ liệu, giúp mỗi bảng trở thành một Model, từ đó đơn giản hóa việc thao tác với cơ sở dữ liệu.

+ 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;

>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');

+ 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:

+ 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');

+ 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'=>'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 chính xác, vui lòng nhập tên khách hàng Tên khách hàng cần có độ dài lớn hơn 1 ký tự và nhỏ hơn 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',

+ '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){

+ 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'=>'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 được 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à nhỏ hơn 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',

+ '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;

+ 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');

+ return view('admin.thongtinct.thongtinct',['info'=>$info]); + }

+ public function postSua(Request $request){

+ 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ự',

+ '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 greater than 2 digits and less than 11 digits Facebook information is required, must be longer than 1 character, and cannot exceed a certain 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;

+ 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');

+ return view('admin.sanpham.danhsachsanpham',['sanphams'

+ return view('admin.sanpham.themsanpham',['loaisanphams'

+ public function postThem(Request $request){

+ 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 đảm bảo 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 đã có.

+ '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',

+ '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;

+ 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',

Tên sản phẩm phải có độ dài từ 2 đến 49 ký tự, và bạn cần 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',

+ '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 phải có độ dài lớn hơn 1 ký tự Bạn chưa nhập nội dung, và phần nội dung cũng cần có độ dài lớn hơn 1 ký tự Tên nhà sản xuất là thông tin bắt buộc, vì vậy bạn cần nhập tên nhà sản xuất Lưu ý rằng tên nhà sản xuất phải có độ dài lớn hơn 1 ký tự và nhỏ hơn 50 ký tự.

+ $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');

+ 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){

>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;

+ 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){

+ 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,[

+ '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ự',

+ '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',

+ 'tendn.min'=>'Tên đăng nhập phải có độ dài lớn hơn 3 ký tự',

Tên đăng nhập cần phải có độ dài dưới 13 ký tự Người dùng phải nhập tên người dùng, và tên này phải dài hơn 1 ký tự nhưng không vượt quá 5 ký tự.

+ 'mk.required'=>'Bạn chưa nhập mật khẩu',

Mật khẩu cần có độ dài từ 4 đến 12 ký tự Đảm bảo bạn đã 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ự',

+ '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');

+ $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){

+ $output = '

Ngày đăng: 13/05/2021, 15:22

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Văn Giang. Bootstrap là gì? Vì sao nên sử dụng Bootstrap?, ngày 2 tháng 5 năm 2020,https://tech.bizflycloud.vn/bootstrap-la-gi-vi-sao-nen-su-dung-bootstrap-20181123141649382 Link
2. Nguyễn Thị Thu Hà. Tìm hiểu cơ bản về HTML và CSS, ngày 2 tháng 5 năm 2020,https://viblo.asia/p/tim-hieu-ve-html-va-css-co-ban-phan-1-7ymwGXV0R4p1 Link
3. Nguyễn Hiền. PHP là gì? Tổng quan về ngôn ngữ PHP, ngày 2 tháng 5 năm 2020,https://toidayhoc.com/lap-trinh/php-la-gi-tong-quan-ve-ngon-ngu-php/ Link
4. Đào Quang Huy. Giới thiệu về Laravel, ngày 2 tháng 5 năm 2020, https://viblo.asia/p/gioi-thieu-ve-laravel-924lJrnzlPM Link
5. Bá Huỳnh. TOP 5 hình thức marketing online hiệu quả nhất năm 2019, ngày 2 tháng 5 năm 2020,https://crmviet.vn/cac-hinh-thuc-marketing-online-pho-bien-nhat-nam-2018/ Link
6. Nguyễn Nhật. JQuery là gì? Vì sao nên sử dụng JQuery?, ngày 2 tháng năm 2020,https://topdev.vn/blog/jquery-la-gi/ Link
8. Phạm Thạch. CSS là gì? Vai trò của nó trên website, ngày 2 tháng 5 năm 2020,https://thachpham.com/web-development/html-css/css-la-gi-va-vai-tro.html Link
9. Lê Thảo. Ajax là gì? Cách thức hoạt động và lợi ích mang lại, ngày 2 tháng 5 năm 2020,https://topdev.vn/blog/ajax-la-gi-cach-thuc-hoat-dong-va-loi-ich-ma-no-mang-lai/ Link
10. Nguyễn Việt. Ngôn ngữ HTML là gì? Vai trò của HTML trong lập trình web?, ngày 2 tháng 5 năm 2020,https://blog.webico.vn/ngon-ngu-html-la-gi-vai-tro-cua-html-trong-lap-trinh-web/ Link
11. VNETWORK. Các số liệu thống kê Internet Việt Nam 2019, ngày 2 tháng 5 năm 2020,https://vnetwork.vn/news/cac-so-lieu-thong-ke-internet-viet-nam-2019 Link
7. Thành Phú. JavaScript là gì? Vài trò của JavaScript trên website, ngày 2 tháng 5 năm 2020 Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm