Cách tạo trang đăng ký của riêng bạn trong WordPress Multisite. Gửi biểu mẫu mà không cần tải lại bằng jQuery AJAX Đăng ký im lặng php lang

Phần lớn các trang web có biểu mẫu đăng ký để người dùng của bạn đăng ký và do đó có thể được hưởng lợi từ một số loại đặc quyền trong trang web. Trong bài viết này, chúng ta sẽ xem cách tạo một biểu mẫu đăng ký trong PHP và MySQL.

Chúng tôi sẽ sử dụng các thẻ đơn giản và chúng tôi cũng sẽ sử dụng thẻ bảng để thiết kế trang web Sign-Up.html. Hãy bắt đầu:

Liệt kê 1 : sign-up.html

Mẫu đăng ký đăng ký

Tên
E-mail
Tên tài khoản
Mật khẩu
Xác nhận mật khẩu


Hình 1:

Mô tả trang web sing-in.html:

Như bạn có thể thấy trong Hình 1, có một biểu mẫu Đăng ký và nó hỏi một số dữ liệu về người dùng. Đây là những dữ liệu phổ biến mà bất kỳ trang web nào yêu cầu người dùng hoặc khách truy cập tạo ID và Mật khẩu. Chúng tôi đã sử dụng thẻ bảng vì để hiển thị các trường biểu mẫu trên trang web ở dạng sắp xếp như bạn có thể thấy trên Hình 1. Nó trông rất đơn giản vì chúng tôi chưa sử dụng Kiểu CSS trên đó, bây giờ chúng ta hãy sử dụng các kiểu CSS và liên kết Tệp kiểu CSS với trang web sing-up.html.

Liệt kê 2: style.css

/*Tệp CSS cho trang web đăng ký*/ #body-color( nền-color:#6699CC; ) #Sign-Up( nền-image:url("sign-up.png"); kích thước nền:500px 500px ; lặp lại nền: không lặp lại; vị trí nền: giữa; lề dưới: 150px; lề trái: 450px; cỡ chữ: đậm; cỡ chữ: 20px;

Liệt kê 3: Liên kết style.css với trang web sign-up.html



Hình 2:

Mô tả tệp style.css:

Trong tệp CSS bên ngoài, chúng tôi đã sử dụng một số kiểu có thể trông mới đối với bạn. Vì chúng tôi đã sử dụng hình ảnh ở chế độ nền và đặt nó ở giữa trang web. Việc này trở nên dễ sử dụng nhờ sự trợ giúp của thẻ div html. Vì chúng tôi đã sử dụng ba id thẻ div. #button, #sing-up và #body-color và chúng tôi đã áp dụng tất cả các kiểu CSS trên chúng và bây giờ bạn có thể xem Hình 2, nó trông đẹp và hấp dẫn đến mức nào. Bạn có thể sử dụng nhiều kiểu CSS khác như kiểu CSS 2D và 3D trên đó. Nó sẽ trông đẹp hơn bây giờ.

Sau tất cả các công việc đơn giản này, chúng ta sẽ tạo một cơ sở dữ liệu và một bảng để lưu trữ tất cả dữ liệu trong cơ sở dữ liệu của người dùng mới. Trước khi tạo bảng, chúng ta nên biết những gì chúng ta yêu cầu từ người dùng. Khi chúng tôi thiết kế biểu mẫu, chúng tôi sẽ tạo bảng theo biểu mẫu đăng ký mà bạn có thể thấy trên Hình 1 & 2.

Liệt kê 3: Truy vấn bảng trong MySQL

TẠO BẢNG Người dùng trang web (userID int(9) NOT NULL auto_increment, fullname VARCHAR(50) NOT NULL, userName VARCHAR(40) NOT NULL, email VARCHAR(40) NOT NULL, pass VARCHAR(40) NOT NULL, PRIMARY KEY(userID) );

Mô tả Liệt kê 3:

Một điều bạn nên biết là nếu bạn không có cơ sở MySQL để sử dụng truy vấn này, thì hãy theo dõi bài viết trước của tôi về . từ liên kết này, bạn sẽ có thể hiểu được cách cài đặt và các yêu cầu. Và làm thế nào chúng ta có thể sử dụng nó.

Trong truy vấn liệt kê 3, chúng tôi đã sử dụng tất cả những thứ chúng tôi cần cho biểu mẫu đăng ký. Vì có các biến Email, Tên đầy đủ, mật khẩu và tên người dùng. Các biến này sẽ lưu trữ dữ liệu của người dùng mà họ sẽ nhập vào biểu mẫu đăng ký trong Hình 2 để đăng ký.

