Biểu mẫu tham gia không có căn cứ php. Hiểu mySQL THAM GIA, biểu diễn trực quan

Trong một thời gian khá lâu, khi bắt đầu sự nghiệp nhà phát triển web, tôi đã làm việc với cơ sở dữ liệu này một cách tốt nhất có thể, nhưng tôi không biết nhiều. Anh ấy đã soạn các truy vấn nguyên thủy đơn giản và đôi khi còn chèn các truy vấn vào các vòng lặp. Thật không may, vào thời điểm đó, tôi đã không có được cuốn sách phù hợp về MySQL và phải học bằng cách thử và sai. Nhiều bài viết trên Internet bằng cách nào đó đã không truyền tải ngay cho tôi sự tuyệt vời truy vấn mySQL- THAM GIA.
Trong ấn phẩm này tôi sẽ kể cho bạn nghe về mọi người những lựa chọn khả thi làm việc với THAM GIA và hơn thế nữa, tôi sẽ trình bày nguyên lý hoạt động của từng lệnh - một cách trực quan.

Chúng tôi sẽ xem xét:
  • THAM GIA TRONG
  • CHỖ NỐI BÊN TRÁI
  • QUYỀN THAM GIA
  • THAM GIA NGOÀI
  • THAM GIA TRÁI LOẠI TRỪ INNER THAM GIA
  • QUYỀN THAM GIA LOẠI TRỪ INNER THAM GIA
  • THAM GIA NGOÀI LOẠI TRỪ THAM GIA INNER
  • Riêng biệt, cần lưu ý các điểm 5, 6 và 7. Trên thực tế, các truy vấn này không kết nối hai bảng mà loại trừ các cột khỏi bảng này có trong bảng kia. Trên thực tế, điều này có thể rất hữu ích.

    THAM GIA nội bộ

    Một trong những yêu cầu phổ biến nhất, xảy ra cực kỳ thường xuyên. Truy vấn này sẽ trả về tất cả các bản ghi từ bảng bên trái (Bảng A) và các bản ghi từ (Bảng B), nhưng sẽ chỉ trả về các cột khớp.

    Yêu cầu ví dụ:

    Xem mã SQL

    LỰA CHỌN< select_list>TỪ Bảng_A A INNER THAM GIA Bảng_B B TRÊN A. Khóa = B. Khóa

    Chỗ nối bên trái

    Yêu cầu này sẽ trả về tất cả các cột từ bảng bên trái (Bảng A), cũng như tất cả các cột từ bảng bên phải (Bảng B) nhưng chỉ những cột khớp với các cột từ bảng bên trái.

    Yêu cầu ví dụ:

    Xem mã SQL

    LỰA CHỌN< select_list>TỪ Bảng_A A THAM GIA TRÁI Bảng_B B TRÊN A. Khóa = B. Khóa

    Đúng THAM GIA

    Tương tự như truy vấn trước, nhưng sẽ trả về tất cả các cột từ bảng bên phải (Bảng B), cũng như tất cả các cột từ bảng bên trái (Bảng A) khớp với các cột từ bảng bên phải.

    Yêu cầu ví dụ:

    Xem mã SQL

    LỰA CHỌN< select_list>TỪ Bảng_A A QUYỀN THAM GIA Bảng_B B TRÊN A. Khóa = B. Khóa

    THAM GIA bên ngoài

    Thông thường truy vấn này được viết dưới dạng FULL OUTER JOIN hoặc FULL JOIN, tất cả các biến thể đều thực hiện một hành động, cụ thể là trả về tất cả các cột từ cả hai bảng, trong khi các cột trùng khớp sẽ bị chồng lên bởi các cột từ bảng bên trái.

    Yêu cầu ví dụ:

    Xem mã SQL

    LỰA CHỌN< select_list>TỪ Bảng_A A THAM GIA ĐẦY ĐỦ Bảng_B B TRÊN A. Khóa = B. Khóa

    Còn lại Không bao gồm THAM GIA

    Truy vấn này sẽ trả về tất cả các cột từ bảng bên trái (Bảng A) không khớp với các cột từ bảng bên phải (Bảng B).

    Yêu cầu ví dụ:

    Xem mã SQL

    Trong MySQL, bạn có thể chọn sử dụng JOIN những cách khác. Chúng tôi sẽ cố gắng xem xét tất cả các loại yêu cầu này. Dưới đây là danh sách tất cả các truy vấn liên quan đến THAM GIA:

  • THAM GIA TRONG
  • CHỖ NỐI BÊN TRÁI
  • QUYỀN THAM GIA
  • RIGHT THAM GIA không có giao điểm với bảng bên trái
  • ĐẦY ĐỦ BÊN NGOÀI
  • FULL OUTER nơi bảng bên trái hoặc bên phải trống
  • Và đây là hình minh họa về các kiểu JOIN này:

    Tôi sẽ đính kèm các tệp từ trang web của chúng tôi vào bài viết, trong đó sẽ có join.php trong đó tôi sẽ hiển thị tất cả các mục bằng cách sử dụng Người vận hành khác nhau THAM GIA.

    THAM GIA TRONG

    Chúng ta sẽ bắt đầu với toán tử INNER JOIN này, vì toán tử này sẽ kích hoạt theo mặc định nếu bạn chỉ cần viết THAM GIA trong truy vấn. Toán tử này chọn tất cả các bản ghi từ hai bảng trong đó điều kiện theo sau toán tử ON được thỏa mãn. Chúng tôi có hai bảng Tệp và Tin nhắn:

    Bảng tin nhắn:

    Truy vấn với JOIN sẽ như sau:

    CHỌN * TỪ Tin nhắn INNER THAM GIA Tệp TRÊN Messages.fid=Files.fid

    Kết quả là các bản ghi sau sẽ được hiển thị:

    Bảng tập tin:

    LEFT JOIN sẽ cần thiết khi chúng tôi hiển thị tất cả các bản ghi tin nhắn và có tệp đính kèm hay không, chúng tôi sẽ kiểm tra thông qua PHP.

    LEFT THAM GIA không có giao điểm với bảng bên phải

    LEFT JOIN trả về tất cả các bản ghi từ bảng bên trái, ngoại trừ những bản ghi có fid khớp ở bảng bên phải.

    Bảng tin nhắn:

    Một truy vấn có LEFT JOIN không có giao điểm sẽ là:

    CHỌN * TỪ Tin nhắn TRÁI THAM GIA Tệp TRÊN Messages.fid=Files.fid Ở ĐÂU Files.fid LÀ NULL

    Kết quả là chúng ta có được mẫu sau:

    Bảng tập tin:

    RIGHT JOIN sẽ cần thiết khi chúng ta hiển thị tất cả các file đính kèm, bất kể chúng có được sử dụng hay không, chỉ tất cả các file.

    RIGHT THAM GIA không có giao lộ

    RIGHT JOIN không có giao điểm hiển thị tất cả các bản ghi từ bảng bên phải, ngoại trừ những bản ghi có giao điểm với bảng bên trái.

    Bảng tin nhắn:

    Một truy vấn có RIGHT JOIN không có giao điểm sẽ là:

    CHỌN * TỪ Tin nhắn QUYỀN THAM GIA các tệp TRÊN Messages.fid=Files.fid Ở ĐÂU Messages.fid LÀ NULL

    Bằng cách này, chúng ta sẽ nhận được dữ liệu sau:

    giữa bài kiểm tra cơ thể fid con đường
    VÔ GIÁ TRỊ VÔ GIÁ TRỊ 1 /files/1.png

    RIGHT JOIN sẽ cần thiết khi hiển thị tất cả các tệp đính kèm không được đính kèm với bất kỳ tin nhắn nào. Ví dụ: nếu chúng ta muốn hiển thị các file không được sử dụng.

    THAM GIA BÊN NGOÀI ĐẦY ĐỦ

    Mặc dù thực tế là trong ngôn ngữ SQL Có FULL OUTER JOIN, nhưng MySQL không có toán tử này. Thực tế là một toán tử như vậy là một gánh nặng rất lớn đối với máy chủ. Bây giờ chúng tôi có 3 tệp và 3 tin nhắn, trong khi 4 dòng được hình thành do yêu cầu. Tôi không chắc nó là gì ý tưởng tốt viết một truy vấn cùng nhau đưa ra hai truy vấn LEFT JOIN và RIGHT JOIN. Nhưng vẫn có thể mô phỏng yêu cầu FULL OUTER JOIN.

    Bảng tin nhắn:

    Việc mô phỏng một yêu cầu với FULL OUTER JOIN sẽ như sau:

    CHỌN * TỪ Tin nhắn TRÁI THAM GIA Tệp TRÊN Messages.fid = Files.fid UNION CHỌN * TỪ Tin nhắn PHẢI THAM GIA Tệp TRÊN Messages.fid = Files.fid

    Trong truy vấn này, chúng tôi đang sử dụng toán tử UNION để nối hai truy vấn LEFT JOIN và RIGHT JOIN.

    Kết quả chúng ta sẽ nhận được các bản ghi sau:

    giữa bài kiểm tra cơ thể fid con đường
    1 Bài kiểm tra 2 /files/2.png
    2 CHÀO VÔ GIÁ TRỊ VÔ GIÁ TRỊ
    3 Xin chào 3 /files/3.png
    VÔ GIÁ TRỊ VÔ GIÁ TRỊ 1 /files/1.png

    Và ở đây tôi thấy khó để nói tại sao cần phải có FULL OUTER JOIN. Nhưng vì nó ở dạng SQL nên sau này có thể sẽ cần đến.

    THAM GIA OUTER ĐẦY ĐỦ không có giao lộ

    Một loại THAM GIA khác thậm chí còn điên rồ hơn chỉ FULL OUTER JOIN, cụ thể là FULL OUTER JOIN không có giao lộ. Tôi thậm chí không thể đề xuất loại THAM GIA này có thể được sử dụng ở đâu. Bởi vì kết quả là chúng tôi nhận được các tệp không được sử dụng và các tin nhắn không có tệp. Và như bạn có thể đã đoán, toán tử này cũng không có trong MySQL. Tất cả những gì còn lại là mô phỏng nó bằng cách sử dụng hai toán tử: LEFT JOIN không có bảng liệt kê và RIGHT JOIN không có giao điểm.

    Mô phỏng yêu cầu THAM GIA NGOÀI ĐẦY ĐỦ không có giao lộ:

    $sql = "CHỌN * TỪ Tin nhắn TRÁI THAM GIA Tệp TRÊN Messages.fid = Files.fid Ở ĐÂU Files.fid LÀ NULL UNION CHỌN * TỪ Tin nhắn RIGHT THAM GIA Tệp TRÊN Messages.fid = Files.fid Ở ĐÂU Messages.fid LÀ NULL";

    Kết quả là (các bảng nguồn giống như trong ví dụ với FULL OUTER JOIN), chúng tôi nhận được:

    giữa bài kiểm tra cơ thể fid con đường
    2 CHÀO VÔ GIÁ TRỊ VÔ GIÁ TRỊ
    VÔ GIÁ TRỊ VÔ GIÁ TRỊ 1 /files/1.png

    Có lẽ chỉ vậy thôi, trong các bài học tiếp theo, chúng ta sẽ bắt đầu viết các truy vấn phức tạp hơn nữa vào nhiều bảng cùng một lúc.

    Mặc dù nó cũng có thể được áp dụng để phát triển các tiêu chuẩn sản phẩm phần mềm, Vì sử dụng địa phương. Nhưng đây không phải là điều mà bài viết này sẽ nói đến.

    Thông thường, khi làm việc với cơ sở dữ liệu ở mỗi ngôn ngữ, nhiệm vụ là lựa chọn dữ liệu để hiển thị trong các báo cáo, biểu đồ khác nhau, v.v. Theo quy định, khi thực hiện loại nhiệm vụ này, bạn phải sử dụng không phải một mà là nhiều bảng, kết hợp chúng thành một truy vấn, làm phức tạp đáng kể thiết kế của nó. Trong trường hợp này, cần phải tính đến cách dữ liệu sẽ được xuất ra, các bảng sẽ được "kéo lên" như thế nào và kết quả nào sẽ được lập trình viên chấp nhận nhất. Để giải quyết những vấn đề như vậy, một trong những thiết kế tiêu chuẩn được sử dụng Ngôn ngữ MySQL- Tham gia.

    Khái niệm về từ Tham gia

    Các ngôn ngữ phát triển cơ sở dữ liệu, bất kể là loại ngôn ngữ nào, đều dựa trên các từ tiêu chuẩn trong từ điển tiếng Anh (đó là lý do tại sao, miễn là bạn biết tiếng anh, bạn sẽ làm việc với bảng dễ dàng hơn nhiều). Để thực hiện kết nối các bảng với vùng chọn, từ tương tự được sử dụng - Tham gia. Ngôn ngữ lập trình cơ sở dữ liệu sử dụng My SQL. Bản dịch của từ chức năng này hoàn toàn giống với bản thân ngôn ngữ - "thống nhất".

    Việc giải thích cấu trúc MySQL - Join và bất kỳ cấu trúc nào trong số chúng sẽ hoàn toàn giống nhau. Nếu chúng ta giải mã mục đích của công trình xây dựng, cụ thể là sơ đồ hoạt động của nó, thì chúng ta sẽ hiểu được ý nghĩa sau: công trình xây dựng sẽ cho phép bạn thu thập các trường cần thiết từ các bảng khác nhau hoặc các truy vấn lồng nhau trong một lựa chọn.

    Các loại cấu trúc để kết hợp

    Nếu một lập trình viên cần thu thập mẫu từ nhiều bảng và anh ta biết bảng nào các trường khóa trong đó và dữ liệu nào cần cho báo cáo, thì bạn có thể sử dụng một trong các cấu trúc nối chính để đạt được kết quả mong muốn. Có bốn công trình chính (để nối các bảng):

  • Tham gia bên trong.
  • Tham gia chéo.
  • Chỗ nối bên trái.
  • Đúng Tham gia.
  • Tùy thuộc vào nhiệm vụ hiện tại, mỗi thiết kế tiêu chuẩn sẽ cho kết quả khác nhau, điều này sẽ cho phép bạn nhận được báo cáo về thông số khác nhau trong một thời gian ngắn.

    Tạo và điền bảng để sử dụng sau

    Ví dụ, trước khi chúng ta bắt đầu xem xét các cơ chế làm việc với các cấu trúc tổng hợp dữ liệu, cần chuẩn bị một số bảng mà chúng ta sẽ làm việc trong tương lai. Điều này sẽ giúp thể hiện rõ ràng tất cả các nguyên tắc hoạt động của các toán tử, ngoài ra, bằng cách này, những người mới bắt đầu sẽ dễ dàng tìm hiểu tất cả những điều cơ bản về lập trình bảng.

    Bảng đầu tiên sẽ mô tả một số đồ vật mà một người thường xuyên gặp trong suốt cuộc đời.

    Trong bảng thứ hai, chúng tôi sẽ mô tả một số thuộc tính của các đối tượng từ bảng đầu tiên để bạn có thể làm việc với chúng trong tương lai.

    Nói chung, hai bảng sẽ đủ để hiển thị cách chúng hoạt động với một ví dụ. Bây giờ chúng ta có thể bắt đầu kiểm tra thực tế các thiết kế của mình.

    Sử dụng Tham gia nội bộ

    Khi sử dụng cấu trúc MySQL - Join Ineer, cần xem xét một số tính năng của nó. Thiết kế này sẽ cho phép bạn chỉ chọn từ cả hai bảng những bản ghi nằm trong cả bảng thứ nhất và bảng thứ hai. Làm thế nào nó hoạt động? Trong bảng đầu tiên, chúng ta có khóa chính - ID, cho biết số sê-ri của các bản ghi trong bảng.

    Khi tạo bảng thứ hai, khóa tương tự được sử dụng làm số thứ tự; bạn có thể xem ví dụ trong hình. Khi chọn dữ liệu Chọn toán tử Kết quả là, nó sẽ chỉ xác định những bản ghi có số sê-ri trùng nhau - nghĩa là chúng nằm trong cả bảng thứ nhất và bảng thứ hai.

    Khi sử dụng thiết kế, bạn cần hiểu chính xác dữ liệu nào bạn cần lấy. Lỗi phổ biến nhất, đặc biệt đối với những người mới lập trình, là việc sử dụng cấu trúc Inner Join không hợp lý và không chính xác. Làm cách nào chúng ta có thể xem xét một tập lệnh sẽ trả về thông tin về các đối tượng và thuộc tính của chúng cho chúng ta từ các bảng được mô tả và điền trước đó. Nhưng ở đây có thể có một số cách để sử dụng cấu trúc. Về vấn đề này, My SQL là một ngôn ngữ rất linh hoạt. Vì vậy, chúng ta có thể xem các ví dụ về cách sử dụng MySQL Inner Join.

    Kết hợp các bảng mà không chỉ định bất kỳ tham số nào. Trong trường hợp này, chúng ta sẽ nhận được kết quả sau:

    Nếu chúng ta biểu thị thông qua từ phụ Sử dụng rằng cần phải tính đến các khóa chính của các bản ghi trong bảng thì kết quả của việc lựa chọn sẽ thay đổi đáng kể. Trong trường hợp này, chúng ta sẽ nhận được một lựa chọn chỉ trả về những hàng có cùng khóa chính.

    Cũng có thể sử dụng tùy chọn thứ ba để sử dụng cấu trúc khi truy vấn sử dụng từ “bật” để chỉ ra các trường mà các bảng sẽ được hợp nhất. Trong trường hợp này, lựa chọn sẽ trả về dữ liệu sau:

    Các tính năng của việc sử dụng Left Join

    Nếu chúng ta xem xét một cách khác để nối các bảng bằng cách sử dụng cấu trúc MySQL - Join, bạn sẽ nhận thấy sự khác biệt trong dữ liệu đầu ra. Cơ chế như vậy là cấu trúc Left.

    Việc sử dụng cấu trúc MySQL Left Join có một số điểm đặc biệt và giống như Inner, đòi hỏi sự hiểu biết rõ ràng về kết quả cần đạt được.

    TRONG trong trường hợp nàyĐầu tiên, tất cả các bản ghi từ bảng đầu tiên sẽ được chọn, sau đó các bản ghi từ bảng thuộc tính thứ hai sẽ được thêm vào chúng. Hơn nữa, nếu bảng đầu tiên có một bản ghi, chẳng hạn như “stool”, và bảng thứ hai không có một thuộc tính nào cho nó, thì toán tử Left sẽ xuất ra đối diện với bản ghi này giá trị rỗng, thông báo cho người lập trình rằng không có dấu hiệu nào cho loại mục này.

    Việc sử dụng thiết kế này sẽ cho phép bạn xác định những trường nào hoặc ví dụ: các sản phẩm trong cửa hàng không có giá, v.v.

    Ví dụ bên trái

    Để xem xét toán tử xây dựng Left Join MySQL trong thực tế, chúng tôi sử dụng các bảng được mô tả trước đó. Giả sử bạn cần chọn toàn bộ danh sách sản phẩm có trong cửa hàng và kiểm tra xem sản phẩm nào không có dấu hiệu hoặc thuộc tính. Trong trường hợp này, lựa chọn sẽ hiển thị tất cả các sản phẩm và những sản phẩm không có thuộc tính sẽ có giá trị trống.

    Sử dụng Where trong mệnh đề tham gia

    Là một tham số, một phép nối có thể không chỉ bao gồm các chỉ báo của các trường mà bảng cần được kết nối mà còn có thể bao gồm toán tử điều kiện Where.

    Ví dụ: hãy xem xét một tập lệnh sẽ chỉ trả về cho chúng ta những bản ghi mà thuộc tính không được chỉ định. Trong trường hợp này, bạn cần thêm toán tử điều kiện vào cấu trúc Join và cho biết kết quả chính xác những gì cần được trả về.

    Khi sử dụng Tham gia - Where trong MySQL, bạn cần hiểu rõ rằng chỉ những bản ghi áp dụng điều kiện đã chỉ định mới được hiển thị và khi đó lựa chọn sẽ trông như thế này:

    Các truy vấn như vậy cho phép bạn thực hiện các lựa chọn dựa trên dữ liệu cụ thể liên quan đến điều kiện mà người lập trình đã chọn. Bạn có thể chỉ định một số điều kiện như vậy, đồng thời tối đa hóa các tham số để chọn dữ liệu từ các bảng đã hợp nhất.

    Sử dụng Join để thay đổi dữ liệu trong bảng

    Việc xây dựng Join về cơ bản là phổ quát. Nó cho phép bạn không chỉ thực hiện nhiều lựa chọn khác nhau mà còn kết nối từ một đến nhiều bảng với các truy vấn, nhập điều kiện bổ sungđến mẫu. Cấu trúc này cũng có thể được sử dụng cho các hoạt động dữ liệu khác. Vì vậy, Join có thể được sử dụng để thay đổi dữ liệu trong bảng. Hay nói đúng hơn là để làm rõ các điều kiện trong bảng hoặc trong trường hợp bạn cần cập nhật dữ liệu trong nhiều bảng theo cùng một điều kiện.

    Ví dụ, hãy xem xét vấn đề sau đây. Ba bảng được đưa ra có chứa một số dữ liệu. Bạn cần thay đổi dữ liệu trong cả hai bảng bằng một truy vấn. Chính xác là để giải quyết loại nhiệm vụ này mà bạn có thể sử dụng cấu trúc Tham gia trong lệnh Cập nhật. Bản thân kiểu xây dựng Tham gia phụ thuộc, giống như trong trường hợp lấy mẫu dữ liệu, vào kết quả mà người lập trình muốn nhận được.

    Hãy xem ví dụ đơn giản nhất. Bạn cần cập nhật dữ liệu bằng các điều kiện tương tự với một yêu cầu. Những loại truy vấn này được xây dựng để tối ưu hóa công việc với cơ sở dữ liệu. Tại sao phải viết các truy vấn khác nhau cho mỗi bảng nếu bạn có thể thực hiện tất cả các thao tác dữ liệu bằng một truy vấn? Ví dụ Tham gia trong trường hợp của chúng tôi sẽ như thế này:

    Sự thi công truy vấn phức tạp

    Rất thường xuyên, khi làm việc với cơ sở dữ liệu, cần phải xây dựng các truy vấn không chỉ bằng cách nối một số bảng mà còn sử dụng các truy vấn con. Những tác vụ như vậy khá khó hiểu đối với một lập trình viên cơ sở dữ liệu mới làm quen. Khó khăn là bạn phải suy nghĩ qua từng bước, xác định dữ liệu nào cần lấy từ bảng hoặc truy vấn nào và cách bạn sẽ cần làm việc với dữ liệu đó trong tương lai.

    Để hiểu cụ thể hơn, bạn có thể xem xét các ví dụ (trong MySQL Join) về các truy vấn phức tạp. Nếu bạn là người mới bắt đầu và mới bắt đầu làm việc với cơ sở dữ liệu, thì việc đào tạo như vậy sẽ chỉ có lợi. Lựa chọn lý tưởng sẽ là

    Truy vấn này sẽ trả về 58 bản ghi hợp đồng bán hàng có số dư được điền hoặc tồn tại Tiền bạc vào ngày đã chọn. Trong trường hợp này nó là Ngày hiện tại. Một điều kiện cũng đã được thêm vào lựa chọn là tên của hợp đồng phải chứa ký hiệu “123”. Các thông tin (dữ liệu) hiển thị trên màn hình sẽ được sắp xếp – sắp xếp theo số hợp đồng.

    Ví dụ sau sẽ hiển thị dữ liệu về tất cả các khoản thanh toán, trong đó sẽ cho biết số hợp đồng.

    Sử dụng truy vấn con

    Như đã đề cập trước đó, khi làm việc với cơ sở dữ liệu, bạn có thể nối không chỉ các bảng mà còn cả bảng có truy vấn. Thiết kế này được sử dụng chủ yếu để tăng tốc truy vấn và tối ưu hóa nó.

    Ví dụ: nếu bạn chỉ cần chọn hai trường từ một bảng có hàng trăm trường và chẳng hạn như một nghìn bản ghi, thì bạn nên sử dụng truy vấn sẽ chỉ trả về các trường cần thiết và kết hợp nó với lựa chọn dữ liệu chính. Làm sao Ví dụ về MySQL Tham gia Chọn bạn có thể xem xét một truy vấn thuộc loại này:

    Đây không phải là tất cả các cách để sử dụng cấu trúc MySQL tiêu chuẩn, chỉ là những cách tiêu chuẩn. Cách sử dụng cấu trúc Join và loại nào thì tùy thuộc vào người lập trình quyết định, nhưng cần ghi nhớ và tính đến loại kết quả nào sẽ thu được khi thực hiện truy vấn.

    Cập nhật lần cuối: 1/11/2015

    Một trong những cách chính mà trang web truyền dữ liệu là thông qua xử lý biểu mẫu. Các biểu mẫu đại diện cho các phần tử đánh dấu HTML đặc biệt có chứa các phần tử đầu vào khác nhau - Trường văn bản, nút, v.v. Và với sự trợ giúp của các biểu mẫu này, chúng ta có thể nhập một số dữ liệu và gửi nó đến máy chủ. Và máy chủ đã xử lý dữ liệu này.

    Việc tạo biểu mẫu bao gồm các khía cạnh sau:

      Tạo một phần tử trong đánh dấu HTML

      Thêm một hoặc nhiều trường đầu vào vào phần tử này

      Đặt phương thức truyền dữ liệu: GET hoặc POST

      Đặt địa chỉ mà dữ liệu đã nhập sẽ được gửi đến

    Vì vậy hãy tạo ra đồng phục mới. Để làm điều này, chúng tôi xác định tập tin mới form.php , trong đó chúng tôi sẽ đặt nội dung sau:

    Đăng nhập vào trang web Đăng nhập:

    Mật khẩu:

    Thuộc tính action="login.php" của phần tử biểu mẫu cho biết dữ liệu biểu mẫu sẽ được tập lệnh xử lý đăng nhập.php, tệp này sẽ nằm cùng với tệp biểu mẫu.php trong một thư mục. Và thuộc tính Method="POST" chỉ ra rằng phương thức POST sẽ được sử dụng làm phương thức truyền dữ liệu.

    Bây giờ hãy tạo một tập tin đăng nhập.php, sẽ có nội dung sau:

    Để lấy dữ liệu biểu mẫu, biến toàn cục $_POST được sử dụng. Cô đại diện mảng kết hợp dữ liệu được truyền bằng phương thức POST. Sử dụng các phím chúng ta có thể nhận được các giá trị đã gửi. Các khóa trong mảng này là giá trị của thuộc tính tên của các trường nhập biểu mẫu.

    Bởi vì thuộc tính tên trường nhập thông tin đăng nhập có giá trị login(), thì trong mảng $_POST, giá trị của trường này sẽ biểu thị khóa "đăng nhập": $_POST["login"]

    Và vì có thể có những tình huống khi trường đầu vào sẽ không được đặt, chẳng hạn như khi truy cập trực tiếp vào tập lệnh: http://localhost:8080/login.php. Trong trường hợp này, nên kiểm tra tính khả dụng của dữ liệu bằng hàm isset() trước khi xử lý dữ liệu. Và nếu biến được đặt thì hàm isset() sẽ trả về true .

    Bây giờ chúng ta có thể truy cập vào biểu mẫu:

    Và chỉ cần bấm nút, dữ liệu đã nhập phương thức ĐĂNG sẽ được gửi đến kịch bản đăng nhập.php:

    Không cần thiết phải gửi dữ liệu biểu mẫu đến một tập lệnh khác; bạn có thể xử lý dữ liệu biểu mẫu trong cùng một tệp biểu mẫu. Để làm điều này, hãy thay đổi tập tin biểu mẫu.php theo cách sau:

    Đăng nhập vào trang web Đăng nhập:

    Mật khẩu:

    Bảo mật dữ liệu

    Bảo mật dữ liệu có tầm quan trọng lớn trong PHP. Hãy xem xét một số cơ chế đơn giản có thể cải thiện tính bảo mật của trang web của chúng tôi.

    Nhưng trước tiên, hãy lấy biểu mẫu từ chủ đề trước và thử nhập một số dữ liệu vào đó. Ví dụ: hãy nhập “alert(hi);” vào trường đăng nhập và “mật khẩu” vào trường mật khẩu:

    Sau khi gửi dữ liệu tới đánh dấu html sẽ được thực hiện mã javascript, hiển thị một hộp thông báo.

    Tránh vấn đề tương tựĐể an toàn, bạn nên sử dụng hàm htmlentities():

    If(isset($_POST["login"]) && isset($_POST["password"]))( $login=htmlentities($_POST["login"]); $password = htmlentities($_POST["password" ]); echo "Thông tin đăng nhập của bạn: $login
    Mật khẩu của bạn: $password"; )

    Và thậm chí sau khi vào Mã HTML hoặc javascript tất cả các thẻ sẽ được thoát và chúng tôi sẽ nhận được kết quả đầu ra sau:

    Một hàm khác - hàm Strip_tags() cho phép bạn loại trừ hoàn toàn các thẻ html:

    If(isset($_POST["login"]) && isset($_POST["password"]))( $login=strip_tags($_POST["login"]); $password = Strip_tags($_POST["password" ]); echo "Thông tin đăng nhập của bạn: $login
    Mật khẩu của bạn: $password"; )

    Kết quả hoạt động của nó với cùng một đầu vào sẽ là đầu ra sau.