Sau tất cả những công việc này, chúng ta sẽ làm việc với lập trình PHP, một ngôn ngữ lập trình phía máy chủ. Đó là lý do cần tạo kết nối với cơ sở dữ liệu.

Liệt kê 4: Kết nối cơ sở dữ liệu

Mô tả Liệt kê 4:

Chúng tôi đã tạo kết nối giữa cơ sở dữ liệu và các trang web của chúng tôi. Nhưng nếu bạn không biết nó có hoạt động hay không nên bạn sử dụng thêm một thứ nữa trong danh sách kiểm tra cuối cùng 5 cho nó.

Liệt kê 5: kiểm tra kết nối của cơ sở dữ liệu

Mô tả Liệt kê 5:

Trong Liệt kê 5, tôi vừa cố gắng chỉ cho bạn thấy rằng bạn có thể kiểm tra và xác nhận kết nối giữa cơ sở dữ liệu và PHP. Và một điều nữa là chúng tôi sẽ không sử dụng mã Liệt kê 5 trong trang web đăng ký của mình. Bởi vì nó chỉ giúp bạn hiểu cách kiểm tra kết nối MySQL.

Bây giờ chúng ta sẽ viết một ứng dụng lập trình PHP để trước tiên kiểm tra tính khả dụng của người dùng và sau đó lưu trữ người dùng nếu họ là người dùng mới trên trang web.

Liệt kê 6 : connect-sign-up.php

Mô tả của connect-sign-up.php

Trong ứng dụng PHP này, tôi đã sử dụng cách đơn giản nhất để tạo ứng dụng đăng ký cho các trang web. Như bạn có thể thấy trước tiên, chúng tôi tạo một kết nối như liệt kê 4. Và sau đó chúng tôi sử dụng hai hàm, hàm đầu tiên là SignUP() đang được gọi bởi câu lệnh if từ câu lệnh cuối cùng của ứng dụng, trong đó lần đầu tiên nó xác nhận việc nhấn đăng ký cái nút. Nếu được nhấn thì nó sẽ gọi hàm SingUp và hàm này sẽ sử dụng truy vấn CHỌN để tìm nạp dữ liệu và so sánh chúng với Tên người dùng và email hiện được nhập từ người dùng. Nếu tên người dùng và email đã có trong cơ sở dữ liệu thì nó sẽ thông báo xin lỗi bạn đã đăng ký

Nếu người dùng là người mới vì Tên người dùng và ID email hiện tại của họ không có trong cơ sở dữ liệu thì câu lệnh If sẽ gọi NewUser() nơi nó sẽ lưu trữ tất cả thông tin của người dùng mới. Và người dùng sẽ trở thành một phần của trang web.



Hình 3

Trong hình 3, người dùng đang nhập dữ liệu để đăng ký nếu người dùng là người dùng cũ của trang web này theo bản ghi cơ sở dữ liệu. Vì vậy, trang web sẽ hiển thị thông báo người dùng đã đăng ký nếu người dùng là người mới nên trang web sẽ hiển thị thông báo việc đăng ký của người dùng đã hoàn tất.



Hinh 4:

Khi chúng tôi nhập dữ liệu vào biểu mẫu đăng ký (Hình 4), theo cơ sở dữ liệu mà Tên người dùng và email mà chúng tôi đã nhập vào biểu mẫu đăng ký để đăng ký thì dữ liệu đó đã có trong cơ sở dữ liệu. Vì vậy, chúng ta nên thử Tên người dùng và địa chỉ email mới để đăng ký bằng ID và Mật khẩu mới.



Hình 5

Trong hình 5, nó xác nhận với chúng tôi rằng tên người dùng và id email mà người dùng đã nhập. Cả hai đều không có trong hồ sơ cơ sở dữ liệu. Vì vậy, bây giờ ID và Mật khẩu mới đã được tạo và người dùng có thể sử dụng ID và Mật khẩu mới của mình để đăng nhập vào lần tiếp theo.

Phần kết luận:

Trong bài viết này, chúng ta đã tìm hiểu cách đơn giản nhất để tạo một trang web đăng ký. Chúng tôi cũng đã học được cách nó xử lý cơ sở dữ liệu nếu chúng tôi sử dụng PHP và MySQL. Tôi đã cố gắng cung cấp cho bạn kiến ​​thức cơ bản về chức năng đăng ký trang web. Cách nó hoạt động ở mặt sau và cách chúng ta có thể thay đổi giao diện của nó ở mặt trước. Đối với bất kỳ câu hỏi nào, đừng ngần ngại và bình luận.

Chúng tôi tạo trang đăng ký của riêng mình cho nhiều trang thay vì wp-signup.php tiêu chuẩn.

Trong cài đặt WordPress thông thường, trang đăng ký (đăng nhập, đặt lại mật khẩu) được xuất ra bởi tệp wp-login.php.

  • /wp-login.php - ủy quyền
  • /wp-login.php?action=register - đăng ký
  • /wp-login.php?action=lostpassword - đặt lại mật khẩu

Có các điều kiện riêng cho nhiều trang trong wp-login.php. Vì vậy, khi bạn theo liên kết /wp-login.php?action=register trên nhiều trang, WordPress sẽ chuyển hướng đến trang /wp-signup.php. Nhiều chủ đề không làm cho trang trông hấp dẫn lắm, vì vậy chúng tôi sẽ tự tạo chủ đề cho riêng mình.

Trang web chính của mạng

Theo mặc định, WordPress mở trang đăng ký (wp-signup.php) trên tên miền (trang web) chính của mạng. Tuy nhiên, bạn có thể tạo một trang đăng ký riêng cho từng trang web trong mạng của mình, ngay cả khi chúng có chủ đề khác nhau. Chúng tôi sẽ xem xét trường hợp tất cả các trang web trong mạng đều có trang đăng ký riêng nhưng sử dụng cùng một chủ đề và các trang web chỉ khác nhau về ngôn ngữ. Nếu bạn sử dụng các chủ đề khác nhau, bạn sẽ cần phải viết nhiều mã hơn.

hàm.php?

KHÔNG. Tên file này dường như được nhắc đến trong mọi bài viết về WordPress. Trong trường hợp của chúng tôi, do chức năng đăng ký được thiết kế cho một số trang web, nên đưa nó vào các plugin MU, sẽ được tải khi bất kỳ trang web nào được mở.

trữ tình lạc đề

Điều đáng chú ý là các plugin MU được tải trước các plugin thông thường và trước khi lõi WordPress được tải đầy đủ, do đó việc gọi một số hàm có thể dẫn đến các lỗi nghiêm trọng trong PHP. Việc tải “sớm” như vậy cũng có lợi thế của nó. Ví dụ: bên trong bất kỳ chủ đề nào, bạn không thể đính kèm một số hành động được kích hoạt ngay cả trước khi tệp tin.php được tải từ chủ đề. Một ví dụ về điều này là các hành động từ plugin Jetpack có dạng jetpack_module_loaded_similar-posts (bài đăng liên quan là tên của mô-đun), với sự trợ giúp của nó, bạn có thể giám sát hoạt động của các mô-đun trong Jetpack. Không thể "đính kèm" hành động này từ tệp chủ đề vì hành động này đã được kích hoạt trước khi tải chủ đề - các plugin được tải trước chủ đề. Bạn có thể xem hình ảnh chung về thứ tự tải WordPress trên trang Tham chiếu hành động trong codex.

Thứ tự tập tin

Các plugin MU có thể chứa bất kỳ số lượng tệp và bất kỳ cấu trúc nào mà bạn thấy hợp lý. Tôi tuân theo một cái gì đó giống như hệ thống phân cấp này:

|-mu-plugins |-|-load.php |-|-|-selena-network |-|-|-|-signup |-|-|-|-|-plugin.php |-|-|-| -|-... |-|-|-|-jetpack |-|-|-|-|-plugin.php

Tệp Load.php chứa tất cả các “plugin” cần thiết cho mạng của chúng tôi:

// Tải bản dịch cho tất cả các addon Load_muplugin_textdomain ("selena_network", "/selena-network/ngôn ngữ/"); // Đăng ký mạng yêu cầu WPMU_PLUGIN_DIR . "/selena-network/signup/plugin.php"; // Các plugin khác // yêu cầu WPMU_PLUGIN_DIR ...

Bên trong thư mục Selena-network, các thư mục plugin được lưu trữ, mỗi thư mục có plugin.php riêng mà chúng tôi đưa vào Load.php. Điều này mang lại cho bạn sự linh hoạt và khả năng tắt và bật mọi thứ một cách nhanh chóng.

Địa chỉ trang đăng ký

Để chỉ định địa chỉ của trang đăng ký, hãy sử dụng bộ lọc wp_signup_location. Nó có thể được tìm thấy bên trong tệp wp-login.php và chịu trách nhiệm chuyển hướng đến wp-signup.php.

Trường hợp "đăng ký": if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); thoát;

Hãy thêm chức năng của chúng tôi vào mu-plugins/selena-network/signup/plugin.php, hàm này sẽ trả về địa chỉ của trang đăng ký trên trang hiện tại:

Hàm selena_network_signup_page ($url) ( return home_url () . "/signup/"; ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network là tiền tố mà tôi sử dụng trong tên của tất cả các chức năng bên trong plugin MU trên trang web của mình để tránh xung đột, nó nên được thay thế bằng tiền tố duy nhất của riêng bạn. Mức độ ưu tiên của việc thêm bộ lọc là 99, vì một số plugin, chẳng hạn như bbPress và BuddyPress, có thể ghi đè địa chỉ này bằng địa chỉ của chính chúng (các plugin MU tải sớm hơn các plugin thông thường, xem ở trên). Lưu ý rằng home_url() được sử dụng thay vì network_site_url() để giữ khách truy cập trên cùng một tên miền. Bất kỳ URL nào cũng có thể được sử dụng làm địa chỉ.

Tạo một trang

Bây giờ, hãy tạo một trang có địa chỉ site.com/signup/ thông qua giao diện bình thường và trong thư mục chủ đề con, mẫu cho trang mới của chúng ta là page-signup.php. Thay vì từ "đăng ký", bạn có thể sử dụng một ID duy nhất.

Bên trong mẫu mới, bạn cần gọi hàm selena_network_signup_main(), hàm này sẽ hiển thị biểu mẫu đăng ký.

Cần lưu ý rằng toàn bộ quy trình tạo mẫu là tùy chọn và thay vào đó, bạn có thể tạo mã ngắn của riêng mình, mã này cũng sẽ gọi hàm selena_network_signup_main().

wp-signup.php và wp-activate.php

Bây giờ hãy tạo một hàm sẽ hiển thị mẫu đăng ký. Để thực hiện việc này, hãy sao chép các tệp wp-signup.php và wp-activate.php từ thư mục gốc WordPress sang mu-plugings/selena-network/signup/ (và đừng quên kết nối chúng bên trong mu-plugins/selena-network /signup/plugin.php) . Các thao tác tiếp theo với tệp cực kỳ khó và dài để mô tả, vì vậy bạn sẽ phải tự mình thực hiện. Tôi sẽ chỉ mô tả chính xác những gì cần phải làm và xuất bản các tệp nguồn của dự án của mình:

  • Ở đầu tệp, hãy xóa tất cả các yêu cầu, lệnh gọi hàm và mã khác bên ngoài hàm.
  • Đổi tên tất cả các chức năng bằng cách thêm tiền tố duy nhất vào tên.
  • Gói phần dưới của mã wp-signup.php trong hàm selena_network_signup_main và ngay từ đầu hãy viết Global $active_signup; .
  • Thay thế bố cục của riêng bạn ở đúng nơi.
  • Bên trong wp-activate.php, bạn cần thực hiện điều tương tự:

  • Xóa tất cả mã bên ngoài các chức năng, gói bố cục trong một chức năng riêng biệt.
  • Thay đổi cách bố trí ở những nơi cần thiết.
  • Tệp wp-activate.php chịu trách nhiệm cho trang kích hoạt tài khoản. Giống như trang đăng ký, bạn cần tạo một mẫu riêng cho nó, bên trong đó bạn cần gọi hàm từ tệp wp-activate.php.

    Gửi thư kích hoạt

    Trang đăng ký sẽ gửi cho khách truy cập một email có liên kết để kích hoạt tài khoản của họ. Theo mặc định, việc này được thực hiện bởi hàm wpmu_signup_user_notification() từ tệp ms-functions.php. Bạn có thể mượn chức năng của nó cho chức năng của riêng bạn. Lý do nên tránh sử dụng tính năng này là vì nó gửi liên kết kích hoạt tài khoản từ wp-activate.php. Bạn có thể “tắt” chức năng này bằng bộ lọc wpmu_signup_user_notification, trả về sai (nếu không thực hiện việc này, thư kích hoạt sẽ được gửi hai lần, được thôi, thực ra là hai chữ cái khác nhau).

    Hàm armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // Mã từ hàm wpmu_signup_user_notification() wp_mail($user_email, wp_specialchars_decode($subject), $message, $message_headers) ; trả về sai; ) add_filter("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

    Kết quả là trang đăng ký theo chủ đề Selena bắt đầu trông sạch sẽ và gọn gàng hơn rất nhiều.

    Phần kết luận

    Có nhiều cách khác không chính xác lắm trên Internet để thực hiện điều tương tự - chuyển hướng Apache, các biểu mẫu AJAX sẽ không hoạt động nếu không có Java Script, v.v. Tôi không thực sự thích tất cả những điều này, vì vậy tôi đã cố gắng thực hiện nó một cách chính xác như có thể trên trang web của riêng tôi.

    Mình lưu ý các bạn nên edit file cẩn thận và cố gắng không sai lệch quá nhiều so với file gốc, để sau này nếu WordPress thay đổi file wp-signup.php và wp-activate.php thì sẽ dễ so sánh hơn chúng với nhau để tìm ra sự thay đổi.

    Đừng quên xem mã nguồn của tất cả các chức năng được mô tả ở trên để hiểu đầy đủ những gì và như thế nào đang diễn ra bên trong mã.

    Thưởng. Bảo vệ khỏi những kẻ gửi thư rác

    Ngay cả những trang web WordPress nhỏ nhất cũng thường xuyên bị cản trở bởi việc đăng ký spam. Bạn có thể viết vô số điều kiện để lọc bot, thường giống như một nỗ lực tạo ra trí tuệ nhân tạo :) Trong trường hợp có nhiều trang, chuyển hướng thông thường trong Apache đã giúp tôi rất nhiều, với sự trợ giúp của nó, tôi đã yêu cầu 404 khi mở / wp-signup.php và /wp-acitvate.php (Tôi không phải là chuyên gia về cấu hình Apache, vì vậy các quy tắc của tôi có thể không chính xác lắm).

    RewriteEngine On RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # Chúng tôi không chạm vào các quy tắc từ WordPress theo mặc định :) # ... # END WordPress

    P.S. Mình cố gắng mô tả một số thứ của bên thứ ba càng chi tiết càng tốt, vì khi bắt đầu, nhiều khi không có ai gợi ý và giải thích. Tôi cũng tin rằng những lời khuyên nhỏ như vậy về các tài liệu khác sẽ khuyến khích ai đó học hỏi điều gì đó mới mẻ và mở rộng lĩnh vực kiến ​​thức của họ. Các mục RewriteRule sử dụng biểu thức chính quy, chúng không hề phức tạp chút nào, ví dụ ký hiệu ^ có nghĩa là bắt đầu một dòng.

    Quảng cáo

    Xin chào tất cả các độc giả!

    Hôm nay chúng ta sẽ xem xét một chủ đề khá quan trọng được nhiều nhà tuyển dụng đưa ra, đó là đa ngôn ngữ.

    Ý tôi là gì khi nói về đa ngôn ngữ? Chà, có lẽ mỗi độc giả quý giá của tôi đã hơn một lần nhìn thấy những cổng thông tin thú vị và trong số vô số thông tin, họ tìm thấy hai biểu tượng nhỏ, chủ yếu có các ngôi sao và sọc nổi tiếng cũng như những lá cờ trắng-xanh-đỏ quen thuộc. Tất nhiên, sau khi nhấp vào một trong số chúng, bài phát biểu tiếng Nga mà chúng ta quen thuộc sẽ chuyển sang ngôn ngữ tư sản (), hoặc ngược lại. Nhưng bạn đã bao giờ tự hỏi làm thế nào tất cả điều này được thực hiện? Ồ, đó chính xác là điều tôi sắp nói đến.

    Tôi sẽ nói ngay rằng để làm việc với tài liệu sẽ được trình bày ở đây, bạn sẽ cần hỗ trợ PHP ít nhất là 4,39.

    Vì vậy, như bạn đã biết, nội dung trang web của chúng tôi được chia thành động và tĩnh. Chúng tôi coi nội dung tĩnh là thứ sẽ không thay đổi ý nghĩa trong quá trình hoạt động (từ khóa, văn bản lỗi và những nội dung vô nghĩa khác). Đây là nơi chúng ta sẽ bắt đầu. Nhưng hãy phân tích chính xác cách chúng ta sẽ thay đổi ngôn ngữ của một giá trị văn bản nhất định. Tôi hy vọng không ai đề xuất sử dụng ngoại lệ, bởi vì điều này phi lý đến mức không thể phi lý hơn. Thay vào đó, tôi khuyên bạn nên sử dụng hằng số (đọc về các kiểu dữ liệu trên php.net). Chúng ta sẽ chỉ khai báo một từ chức năng, tùy theo nghĩa của ngôn ngữ mà từ đó sẽ thay đổi nghĩa của nó. Chung ta se lam như thê nao? Có, giống như những người khác, hãy tạo hai (ví dụ) hai tệp khác nhau, tên của chúng sẽ có mẫu sau:

    Ngôn ngữ_map.php;

    Như bạn đã hiểu, thay vì từ `ngôn ngữ`, chúng tôi sẽ thay thế một giá trị đặc trưng cho ngôn ngữ này. Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng mã ngôn ngữ gồm hai ký tự (ru, en, ua, pl, v.v.).

    Chà, chúng ta đã nắm được lý thuyết, bây giờ chúng ta hãy áp dụng kiến ​​thức của mình vào thực tế. Chúng tôi tạo hai tập tin. Tôi đã tạo các tệp có bản dịch tiếng Anh và tiếng Nga và cách bạn tạo nó tùy theo sở thích của bạn.

    Tập tin: en_map.php Tập tin: ru_map.php

    Vì vậy, theo tôi, không có gì phức tạp và mọi thứ được viết đều tuân theo những luật RHP tầm thường nhất. Đầu tiên, chúng ta kiểm tra xem các hằng số đã được khai báo chưa; nếu có thì chúng ta không khai báo chúng;

    Đây là phần dễ, bây giờ chúng ta hãy chuyển sang chủ đề khó hơn - dịch phần động.

    Giả sử bạn có một hệ thống cổng thông tin lớn hoặc một trang web đơn giản, nhưng bạn, một lập trình viên tài năng, biết tất cả các khía cạnh của PHP, không phải là chủ sở hữu của nó mà làm ra nó theo yêu cầu. Chủ sở hữu là một nhà thiết kế toàn thời gian (), người không có ý tưởng, không biết gì về bất kỳ sự phức tạp nào trong lập trình, nhưng anh ta chỉ có một mong muốn là mọi thứ đều hoạt động và anh ta có thể thay đổi mọi thứ. Đối với mọi thứ, đó là một câu chuyện khác, nhưng chúng tôi vẫn sẽ cho phép trẻ thay đổi các thông số ngôn ngữ của trang web (bất cứ điều gì trẻ thích thú).

    Nhưng một lần nữa quay trở lại tình thế tiến thoái lưỡng nan về “Nhà thiết kế và Lập trình viên”, cần phải nhắc lại một lần nữa rằng một trang web như vậy phải hoàn toàn, có thể nói là “Những gì bạn thấy là những gì bạn nhận được”, nếu không thì không thể. Vì vậy, tôi sẽ cố gắng làm mọi thứ để nó không gây căng thẳng cho các lập trình viên và có thể làm hài lòng các nhà thiết kế (nghĩa là khả năng sử dụng).

    Vì vậy, hãy bỏ đi những lời nói suông và hướng tới Berlin. Chúng ta sẽ bắt đầu với lý thuyết. Vì vậy, làm cách nào chúng ta có thể phân biệt giữa các ngôn ngữ của nội dung động, tốt nhất là loại bỏ, thay đổi hoặc thậm chí tệ hơn? Không có cách nào để sử dụng hằng số ở đây, vậy chúng ta phải làm gì?

    Tôi đã có thể nghe thấy những suy nghĩ trôi nổi xung quanh bạn.

    Cá nhân tôi, khi cố gắng đưa điều này vào cuộc sống, lúc đầu tôi làm theo cách phi lý nhất, đó là để dịch bài viết, tôi chia các trường trong bảng có thể dịch thành hai (tức là tôi đã tạo field_eng và field_ru) theo cách này, những chiếc bàn vốn đã lớn lại trở nên khổng lồ một cách khó hiểu. Vì vậy, tôi bắt đầu tìm kiếm một giải pháp thay thế, và tin hay không thì tùy, tôi đã tìm thấy nó. Bạn đã cảm thấy ấm áp hơn chưa, vâng, chúng ta sẽ sớm đến phần nóng nhất. Tôi đã tìm ra cách thoát khỏi tình huống này và bây giờ tôi định giải thích cho bạn, còn bạn có hiểu hay không thì tùy bạn. Đầu tiên, hãy đồng ý về tất cả các chi tiết.

    Đầu tiên, chúng ta cần một bảng trong đó dữ liệu dịch sẽ được đặt. Giả sử chúng ta có một bảng `bài viết` trong đó một số bài viết sẽ được đặt và chúng phải có hai bản dịch, nhưng một bản dịch là bắt buộc. Chúng tôi sẽ chỉ quan tâm đến hai trường chính, trong trường hợp của chúng tôi: tiêu đề, mô tả. Chúng ta sẽ cấu trúc văn bản theo cách này:

    Phiên bản tiếng Anh của bài viết Phiên bản tiếng Nga của bài viết

    Sau đó, dòng này, dưới dạng kết hợp của hai cấu trúc này, sẽ được thêm vào trường `title` và `description` của bảng `articles`.

    Phương pháp này sẽ bao gồm tìm kiếm lần xuất hiện đầu tiên của từ khóa mở (giả sử ), sau đó chúng ta sẽ tìm lần xuất hiện đầu tiên của từ khóa đóng. Nhưng chúng ta không được quên rằng chúng ta không chỉ cần lối vào mà còn cần độ dài của cấu trúc. Trong trường hợp đầu tiên, chúng ta sẽ cộng độ dài của cấu trúc với lần xuất hiện đầu tiên của cấu trúc mở; bước thứ hai sẽ là tìm độ dài của cấu trúc đóng. Nhưng bạn hỏi: .

    Sử dụng hàm substr(). Tham số đầu tiên sẽ là chính văn bản, tham số thứ hai sẽ là độ dài của cấu trúc mở và tham số thứ ba (thú vị nhất) sẽ là sự khác biệt giữa lần xuất hiện đầu tiên của cấu trúc đóng và độ dài của văn bản. Vâng, tôi hiểu nó không dễ dàng như vậy, nhưng nó cần phải được hiểu. Vì vậy, bây giờ chúng ta sẽ thực hiện điều này trong thực tế. Tôi đã tạo một chức năng làm nổi bật văn bản giữa các thẻ khóa. Nó sẽ có ba tham số: văn bản được phân tích cú pháp, ngôn ngữ được sử dụng để phân tích cú pháp và một mảng cấu trúc.

    Như bạn có thể thấy, nó khá dài và bạn có thể bị nhầm lẫn, nhưng nếu bạn không hiểu điều này thì đó không phải là vấn đề lớn, vì chức năng liệt kê đã tồn tại và xa hơn một chút, tôi sẽ xem xét một phương pháp khác cho cùng một mục đích. Có, và đừng quên khai báo hằng số ngôn ngữ NOT_ENTERED ở đâu đó, hằng số này sẽ được gán cho kết quả của hàm nếu độ dài văn bản bằng 0.

    Vì vậy, chúng tôi đã tìm ra nó bằng vũ lực, nhưng bây giờ chúng tôi phải đối mặt với một nhiệm vụ mới, biên dịch văn bản thuần túy thành một chuỗi được định dạng đặc biệt. Việc này đã đơn giản hơn nhiều, và nếu bạn đủ hiểu biết về PHP thì bạn có thể dễ dàng viết một hàm như vậy, còn nếu bạn vẫn đang bơi thì hãy đến văn phòng.

    Thuật toán không phức tạp và bao gồm việc thay thế tất cả các cấu trúc ngôn ngữ trong một dòng. Lúc đầu, vì lười biếng, tôi muốn giới hạn tập lệnh ở một số ngôn ngữ nhất định (điều này giúp dễ thực hiện hơn), nhưng sau đó tôi đã thay đổi ý định và nhận ra điều này:

    Được rồi, ở đây tôi sẽ giải thích một chút. Hàm lấy một mảng làm tham số. Cấu trúc mảng phải như thế này:

    "định danh ngôn ngữ"=>"văn bản";

    Sau đó, chúng tôi kiểm tra xem nếu tham số nhận được không phải là một mảng thì .

    Nếu nó vẫn là một mảng, thì tất nhiên chúng ta liệt kê nó, và thay cho ngôn ngữ trong cấu trúc, chúng ta đặt khóa của phần tử này của mảng kết hợp, và thay cho văn bản, tất nhiên, chính văn bản đó là giá trị của biến $v. Sau đó, chúng tôi hợp nhất tất cả dữ liệu vào một dòng. Nhưng tôi quên đề cập đến một chi tiết quan trọng, hay nói cách khác là một đoạn văn bản khá lớn. Đầu tiên, trước vòng lặp, chúng ta khai báo ba biến: data, temp, count;

    Biến đếm là số lần lặp của vòng lặp và với mỗi vòng lặp tiếp theo, bộ đếm sẽ tăng lên. Biến dữ liệu là chuỗi kết quả trong tương lai mà tất cả cấu trúc ngôn ngữ sẽ được hợp nhất. Nhưng số lượng biến và nhiệt độ thú vị hơn. Họ cần chúng để làm gì? Chà, có lẽ hầu hết mọi người đều đã đoán ra sau khi đọc nguồn, nhưng tôi sẽ giải thích cho những ai chưa biết. Điều này được thực hiện để kiểm tra xem cấu trúc ngôn ngữ có được lặp lại nhiều lần hay không. Đây là lý do tại sao chúng ta khai báo biến count. Vì giá trị mặc định của nó là 0 nên chúng tôi kiểm tra xem vòng lặp đã được thực thi ít nhất một lần hay chưa, vì nếu chúng tôi không làm điều này, một số thứ như 2=2 hoặc 0=0 sẽ xuất hiện, vì giá trị của $k vẫn chưa đã thay đổi . Vì séc sẽ bị bỏ qua lần đầu tiên nên chúng tôi gán giá trị cho biến $temp sau séc. Điều này cũng được thực hiện vì một lý do. Trong lần lặp đầu tiên, mọi thứ sẽ ổn, nhưng nếu chúng ta vẫn gán một giá trị trước khi kiểm tra, thì kiểm tra sẽ thực hiện kiểm tra đã được đề cập (2=2, 3=3, v.v.). Đó là lý do tại sao chúng tôi làm theo cách này.

    Bây giờ, như một kết luận hợp lý, chúng tôi sẽ tạo một trang web nhỏ nơi áp dụng tất cả những điều trên:

    Vâng, thế thôi. Tuy nhiên, chỉ có một chữ “nhưng” trong chữ viết; tác giả không thể thêm nhiều hơn hai phương án dịch thông qua biểu mẫu. Tôi sẽ không, giống như các tác giả khác, nói rằng tôi làm điều này để bạn rèn luyện, bởi vì thành thật mà nói, khi tôi đến điểm này, đầu tôi gần như không còn làm phiền tôi nữa nên tôi để nó trên vai bạn . Hãy tin tôi, có rất nhiều giải pháp khả thi và tôi thực sự hy vọng rằng bạn sẽ tìm thấy nó. Về chức năng, tôi không thể nói 100% rằng chúng sẽ không gây ra lỗi, nhưng sẽ không có lỗi nghiêm trọng, mặc dù điều gì cũng có thể xảy ra. Nhưng tôi chắc chắn hơn 60% rằng cú pháp đã sai vì tôi chưa kiểm tra các ví dụ. Nhưng đây là một khóa đào tạo thực sự tốt cho bạn, vì bắt “bọ chét” là một hoạt động rất hữu ích!

    Thôi, tôi nghĩ bài viết này có thể kết thúc ở đây. Nếu bạn không thành công, đừng hướng sự tức giận của bạn vào chiếc máy tính tồi tàn, bàn phím của bạn và đặc biệt là vào các nhà phát triển ngôn ngữ tuyệt vời như PHP, hãy thoải mái hướng mọi thất bại của bạn theo hướng của tôi. Tôi không nghĩ điều này sẽ khiến tôi tệ hơn nữa, nhưng bạn sẽ có người để trút giận.

    Tôi có một trang đăng ký cơ bản đăng dữ liệu lên cơ sở dữ liệu SQL. Tuy nhiên, tôi muốn ngăn trang chuyển hướng khi gửi (dù thành công hay không).

    Đây là những gì tôi có bây giờ và nó không hoạt động. Nó không hiển thị thông báo lỗi.

    HTML – đăng ký.html

    Đăng ký

    JavaScript – signup.js

    Hàm submit() ( $("form").submit(function(e) ( e.preventDefault(); $. (( type: "POST", url: "signup. ", data: $("form") .serialize(), thành công: function() ( console.log("Đăng ký thành công"); ) error: function() ( console.log("Đăng ký không thành công"); ) ) ) $(document). hàm() ( gửi(); ));

    PHP – đăng ký.php

    Đây là JSFiddle.

    Hy vọng các bạn có thể giúp đỡ. Cảm ơn trước :)

    Nếu bạn đang sử dụng ajax, bạn không cần sử dụng loại đầu vào là nút gửi.

    $(document).ready(function() ( $("#signup").click(function(e) ( e.preventDefault(); $.ajax(( type: "POST", url: "signup.php" , data: $("form").serialize() thành công: function() ( console.log("Đăng ký thành công"); ) error: function() ( console.log("Đăng ký không thành công"); ) ) ); ));

    Cũng thay đổi ở đây

    $post_FirstName = $_POST["đầu tiên"]; // tên là `first` không phải `firstname`

    Bạn có một số phanh và khung đóng không đúng cách

    Hàm submit() ( $("form").submit(function(e) ( e.preventDefault(); $.ajax(( type: "POST", url: "signup.php", data: $("form ").serialize(), thành công: function() ( console.log("Đăng ký thành công"); ),//lỗi ở đây: function() ( console.log("Đăng ký không thành công"); ) )); ));//tại đây ) $(document).ready(function() ( submit(); ));

    Không cần phải gọi hàm gửi. Chỉ điều này mới có tác dụng (bạn đã bỏ lỡ dấu phẩy và thẻ đóng):

    $("form").submit(function(e) ( e.preventDefault(); $.ajax(( type: "POST", url: "signup.php", data: $("form").serialize( ), thành công: function() ( console.log("Đăng ký thành công"); ), //Bạn đã bỏ sót lỗi này: function() ( console.log("Đăng ký không thành công"); ) )); // Bạn đã bỏ lỡ điều này