Як чоловіки ставляться memberlist php order. Вихідний код виклику форми та обробника

Головна / Усунення несправностей

The most complete member management and membership subscriptions plugin для WordPress

Paid Memberships Pro is designed for premium content sites, clubs/associations, subscription products, newsletters and more! Plugin adds a new revenue source to your site and is flexible enough to fit the needs of all online and offline businesses.

Simple to install and get running – deeply customizable!

  • Unlimited Levels with Flexible Membership Pricing
  • 6 Popular Payment Gateways Included
  • Extensive Options for Content Restriction
  • Customizable Reports and Member Dashboards
  • Over 60 Premium Add Ons to Extend and Customize
  • 100% GPL and Integrated with Third Party Services

Sites running Paid Memberships Pro use it to:

  • Створення професійних організацій з тисячами членів.
  • Get paid for e-learning and digital courseware.
  • Прийнято відшкодування плати за вміст, підкасти, відео, і більше.
  • Створити приватні соціальні організації для unique interest groups.
  • Розробка robust directory or listings sites by topic or region.
  • Offer product subscriptions або members-тільки product discounts.

Choose from Top Payment Gateways.

Всі наші збори gateways включаються в plugin. Choose від PayPal, Stripe, Authorize.net, Braintree або 2Checkout.

Infinitely Configurable, Unlimited Membership Levels.

Set up membership levels that best fit your business, whether they are one-time payments or recorreng subscriptions (annual, monthly, weekly, daily). Ви можете дотримуватися різних послідовних періодів, включаючи Free Trials, Custom-length Trial, або 'Introductory' Pricing trials.

Membership levels забезпечує обмежений доступ до members-лише вміст (включаючи pages, posts, categories, videos, forums, downloads, support, single “a la carte” page access, and more).

Control the user-experience від start to finish.

Ваші члени можуть update їх billing інформації або відключити їх рахунок прямо на вашому сайті. Будь-яка активна підписка буде відключена на платіжній gateway for you.

Add Ons to help you do more.

Розширюються особливості наших членів мережі або integrate з трьома-партіями послуг через нашу library з понад 60 додатків. Ваша library of free or paid Add Ons allow you to:

  • Integrate members with email marketing platforms, включаючи Mailchimp, Constant Contact, AWeber і GetResponse.
  • Відмінний доступ до forums, groups, kurzs, downloads, events, and product.
  • Дозволяють affiliates отримати кредит для членів checkouts.

Paid Memberships Pro є безкоштовним власником plugin для WordPress

Цей Plugin є 100% GPL і доступний з WordPress репозиторії або на нашому сайті на http://www.paidmembershipspro.com. Повна версія plugin не пов'язана з обмеженнями або додатковими ліцензіями, потрібними. Розробники повинні отримати введені на нашій GitHub сторінці .

Скріншоти

Блоки

Цей плагін надає 13 блоків.

































Membership Account Page pmpro/levels-page /account-membership-section Membership Account: Memberships pmpro/billing-page Membership Billing Page pmpro/account-links-section Membership Account: Links pmpro/account-invoices-section Membership Account: Invoices pm checkout-button Membership Checkout button pmpro/confirmation-page Membership Confirmation Page

Поширені запитання

I потрібний спосіб налаштування, configuring, або customizing plugin.

Відгуки

Будьте, щоб боротися з використанням пам'яті теми і платні memberships для plugin, але find them too restrictive. У member-навігації меню тільки має 2 рівні. Paid support is expensive are the Pro versions. I've gone over astra theme with AR-member plugin which is only $20 USD. It works brilliantly and has many levels of menu! Would highly recommend ця комбінація для членів/розповсюджений вміст

У будь-який час ми намагаємося зареєструватися, він перебуває з: Там є JavaScript errors на сторінці. Please contact the webmaster. However, після extensive checking, є не issues on my site. У нас є деактивовані всі модулі та теми і його не відповідають. ***UPDATE*** Один з моїх модулів, які використовуються з AMP і web applications had Optimise Javascript enabled a even when the plugin itself was disabled, the optimisation remained, once I turned this off, it worked fine.

I started using PMPro роки протягом одного з моїх перших клієнтів. Recently began working on a new membership site. PMPro has great documentation, але I had a question that wasn"t covered in the docs. Sent a support request, and had a reply in my inbox the next morning. product for years.Great work all!

Учасники та розробники

"Paid Memberships Pro" - проект з відкритим вихідним кодом. У розвиток плагіна зробили свій внесок такі учасники:

Учасники

Журнал змін

2.0.7 — 2019-05-30

  • BUG FIX: Вирішили значення, за допомогою якого знімок start-date може бути певним чином налаштований incorrectly on Stripe subscription.
  • BUG FIX: Fixed issue where the membership shortcode не буде працювати належним чином і більше, ніж один рівень name був given.
  • BUG FIX: Змішаний елемент, в якому неправильна адреса електронної пошти була певною мірою налаштована на конфігураційну електронну пошту на update billing page. (Thanks, Jessica Thomas)
  • BUG FIX/ENHANCEMENT: Зменшена плата за hr tag над user fields checkout for consistency.
  • ENHANCEMENT: Натисніть на prioritu на потрібну пам'ятку metabox до "високих" йо appears higher in the right sidebar.

2.0.6 — 2019-05-30

  • SECURITY: Now using wp_safe_redirect when possible, особливо в includes/login.php where the user-provided redirect_to URL parameter is used. (Thanks PluginVulnerabilities.com)

2.0.5 — 2019-04-25

  • BUG FIX: Fixed fatal error на повернення від 2Checkout.
  • BUG FIX: Поверніть помилку при налаштуванні PMPro за допомогою WP-CLI.
  • BUG FIX: Fix database upgrade error on localhost environment. (Thanks, codezz on GitHub)
  • BUG FIX: Fixed issue where the credit card expiring email didn’t include user info because the user ID wasn’t passed in properly. (Thanks, David Cervantes Caballero)
  • BUG FIX: Fixed typo on edit level page. (Thanks, Theuns Coetzee)
  • BUG FIX: Вирішення покупки з днем ​​поновлення повідомлень не показує в деяких випадках.
  • BUG FIX: Новий контроль після cancelling a Stripe subscription на gateway до повідомлень, якщо це буде заборонено.
  • BUG FIX/ENHANCEMENT: Нові результати пошуку в pmpro_getMembershipLevelsForUser(). Це підтримує ефективність, особливо коли є багато повідомлень на одній сторінці до перевірки membership for. (Thanks, Seagyn Davis)
  • BUG FIX/ENHANCEMENT: Now sending display_name до $data array passed до PMPro email filters. (Thanks, David Cervantes Caballero)
  • BUG FIX/ENHANCEMENT: Новий пошук для останніх повідомлень з "success" або "pending" status on the Billing page.
  • BUG FIX/ENHANCEMENT: Added pmpro_checkout_preheader_before_get_level_at_checkout and pmpro_checkout_preheader_after_get_level_at_checkout action hooks. Використовуючи pmpro_checkout_preheader_before_get_level_at_checkout, щоб запустити session earlier now.
  • BUG FIX/ENHANCEMENT: Повернутися до "membership_code_id" і "membership_code" як поля опцій для member shortcode. Вони будуть працювати, і це необмежене те, що необхідно для того, щоб вибрати для вашого користувача discount code. Added "membership_description" and "membership_confirmation" instead.
  • BUG FIX/ENHANCEMENT: Filtering password reset message to make sure link still works in all cases when we convert emails to HTML.
  • BUG FIX/ENHANCEMENT: Added reCAPTCHA v3 and invisible reCAPTCHA support. Це є сумісними функціями, використовуючи Stripe або Braintree update до reCAPTCHA v3 option. Read more here: https://www.paidmembershipspro.com/pmpro-update-2-0-5/
  • REFACTOR: Нині керування pmpro_billing_preheader шлунок після jquery.creditCardValidator script є введений в preheader/billing.php до матчу як ми будемо в preheader/checkout.php. (Thanks, Rafe Colton)

2.0.4 — 2019-01-14

  • BUG FIX: Fixed warning in code added in 2.0.3, які можуть викликати checkout.
  • BUG FIX: Встановлення priority pmpro_check_admin_capabilities до 5 для того, щоб скористатися ним перед дистриб'ютором.
  • BUG FIX: Переміщений дюплікувати ідентифікатор на акаунт акаунт акаунт page «cancel» action link.
  • BUG FIX/PERFORMANCE: Немає тривалого відображення frontend.blocks.js, які не мають функціонального коду, але loaded на безлічі Gutenberg JS, що не потребується на frontend. Якщо у нас blogs мають frontend JS, вони будуть load it again, але й тому, що виявляють dependences are correct.
  • BUG FIX/PERFORMANCE: No longer loading blocks.style.css. Ці frontend styles були redundant with CSS в css/frontend.css.
  • NOTE: Repository SVN був покладений на 2.0.3 tag, коли update went out. Деякі користувачі можуть бути оновлені або класи для оновлення і не gotten правильні файли для 2.0.3. Everyone повинен update to 2.0.4, який є Gucci.

2.0.3 — 2019-01-11

  • BUG FIX: Знижена сума, де код в стрижній браузері був відключений old subscriptions early if users renewed with different gateway. NOTE: Вони були fix для цього в версії 2.0, але це було implemented fully.
  • BUG FIX: Filtering pmpro_other_order_ids_to_cancel виконати поточний checkout's order doesn't get cancelled. Цей started happening in version 2.0 since we started setting the user_id on orders for existing users before the checkout був fully processed. Це fix along with the one above and theres will fix cases where users being cancelled immediately after checkout.
  • BUG FIX: Вирішення warning на edit levels page by defaulting $confirmation_in_email to 0.

2.0.2 — 2019-01-10

  • BUG FIX: Fixed issues when using non-US currencies. За допомогою pmpro_round_price функція в декількох сферах вона була потрібна. Зроблено для останньої update, що буде збільшити число десятків на певних columnах в DB до 8 для підтримки обмежень як Bitcoin, але виконати поточний DB update for version 2.1.
  • BUG FIX: Fixed issue where existing users checked out could run into problems. Added getMembershipLevelAtCheckout метод до MemberOrder class and using that during checkout. getMembershipLevel метод може бути user_id property of order (added to orders at checkout in version 2.0) and lookup the level data from the pmpro_memberships_users table instead of using the pmpro_level global. Вони беруть участь PayPal Express (якщо інші також) можуть використовувати короткі дані, коли виконують розмови на pmpro_isLevelRecurring/etc.
  • BUG FIX: Fixed bug where a notice to deactivate the Better Logins Report plugin можна show show up for users whole couldn’t deactive the plugin.
  • BUG FIX: Зменшена погана трансляція в membership_expired.html file of French translation.
  • BUG FIX: Зроблені деякі strings на оновлених повідомленнях, що були завантажені для передачі.

2.0.1 — 2019-01-03

  • BUG FIX: Fixed issue where the PMPro dashboard і reports pages можна побачити бланк, якщо certain інші plugins були активні.

2.0 — 2018-12-31

  • SECURITY: Fixing how we escape things в Memberships report SQL queries.
  • BUG FIX: Знижена сума, де код в стрижній браузері був відключений old subscriptions early if users renewed with different gateway.
  • BUG FIX: Вирішили warning on Stripe Webhook service.
  • BUG FIX/ENHANCEMENT: Видалення unused images з core plugin.
  • BUG FIX/ENHANCEMENT: Змішаний unused getTimestamp функція.
  • BUG FIX/ENHANCEMENT: Updated Braintree/PHP Library to 3.36.0
  • BUG FIX/ENHANCEMENT: Prefixing Braintree plan name with pmpro_#
  • BUG FIX/ENHANCEMENT: Докладніше table nameing in queries for Memberships and Sales reports.
  • BUG FIX/ENHANCEMENT: Зміна «blacklist» на «blocklist».
  • BUG FIX/ENHANCEMENT: Відмінність відповідності до дисконтного коду «Apply» button on checkout to look more like a text link.
  • BUG FIX/ENHANCEMENT: Визначення поточного терміну дії часу, не SQL.
  • BUG FIX/ENHANCEMENT: Updated pmpro_next_payment спосіб штриху до скасування, якщо покупець є невід'ємною для того, щоб відключити поточний борг часу в майбутньому, якщо останнє плата не було здійснено.
  • BUG FIX/ENHANCEMENT: Захист користувача ID в MemberOrder, коли користувачі існують, і вони беруть участь в offsite gateway.
  • BUG FIX/ENHANCEMENT: Знижка штриху Webhook and PayPal IPN Handler для того, щоб відключити рівень ID для додаткової електронної пошти.
  • BUG FIX/ENHANCEMENT: Brought back the Stripe Billing limit warnings. Тут є plugin для отримання обмеження обмежень працюючих з стрип https://github.com/strangerstudios/pmpro-stripe-billing-limits/blob/master/pmpro-stripe-billing-limits.php
  • FEATURE: Gutenberg / v5.0 Editor Blocks for Paid Memberships Pro pages, Checkout Button and Membership "shortcode" functionality.
  • FEATURE: Додана новий «Дашборд» сторінка і встановлена ​​настройка структури для «Memberships».
  • FEATURE: Створені нові функціональні можливості checks і включають спільні функції для Beaver Builder, Elementor, і SiteOrigin Page Builder.
  • FEATURE: Доданий REST API routes для post membership access, і user membership level.
  • FEATURE: Додаткові опції включають рівні Confirmation Message в Confirmation Email.
  • FEATURE: Доданий файл за допомогою дискового коду до Memberships and Sales reports.
  • FEATURE: Added filter by discount code до списку admin page.
  • FEATURE: Додано до "Copy" option to discount codes.
  • FEATURE: Натисніть на те, щоб edit або add на discount code до single Order edit.
  • FEATURE: Added ability to export orders by discount code used.
  • FEATURE: Додати новий файл для розблокованих функцій або шпильок.
  • ENHANCEMENT: Moved «Memberships» page up in sidebar below Comments.
  • ENHANCEMENT: Replaced the Visits, Views, Logins report with the "Better Logins Report" Add On functionality.
  • ENHANCEMENT: Знижка повідомлень про те, що ви використовуєте Google Charts library для використання updated chart library (corechart.js).
  • ENHANCEMENT: Reports admin page now loading reports за допомогою add_meta_box WordPress function.
  • ENHANCEMENT: Added ability to filter membership reports for free or paid levels only.
  • ENHANCEMENT: Налаштовувати поточний рівень на checkout з тим, що сторінка необмежена до рівня сторінок.
  • ENHANCEMENT: Відображення запису коду, використовуваного на всіх сторінках і один рядок edit page.
  • ENHANCEMENT: Added ability to filter Orders by Free (Orders equal to $0), Paid (Orders greater than $0)
  • ENHANCEMENT: Новий показ Invoice's Order Status на Membership Account page for orders (Paid, Pending or Refunded).
  • ENHANCEMENT: Additional additional quick search links when no members are found in members list search.
  • ENHANCEMENT: Added check on the Add Ons page to hide Add Ons that is no longer supported or recommended.
  • ENHANCEMENT: Improved Responsive layout of Memberships admin area for smaller devices.
  • ENHANCEMENT: Adding .gitattributes and gitignore. Важливий now for node stuff in particular.

1.9.5.6 — 2018-11-15

  • BUG FIX: Змінений спосіб, де брехня буде намагатися відключити підпис twice, і вона була відключена на березі берега.
  • BUG FIX: Fixed bug в Braintree webhook при використанні певних версій PHP.
  • BUG FIX: Correct Braintree plans flagged as faulty.
  • BUG FIX/ENHANCEMENT: Added Order Code to the Orders Export CSV
  • BUG FIX/ENHANCEMENT: Поверніть інший варяючий RE billing limits with Stripe gateway. (Thanks, Jordan Kohl)
  • ENHANCEMENT: Added the pmpro_include_pricing_fields filter.
  • ENHANCEMENT: Надсилання ідентифікаторів до акцій зв'язку в аккаунті шорткоду з користувачами може скористатися ним з CSS/JS.
  • ENHANCEMENT: Updated French Translation. (Thanks, Pascal)
  • ENHANCEMENT: Retina logo на dashboard pages.
  • ENHANCEMENT: Відображаючи те, що PMPro сторінка на сторінці є в Post List table of WP dashboard.

1.9.5.5 — 2018-10-19

  • BUG FIX: Зменшена дрібна помилка в Braintree webhook, що буде спричинити syncing issues для Braintree users.
  • BUG FIX: Перевірка повідомлень про відключення відповідного запиту на PayPal API, якщо процес обробки IPN-повідомлень для самої підписки.
  • BUG FIX: Вирішили значення, за допомогою якого Stripe API version була встановлена ​​для не-Stripe gateways on payment settings page.
  • BUG FIX: Використовуючи self:: усвідомлюючи static:: в класі Stripe, що тримає клопоту pmpro_stripe_customerid from being updated.
  • BUG FIX: Fixed some fatal errors в PHP 5.2. (We still recommend a minimum PHP 5.6.)
  • BUG FIX/ENHANCEMENT: Повернутися до необхідного hr елемента, коли ви побачите список всіх активних memberships.
  • BUG FIX/ENHANCEMENT: Cleaned up some CSS code around buttons.
  • BUG FIX/ENHANCEMENT: Додано форму для Danish Krone.
  • BUG FIX/ENHANCEMENT: Removed warning RE billing limits with Stripe gateway. Наш стрип implementation has supported billing limits for a while.
  • ENHANCEMENT: Додано Kenyan Shilling as a currency. (Танк, Urandu Bildad Namawa)
  • ENHANCEMENT: Updated description, url, e-mail, та copyright info в plugin header.
  • ENHANCEMENT: Нижче наведено поміту на сторінках сторінки в табличці, якщо сторінка знаходиться в PMPro сторінці.
  • ENHANCEMENT: Improving logo і watermark в раунді для ретинових дисплеїв.

1.9.5.4 — 2018-09-10

  • SECURITY: Деякі значення використовуються в SQL Queries в нашому reporting code були sanitized, але не пізніше escaped via esc_sql(). Всі variables внесені до SQL Queries в reports є тепер загорнуті в esc_sql(). Попередній код був не vulnerable до будь-якого відомого припинення, але це зміна hardens the code against vulnerabilities in case other parts of code change in the future.
  • BUG FIX: Знижений розмір з короткими повідомленнями, коли The My Login 7 is active. (Thanks, Jeff Farthing)
  • BUG FIX: Немає тривалого повідомлення про "негайне відключення тексту" електронної пошти під час відкликання відключається від Stripe.
  • BUG FIX: Fixed issue where TwoCheckout orders були некоректно updating the TOS consent data. (Thanks, Charl P. Botha)
  • BUG FIX: Fixed issue where privacy function weren’t defaulting до $current_user correctly. У практиці, ми були завжди passing a user_id anyway.
  • BUG FIX/ENHANCEMENT: Змінити повідомлення про затвердження для використання wpautop instead of apply_filters('the_content'). Якщо ви були записані на шорти або інші вмісти, які вимагають, що файл, ви використовуєте add_filter('pmpro_level_description', 'the_content'), щоб revert this for your site.
  • BUG FIX/ENHANCEMENT: За допомогою strict parameter of sanitize_user when getting usernames. Це буде певне особливе значення з використанням в usernames at checkout. Це є inline with WP core і інші plugins. (Thanks, David Cervantes Caballero)
  • ENHANCEMENT: Added breakdown of orders at all price point to Sales Report widget
  • ENHANCEMENT: Показує стрижну версію для використання на payment settings page.
  • ENHANCEMENT: Updated Copyright date and GPLv2 link in license.txt.

1.9.5.3 — 2018-06-26

  • BUG FIX: Функція pmpro_ipnhandler_extend_memberships необхідна, використовуючи $user_id, який містить $current_user.

1.9.5.2 — 2018-06-26

  • BUG FIX: Fixed compatibility with Theme My Login version 7. (Thanks, Jeff Farthing)
  • BUG FIX: Fixed missing $current_user bug в pmpro_ipnhandler_level_extend_memberships function. (Thanks, Anne)

1.9.5.1 — 2018-06-08

  • BUG FIX: Знижена допомога з PayPal IPN Handler, де існують користувачі, які вибирають для нового рівня, коли деякі з них мають свої члени і нові підписи заборонені.
  • BUG FIX: Fixed PayPal IPN Handler для налаштування статевих рівнів для 'змінити' (закінчити з 'інактивного') при процесуванні checkouts. Це буде викликати спостереження за повідомленнями.
  • BUG FIX/ENHANCEMENT: Новий контроль за запискою_відповіді_згортається перехід типу в PayPal IPN handler. Коли платіж скипається і цей повідомлення є дійсним, ми будемо зараз поїхати від зареєстрованого електронної пошти електронною поштою до customer and admin. (Thanks, mjulian87 on GitHub)
  • ENHANCEMENT: Removed validation info від IPN log.
  • ENHANCEMENT: Updated German (de_DE) language files.

1.9.5 — 2018-05-24

  • BUG FIX: Added 'error' до списку відповідних статей.
  • BUG FIX: Fixed issue where PayPal recorreng_payment messages with status "Pending" були поставлені як "Failed" з нашим IPN handler. (Thanks, Matt Julian)
  • BUG FIX: Відповідна мова від сторінок сторінок, необхідної для того, щоб перевірити список сторінок шорткоду.
  • BUG FIX/ENHANCEMENT: За допомогою pmpro_getOrderStatuses() функція в adminpages/orders.php встановлюється на redundant code there.
  • BUG FIX/ENHANCEMENT: Відображаючи $order як другий параметр до pmpro_after_checkout, коли здійснено з PayPal IPN handler. (The $order was being passed already for "regular" checkouts.)
  • ENHANCEMENT: Ви можете нікому вийти з Membership Level column added to users list in dashboard. (Thanks, Matt Julian)
  • FEATURE: Added support for privacy features added in WP 4.9.6. Details below.
  • FEATURE: Added suggest privacy page text.
  • FEATURE: Доданий PMPro-відповідний user meta fields, membership history, і order history до personal data export. Ви можете filtr, який user meta fields включаються в експортовані за допомогою нового pmpro_get_personal_user_meta_fields filter.
  • FEATURE: Deleting PMPro-related personal data fields when personal data is erased. Середня кількість повідомлень має число user meta fields (filterable through new pmpro_get_personal_user_meta_fields_to_erase filter). A user's membership history і order history є retained unless the user is deleted.
  • FEATURE: Новий захист log when the TOS page is agreed to at checkout. ID і date modified of TOS post is saved along with timestamp of when the TOS був agreed to. Ця інформація міститься на одній сторінці сторінки в admin, orders CSV export, і на edit user profile page in admin. Зверніть увагу, що цей характер не може бути backport any data для існуючих користувачів або як користувачі, щоб re-agree до TOS і якщо TOS має бути з часу.

1.9.4.4 — 2018-03-14

  • BUG FIX: Updated filters до розширених рівнів рівнів для використання нових pmpro_getSpecificMembershipLevelForUser() функція для будь-яких bugs при MMPU is enabled.
  • BUG FIX: Fixed cases where certain email templates були результати в body of email being duplicated.
  • BUG FIX: Зменшений conflict with pmpro-email-templates, коли emails були disabled (the pmpro_email filter returns false). (Thanks, Mathieu Hays)
  • BUG FIX: Новий оновлення статуй на поставленій підписці orders BEFORE cancelling на gateway до будь-якого випадку, коли веб-відео, щоб брати браузер після canceling the subscription triggers після cancellation attempts.
  • BUG FIX: Недовго показує "Stripe Publishable Key appears incorrect" error message if the key field is blank.
  • ENHANCEMENT: Added pmpro_getSpecificMembershipLevelForUser($user_id, $level_id) функція для випадків, коли MMPU є ввімкненим і ви хочете, щоб вибрати конкретний membership level a user might have.
  • ENHANCEMENT: Змінені літери на reCAPTCHA налаштовують на їх поточну terminology: Site Key and Secret Key.

1.9.4.3 — 2018-01-04

  • BUG FIX: Вирішили значення, де PMPro буде прийняти до cancel gateway subscriptions більше, ніж у деяких випадках.

1.9.4.2 — 2017-12-07

  • BUG FIX: Avoid double-encoding API version в PayPal Standard gateway
  • BUG FIX: Update billing page now checks the gateway of the user's last order instead of default gateway settings in case multiple gateways are in use or default gateway has changed.
  • BUG FIX: Fixed bug where discount codes були небули applied properly if the pmpro_default_level custom field була налаштована і використана на сторінці.
  • BUG FIX: Схема електронної пошти електронної пошти були для того, щоб скористатися членами з PayPal Express orders.
  • BUG FIX: Now correctly unslashing інструкції для check gateway.
  • BUG FIX: Змішана робота з створеними pages з page settings page.
  • BUG FIX/ENHANCEMENT: Відображається кнопка з підписом і процесування повідомлень повідомлення для більш детальної інформації та RTL на сторінці.
  • BUG FIX/ENHANCEMENT: Доданий в об'єднанні повний і повний розрахунковий backak back to confirmation and invoice single views.
  • BUG FIX/ENHANCEMENT: Avoid double-encoding PayPal API version number
  • ENHANCEMENT: Відображається повідомлення кнопки і процесування повідомлення повідомлення для більшої кількості та RTL на checkout page.
  • ENHANCEMENT: Перемикається поряд з Publishable and Secret Key fields і added validation check.
  • ENHANCEMENT: Кондиційно update members list headings for expired, cancelled, або old members.

1.9.4.1 — 2017-10-31

  • BUG FIX: Fixed serious bug where payment fields weren’t showing up for the Braintree gateway.
  • BUG FIX: Fixed issue where Braintree webhook notifications були failing. We now allow the Braintree library to sanitize incoming data since our sanitizing efforts були breaking the validation.
  • BUG FIX/ENHANCEMENT: The webhook URL ведеться для Braintree now goes через admin-ajax.php з'явиться на прямий link для php file within our plugin.
  • BUG FIX/ENHANCEMENT: Updates to the Recaptcha library. (Thanks, Corin Simpson-Bryars)
  • ENHANCEMENT: Made the cancelation failed error email easier to read.

1.9.4 — 2017-10-26

  • BUG FIX: Fixed issue where PayPal був не працюючий для $1000.
  • BUG FIX: Не-досвідчені корективи сьогодні поставлені правильно з Stripe.
  • BUG FIX: Знижена сума, коли updating Stripe subscription з edit user page можу cancel cancel subscription once webhook fired.
  • BUG FIX: Fixed issue where «admin_cancelled» memberships weren't being calculated correctly in membership reports.
  • BUG FIX: Змішано, коли користувачі можуть не повертатися і скасувати зміну рівнів membership.
  • BUG FIX: pmpro_getMembershipLevelsForUser() можуть дати певні повторюваних рівнів в array, якщо користувач має багато активних вхідних в pmpro_memberships_users table.
  • BUG FIX: Updated includes/metaboxes.php call pmpro_getAllLevels() продовжує йти на $membership_levels global which is problematic.
  • BUG FIX: Зроблено кілька strings, які були завантажені для передачі або були використані в попередньому текстовому домені.
  • BUG FIX: Fixed redirect error, що свідчить, коли рівні page не були налаштовані.
  • BUG FIX: Updated getfile.php для підтримки файлу names з urlencoded characters (e.g. spaces) in them. (Thanks, florent від PMPro blog)
  • BUG FIX: Fixed notice при використанні getfile.php script due to using add_filter instead of apply_filters в mimetype class.
  • BUG FIX: Зображення всіх тимчасових переглядів column for logins report.
  • BUG FIX: Fixed fatal error на logins report, member shortcode та інші питання, коли використовує PHP7.1+.
  • BUG FIX: Fixed issue with saving arrays using pmpro_setOption()
    up the lines of text.
  • BUG FIX: Зображення типу в string «Якщо ви думаєте, що це? Try again.»
  • BUG FIX: Знижено кілька strings, які використовуються в короткий текст домашнього або необмеженого відповідності для передачі.
  • BUG FIX/ENHANCEMENT: Now bundling Google's jsapi.js файл для використання в reports.
  • BUG FIX/ENHANCEMENT: Fixed issue where some emails (e.g.
  • BUG FIX/ENHANCEMENT: Докладніше контролювати тему My Login compatibility when handling login redirects.
  • BUG FIX/ENHANCEMENT: Better error handling для Braintree.
  • BUG FIX/ENHANCEMENT: Membership stats widget now shows перші 3 рівнів засновані на рівні ордер.
  • BUG FIX/ENHANCEMENT: Added the pmpro_member_shortcode_access filter
  • ENHANCEMENT: Updated Stripe PHP library to version 5.2.2 та оновлено Stripe для використання останньої версії їх API, 2017-08-15.
  • ENHANCEMENT: Змінити frontend pages (e.g. checkout.php) для використання div-based layout instead of tables. Важливі відомості про це, якщо ви використовуєте особливу сторінку templates або відомості про UI є після upgrading:
  • ENHANCEMENT: Added pagination до облікового запису сторінок в admin. Також sorting codes in descending order by ID. Використовуйте pmpro_discount_codes_per_page filter для зміни page limit для 15.
  • ENHANCEMENT: Updated plugin frontend pages checkout, billing, confirmation, and single invoice to remove most table based layouts.
  • ENHANCEMENT: Докладніше про помилку message if trying to checkout using an existing user's email address.
  • ENHANCEMENT: Added pmpro_report_levels filtr до літніх користувачів зміни рівнів і відповіді рівнів для memberships.php report.
  • ENHANCEMENT: Updated video and copy for readme.txt.
  • ENHANCEMENT: Added user display name to Memberlist search query
  • ENHANCEMENT: Added Russian Ruble as a currency.
  • ENHANCEMENT: Відредаговано термін "CVV" до "Security Code (CVC)", коли показує на frontend.
  • ENHANCEMENT: Added .doc and .docx до класу mimetype.
  • ENHANCEMENT: Added Portuguese language files. (Thanks, Secundino Correia)
  • ENHANCEMENT: Updated plugin admin pages with better links to documentation and support.

1.9.3 — 2017-07-06

  • ЗАКЛЮЧЕНИЕ: Звільнене sanitionation of inputs і пришвидшених нуд в several places до захисту проти XSS attacks.
  • BUG FIX: Відображаючи правильну електронну пошту, коли працює над оновленням PMPro Plus add on with Core license installed.
  • BUG FIX: Fixed issue where subscription and payment transaction Ідентифікатори були невикористані коректно, коли скопіювали на ордер в раунді. (Thanks, Pippin Williamson)
  • BUG FIX: Fixed fatal errors що трапилося в certain PHP versions.
  • BUG FIX: Fixed issue where ProfileStartDate був визначений неправильно в тесті, виконати, і Cybersource gateways.(Thanks, David Parker)
  • ENHANCEMENT: Added a pmpro_sanitize_with_safelist() функція, яка використовується для санітарних вводів, що має обмежений номер з exact options.
  • ENHANCEMENT: Updated the pmpro_setOption() and pmpro_getParam() функцій до нового строку $sanitize_function, які вказують на 'sanitize_text_field'.

1.9.2.2 — 2017-06-13

  • BUG FIX: Fixed warnings on the Network Dashboard's sites page.
  • BUG FIX: Перевірка update scripts що вимагає Stripe library, якщо система не підтримує мінімальні вимоги до Stripe API. Це avoids warnings and errors при upgrade.

1.9.2.1 — 2017-06-05

  • BUG FIX: Змішані з використанням функцій на одному місці.
  • BUG FIX: Starting PHP session earlier to fix issues with PayPal/PayPal Express Checkouts.

1.9.2 — 2017-06-03

  • BUG FIX: Fixed issue where Braintree checkouts були failing with CVV error коли існуючі users checked out.
  • BUG FIX: Вирішили loading the Stripe library в PHP 5.6.
  • BUG FIX: Member List CSV export був ignoring search parameter.
  • BUG FIX: Discount codes weren’t beem remembered під час «перегляду» step of a PayPal Express checkout. (Thanks, Rafe Colton)
  • ENHANCEMENT/FIX: Search Filter може бути трейдером неправильно для REST API request by slug.
  • ENHANCEMENT/FIX: Didn't always identify MasterCard картки коректно до set CardType with some gateways.
  • ENHANCEMENT/FIX: Один custom code or add ons (e.g. Prorating and Auto-renewal Checkbox add ons) будуть деякі break PayPal Website Payments Pro and PayPal Express subscriptions за допомогою програми "Start Date" протягом усього року. We now limit the Profile Start Date to 1 year out and try to squeeze up to 1 additional year into trial if it's no already being used. Цей виріб впливу PayPal Standard як добре, але fix є різним і не включений в цей матеріал.
  • ENHANCEMENT: Tested up to WordPress 4.8.
  • ENHANCEMENT: Made countries translatable.
  • ENHANCEMENT: Improved performance via PHP $_SESSION management improvements. We now only open the session before we set session vars and close session when we are finished with it.
  • ENHANCEMENT: Added code to stop network activation of Paid Memberships Pro. (Thanks, Paul Barthmaier)

1.9.1 — 2017-05-11

  • BUG FIX: Знімок коду checking if the Stripe library is already loaded to compatability issues with other plugins bundling the Stripe API library.
  • BUG FIX: Зміна коду, який зараз використовує preg_replace, коли вітається з рівнем рівнів ідентифікації.
  • FIX/ENHANCEMENT: Повернутися test/doc code з Stripe and Braintree libraries.
  • ENHANCEMENT: Новий pausing license nag для першого віку використання і вилучений «неправильний» Error, якщо не key is being used.

1.9 — 2017-04-26

  • BUG: Знижена допомога з відключенням 2Checkout recurring subscriptions. Тепер використовуючи payment_transaction_id для пошуку/звільнення sale's recorreng subscription since no subscription_transaction_id is being saved.
  • BUG: Знижена оцінка, коли old membership levels були не внесені електронною поштою. (Thanks, Mike від Migrating Eye)
  • BUG: Fixed issue where «custom trial» не були застосовані для discount codes.
  • BUG: Fixed issue where checkouts були продовжені процеси, доки не будуть помилки з discount code.
  • BUG: Знижений вимикач, в якому налагодження added via the pmpro_custom_advanced_settings були не дотримуються до DB unless they були prefixed with custom_.
  • BUG: Вирішують інші форми навчання з налаштуваннями, що належать до pmpro_custom_advanced_settings.
  • BUG: Змішано, якщо в ньомуInvoiceEmail метод електронної пошти був expecting $order->discount_code для string, але він був певним, як discount code object. (Thanks, Bill Stoltz)
  • FEATURE: Added pmpro_member shortcode. Натисніть на Paid Memberships Pro website for documentation.
  • ENHANCEMENT: Added pmpro_account_membership_expiration_text filter до filtrу expiration text that shows ona user’s membership account page.
  • ENHANCEMENT: Updated our Stripe and Braintree libraries для використання їх останніх версій. Це update allows our gateway integrations for support PHP7 and also removes support for PHP 5.2 and 5.3.
  • ENHANCEMENT: The Braintree level compatibility check now also looks for properly named plan.
  • ENHANCEMENT: Додаткові помилки handling коли trying до update plugins що update до PMPro license server.
  • ENHANCEMENT: Improved Italian translation. (Thanks, Francesco Pezzotti)
  • ENHANCEMENT: Improved German tranlsation. (Thanks, Simon)
  • ENHANCEMENT: Added a Sweedish tranlsation. (Thanks, Mathias Persson)
  • ENHANCEMENT: Додано до «Chinese/Cantonese (Hong Kong SAR China)» tranlsation. (Thanks, Kai Chan)

1.8.13.6

  • BUG: Fixed bug where credit card expiration emails може бути для користувачів з PayPal Express orders.
  • BUG: Fixed bug when updating billing with Stripe.
  • BUG: Знижений параметр, в якому архів / пошуковий фільтр був не встановлений для зареєстрованих користувачів.
  • ENHANCEMENT: Updated Finnish translations. (Thanks, JP Jakonen)
  • ENHANCEMENT: Надісланий filtr для зміни відповідного опису в Stripe. (Thanks, Rafe Colton)

1.8.13.5

  • BUG: Fixed notifications.php для того, щоб зробити це дійсно тільки checks once per day. Також updated the URL checked to notifications.paidmembershipspro.com, які runs on its own server.

1.8.13.4

  • BUG/ENHANCEMENT: Змінити pmpro_button shortcode to pmpro_checkout_button. (The old pmpro_button will also still work. checkout_button works if you have Register Helper installed.)

1.8.13.3

  • BUG: Fixed bug when using a secondary gateway (e.g. PayPal Express) з Stripe є вашою першою gateway.

1.8.13.2

  • BUG: Fixed bug with updating credit cards через Braintree.
  • BUG: Fixed bug with updating credit cards через Stripe.
  • BUG: Fixed SQL warnings when generating the pmpro_membership_levelmeta table. (Thanks, itibet on GitHub)
  • BUG/ENHANCEMENT: Можуть деякі update billing and checkout related code of preheaders and page templates in the Braintree and Stripe classes.
  • ENHANCEMENT: Added pmpro_billing_order filter що функції подібні до pmpro_checkout_order.
  • ENHANCEMENT: Added pmpro_billing_before_submit_button hook що функції подібні до pmpro_checkout_before_submit_button hook.
  • ENHANCEMENT: Clicking на report widget не longer так іти до details page. Ви маєте click the details button. Це дозволяє використовувати додаткову функціональність до widgets.
  • ENHANCEMENT: Updated reports widgets з "докладно" button тільки shows і page function is defined for that report. Ви можете повідомити новини безвідповідальних сторінок.
  • ENHANCEMENT: Ви можете зараз click on heading в Membership Stats report widget для того, щоб дати data для 3 of your levels. Перші 3 рівнів до рівня ордерування є shown.

1.8.13.1

  • BUG: Знижена сума, коли кінець часу були налаштовані/завантажені безвідповідно з edit user/profile page in dashboard.
  • BUG: Fixed warnings в Braintree PHP library. (Thanks, Travis Shivers)
  • BUG: Fixed issue where the filtered $mypost об'єкт не був використаний в вмісті filtrу if the post typ був "page". (Thanks, James)
  • BUG: Removed the extra class="input" atribut on CVV field when the Stripe gateway is used. (Thanks, Rafe Colton)
  • BUG/ENHANCEMENT: Зміна номера X placeholders для masked credit cards до 12 (+ the last 4 stored) instead of 13. (Thanks, Rafe Colton)

1.8.13

  • FEATURE: The Stripe Webhook має бути updated to process subscriptions cancelled from Stripe. PMPro буде негайно отримувати memberships для цих користувачів за допомогою повідомлення електронної пошти до admin.
  • BUG: Вирішили різні гаки в PayPal IPN handler.
  • BUG: Fixed search on discount codes page in dashboard. (Thanks, Debjit Saha)
  • BUG: Fixed bug in Cancelations report where all-time cancellations були always 0.
  • BUG: Зміна повідомлень про виплати на checkout notice. (Thanks, Coen Jacobs)
  • BUG: Timezone magic на edit user page в таблиці для виведення expiration date you select is the one set.
  • BUG: Swapped out deprecated uses of eregi_replace and split.
  • BUG/ENHANCEMENT: Використання функції add_query_arg в pmpro_url(). (Thanks, Debjit Saha)
  • ENHANCEMENT: Updates stylesheet for WordPress 4.7 and new Twenty Seventeen theme support.
  • ENHANCEMENT: Низька тривалість варіювання номерів рівнів з числовими номерами > 1, коли використовуючи Payflow Pro gateway since Payflow now supports cycle numbers (frequencies) > 1.
  • ENHANCEMENT: Updated da_DK translation. (Thanks, bopdoq on GitHub)
  • ENHANCEMENT: Added pmpro_include_payment_option_for_paypal filtr, який може бути до false для використання PayPal WPP без PayPal Express option.
  • ENHANCEMENT: Better dependency checking for Stripe and Braintree gateways.
  • ENHANCEMENT: Updated IPN handler and Stripe Webhook handler use pmpro_cancelMembershipLevel містить з pmpro_changeMembershipLevele. Це підтримує підтримку для MMPU addon.

1.8.12.1

  • BUG: Fixed bug when using the testing gateway.
  • BUG: Використовуйте, коли is_user_logged в не є доступним для pmpro_search_filter() функцій. (Thanks, d_enajetic)
  • ENHANCEMENT: Updated Italian translation. (Thanks again, Angelo)
  • ENHANCEMENT: You can now define(‘PMPRO_USE_SESSIONS’, false); у вашому wp-config.php до сили PMPro на skip call to session_start. Зверніть увагу, що PayPal Express і деякі addons require sessions до функції.

1.8.12

  • BUG: Fixed issue where «expiring soon» emails були sometimes sent more than needed.
  • BUG: Fixed issue where PayPal Standard IPN requests були спричинені, якщо tax amount був set в PayPal.
  • BUG: Вирішили зв'язок з штрихом підпису «updates», що були налаштовані на Fire на «Next Payment», e.g. if you used Stripe with levels with non-zero trial amount. Коли update processed and created a new subscription, the old subscription not bee deleted and the new subscription ID was not being saved as new order for future tracking purposes. Якщо ви скористаєтеся цією особливістю, скористайтеся check in Stripe, щоб зробити ваші користувачі не мають жодних subscriptions.
  • BUG: Змінені налаштування в PayPal/PayPal Express API Calls з AUTOBILLAMT to AUTOBILLOUTAMT. Цей набір є набір до AddToNextBilling, meaning that failed payment amounts added to the next billing cycle's amount if left unpaid. У більшості випадків, назавжди оригінал загрожує шляхом переміщення через або user's subscription is cancelled. Але тільки в разі, це робиться тому, що позаналежні баланси є плата. (Thanks, jubstuff on GitHub)
  • BUG: Змішані варіації в SetGateway метод класу MemberOrder для випадків, коли порт браузера не збирається або клас файлу не є невідомим.
  • BUG/ENHANCEMENT: Переміщуйте pmpro_before_change_membership_level шпилька до вечора битви earlier до того, щоб зробити її налаштування, щоб визначити, як рівень статуї/кінець date/etc перед тим, як gets updated. (Thanks, MrVibe on GitHub)
  • ENHANCEMENT: Replaced Force SSL option with explanation if the entire site is over HTTPS. Ви маєте на увазі ignoring option в цих випадках.

1.8.11.2

  • BUG: Змішаний bug введено в 1.8.11, що kept PMPro від трейдерів coupon code uses. Any checkout with a discount code while running 1.8.11 won't have properly tracked the discount code use. Ви можете скористатися своїми «використаннями» номерів для ваших кодів, а hand check any reporting/etc that relied on discount codes. Users of the Sponsored Members addon буде бути завданий впливу. Розрахункові коди будуть потрібні для того, щоб зробити manually для будь-якого спонсора, який checked out.
  • BUG: Fix to the expiration warnings code. Make sure it finds all members who are expiring soon while also keeping track of when emails are sent so users don't get too many emails.
  • BUG: Fixed issue where pmpro_before_change_membership_level був running after levels had been changed.
  • BUG: Fixed some warnings.
  • ENHANCEMENT: Updated Italian translations. (Thanks, Angelo)

1.8.11.1

  • BUG: Знижений елемент встановлений в 1.8.11, де pmpro_default_level custom field був ignored at checkout.
  • BUG: Вирішені покупки в DB calls зроблені для спроможності checks for various gateways.
  • BUG: Now sending a FREQUENCY параметр для PayPal Payflow orders.

1.8.11

  • BUG: Fixed URL використовуваний при checking для addon updates.
  • BUG: Нижче відображається jquery.creditCardValidator.js файл в Billing preheader.
  • BUG: Знижені значення, де PayPal IPN updates буде деякими log $0 дотримуватися поточного рахунку.
  • BUG: Зменшені варіації в PayPal IPN handler.
  • BUG/ENHANCEMENT: Added pmpro_checkout_level filter і тепер використовуючи цей filtr для застосування content_filters до рівня запису на checkout. Це дозволить вам керувати за вмістом вмісту фільтрів (e.g. processing shortcodes) за допомогою remove_filter('pmpro_checkout_level', 'pmpro_pmpro_checkout_level'); in a custom plugin.
  • BUG/ENHANCEMENT: Використовуючи pmpro_confirmation_message filter на конфіденційній сторінці, яка є вказівкою або не. Тепер також призначають the_content filters до confirmation message. Ви можете disable this by using remove_filter('pmpro_confirmation_message', 'pmpro_pmpro_confirmation_message'); in a custom plugin.
  • ENHANCEMENT: New tracking IPN event ids in order notes for recurring orders.
  • ENHANCEMENT: Added pmpro_subscription_ipn_event_processed hook to IPN handler.
  • ENHANCEMENT: Added pmpro_set_message filter для зміни PMPro error messages. Passes message and type.
  • ENHANCEMENT: Нові списки категорій в ієрархічній формі в розділі Налаштування розділів на рівні пам'ятників.
  • ENHANCEMENT: Added pmpro_areLevelsFree() функція для перевірки, якщо всі рівні в рівнях рівнів немає.
  • ENHANCEMENT: Added pmpro_getLevelsCost() — with an s — функція get the combined cost of multiple levels in an array.
  • ENHANCEMENT: Added pmpro_getLevelsExpiration() — with an s — функція, щоб поєднувати текст з'єднання для декількох рівнів в array.
  • ENHANCEMENT: Створити pmpro_getLevelAtCheckout функція, що modularizes деякі логіки створення pmpro_level global при checkout.
  • ENHANCEMENT: Added pmpro_members_list_user filter використаний на admin members list and members list CSV export.
  • ENHANCEMENT: Added 4th parameter $cancel_level to pmpro_changeMembershipLevel(). Якщо набір, що рівень буде впевнено бути відокремленим місцево і в gateway. Цей параметр є також включений до pmpro_before_change_membership_level і pmpro_after_change_membership_level hook.
  • ENHANCEMENT: Added a new function pmpro_cancelMembershipLevel($level_id, $user_id, $old_level_status), що діє як завантажити, щоб пройти $cancel_level param до pmpro_changeMembershipLevel().
  • ENHANCEMENT: Updated the cancel page on the frontend to support the Multiple Memberships per User addon. Всі memberships є shown. Ви можете відключити окремі memberships окремо. Language of confirm button mentions memberships vs account.
  • ENHANCEMENT: Added pmpro_getMemberOrdersByCheckoutID($checkout_id) функція для підтримки Multi-Memberships per User and others using the checkout_id.
  • ENHANCEMENT: Added refund($order, $transaction_id) метод до PMPro_stripe class. Це буде використано з Multiple Memberships per User addon and eventually used in other areas by the core pluginn.

Операції з базою даних часто стають вузьким місцем при реалізації Інтернет проекту. Питання оптимізації у разі стосуються як адміністратора бази даних. Програмістам потрібно правильно виконувати структурування таблиць, писати оптимальні запити та продуктивніший код. У цій статті наводиться невеликий перелік технік оптимізації роботи з MySQL для програмістів.

1. Оптимізуйте ваші запити для кешу запитів.

Більшість серверів MySQL використовують кешування запитів. Це один із ефективних методів покращення продуктивності, який виконується механізмом бази даних у фоновому режимі. Якщо запит виконується багато разів, для отримання результату починає використовуватися кеш і операція виконується значно швидше.

Проблема полягає в тому, що це так просто і в той же час приховано від розробника, більшість програмістів ігнорує таку прекрасну можливість поліпшити продуктивність проекту. Деякі дії дійсно можуть створювати перешкоди для використання кешу запитів при виконанні.

// Кеш запиту НЕ ПРАЦЮЄ $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); // Кеш запиту ПРАЦЮЄ! $today = date("Y-m-d"); $r = mysql_query("SELECT username FROM user WHERE signup_date >= "$today"");

Причина того, що кеш запитів не працює у першому випадку, полягає у використанні функції CURDATE(). Такий підхід використовується для всіх недетермінованих функцій, наприклад NOW(), RAND() і т.д. Оскільки результат функції, що повертається, може змінитися, то MySQL вирішує не розміщувати даний запит в кеші. Все, що потрібно, щоб виправити ситуацію - це додати додатковий рядок коду PHP перед запитом.

2. Використовуйте EXPLAIN для ваших запитів SELECT

Використання ключового слова EXPLAIN може допомогти скласти картину того, що робить MySQL для виконання вашого запиту. Така картина дозволяє легко виявити вузькі місця та інші проблеми у запитах чи структурі таблиць.

Результат запиту EXPLAIN показує, які індекси використовуються як таблиця сканується і сортується, і так далі.

Візьмемо запит SELECT (переважно, щоб він був складним, з JOIN), додамо перед ним ключове слово EXPLAIN. Ви можете використовувати PhpMyAdmin для цього. Такий запит виведе результат у чудову таблицю. Допустимо, ми забули додати індекс для стовпця, який використовується для JOIN:

Після додавання індексу до поля group_id:

Тепер замість сканування 7883 рядків скануватимуться лише 9 і 16 рядків з двох таблиць. Хорошим методом оцінки продуктивності є множення всіх чисел у стовпці "rows". Результат приблизно пропорційний обсягу даних, що обробляється.

3. Використовуйте LIMIT 1, якщо потрібно отримати унікальний рядок

Іноді під час використання запиту ви вже знаєте, що шукаєте лише один рядок. Ви можете отримати унікальний запис або просто перевірити, чи існує будь-яка кількість записів, які задовольняють пропозиції WHERE.

У такому разі додавання LIMIT 1 до вашого запиту може покращити продуктивність. За такої умови механізм бази даних зупиняє сканування записів, як тільки знайде одну і не буде проходити по всій таблиці або індексу.

// Чи є якийсь користувач з Алабами? // Так не потрібно робити: $ r = mysql_query ("SELECT * FROM user WHERE state = "Alabama""); if (mysql_num_rows($r) > 0) ( // ... ) // Ось так буде значно краще: $r = mysql_query("SELECT 1 FROM user WHERE state = "Alabama" LIMIT 1"); if (mysql_num_rows($r) > 0) ( // ... )

4. Індексуйте поля пошуку

Індексуйте не лише основні та унікальні ключі. Якщо якісь стовпці у вашій таблиці використовуються для пошукових запитів, їх потрібно індексувати.

Як ви можете бачити, це правило застосовується і до пошуку рядка, наприклад, “last_name LIKE 'a%'”. Коли для пошуку використовується початок рядка, MySQL може використовувати індекс стовпця, яким проводиться пошук.

Вам також слід розібратися, для яких видів пошуку не можна використовувати стандартне індексування. Наприклад, при пошуку слова ("WHERE post_content LIKE '%apple%'") переваги індексування будуть недоступні. У таких випадках краще використовувати повнотекстовий пошук mysql або побудувати власні рішення на основі індексування.

5. Індексування та використання однакових типів для стовпців, що зв'язуються

Якщо ваш додаток містить багато запитів із директивою JOIN, вам потрібно індексувати стовпці, які зв'язуються в обох таблицях. Це впливає на внутрішню оптимізацію операцій зв'язування MySQL.

Також стовпці, що зв'язуються, повинні мати однаковий тип. Наприклад, якщо ви зв'язуєте стовпець DECIMAL із стовпцем INT з іншої таблиці, MySQL не зможе використовувати індекс принаймні для однієї з двох таблиць. Навіть кодування символів має бути однаковим для однакових стовпців рядкового типу.

// Пошук компанії з певного штату $r = mysql_query("SELECT company_name FROM users LEFT JOIN companies ON (users.state = companies.state) WHERE users.id = $user_id"); // обидва стовпці для назви штату повинні бути індексовані // і обидва повинні мати однаковий тип та кодування символів // або MySQL проведе повне сканування таблиці

6. Не використовуйте ORDER BY RAND()

Це один з тих трюків, які круто виглядають, і багато програмістів-початківців потрапляють у його пастку. Вони навіть уявити не можуть, яку жахливу проблему самі собі створюють, почавши використовувати цей вислів у своїх запитах.

Якщо вам дійсно потрібно випадково розташовувати рядки в результаті вашого запиту, то існує безліч кращих способів вирішити таке завдання. Звичайно, це буде реалізовано додатковим кодом, але ви будете врятовані від проблеми, яка зростає за експонентним законом разом із зростанням обсягу даних. Справа в тому, що MySQL виконує операцію RAND() (яка займає час процесора) для кожного окремого рядка в таблиці перед тим, як відсортувати її та видати вам лише один рядок.

// Так робити НЕ ПОТРІБНО: $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1"); // Ось так краще працювати: $r = mysql_query("SELECT count(*) FROM user"); $d = mysql_fetch_row($r); $ rand = mt_rand (0, $ d - 1); $r = mysql_query("SELECT username FROM user LIMIT $rand, 1");

Так ви отримуєте випадкове число, яке менше, ніж кількість рядків в результаті запиту, і використовуєте його як зміщення у пропозиції LIMIT.

7. Намагайтеся не використовувати SELECT *

Чим більше даних буде прочитано з таблиці, тим повільніше виконується запит. Такі операції займають час для виконання дискових операцій. А якщо сервер бази даних відокремлений від веб-сервера, затримки будуть викликані ще й передачею даних по мережі між серверами.

Хорошою звичкою є вказівка ​​стовпця під час виконання SELECT.

// Погано: $ r = mysql_query ( "SELECT * FROM user WHERE user_id = 1"); $d = mysql_fetch_assoc($r); echo "Welcome ($d["username"])"; // Так краще: $ r = mysql_query ( "SELECT username FROM user WHERE user_id = 1"); $d = mysql_fetch_assoc($r); echo "Welcome ($d["username"])"; // Різниця стає суттєвою на великих обсягах даних

8. Намагайтеся використовувати поле id скрізь

Хорошою практикою є використання у кожній таблиці поля id, котрого встановлено властивості PRIMARY KEY, AUTO_INCREMENT, і має тип із сімейства INT. Переважно - UNSIGNED, тому що в цьому випадку значення не може бути негативним.

Навіть якщо у таблиці є поле з унікальним ім'ям користувача, не робіть його основним ключем. Поля з типом VARCHAR повільно працюють як основні ключі. Також структура вашої бази даних буде краще, якщо в ній використовувати посилання на записи на основі id.

Крім того, механізм MySQL використовує основні ключі для своїх внутрішніх завдань, і використання поля id створює оптимальні умови для їх вирішення.

Одним можливим винятком з цього правила є "асоціативні таблиці", які використовуються для відносин багато-багатьом між двома іншими таблицями. Наприклад, таблиця "posts_tags" містить 2 стовпці: post_id, tag_id. Вони використовуються для опису відносин між двома таблицями "post" та "tags". Описана таблиця може мати основний ключ, який містить обидва поля id.

9. Використовуйте ENUM замість VARCHAR

// Створюємо підготовлений вираз if ($stmt = $mysqli->prepare("SELECT username FROM user WHERE state=?")) ( // Прив'язуємо параметри $stmt->bind_param("s", $state); // Виконуємо $stmt->execute(); // Прив'язуємо змінні результату $stmt->bind_result($username); // Отримуємо значення $stmt->fetch(); printf("%s is from %s\n", $username , $state);$stmt->close();

13. Небуферовані запити

Зазвичай, коли ви виконуєте запит із скрипта, то робота скрипта переривається доти, доки запит не буде виконано. Такий порядок дій можна змінити за допомогою небуферованих запитів.

Відмінне пояснення функції mysql_unbuffered_query() із документації PHP:

“mysql_unbuffered_query() відправляє SQL запит на сервер MySQL без автоматичного отримання та буферування рядків результату, як це робить функція mysql_query(). Таким чином, зберігається певний обсяг пам'яті запитами SQL, які видають великий набір результату, і можна починати працювати з набором результату відразу після отримання першого рядка, не чекаючи поки запит SQL буде повністю виконаний.”

Проте є кілька обмежень. Ви повинні прочитати всі рядки або викликати mysql_free_result() перед тим, як виконати наступний запит. Також не можна використовувати mysql_num_rows() або mysql_data_seek() для набору результату.

14. Зберігайте IP-адресу як UNSIGNED INT

Багато програмістів створюють поле VARCHAR(15) для зберігання IP адреси, навіть не замислюючись про те, що зберігатимуть у цьому полі ціле значення. Якщо використовувати INT, то розмір поля скоротиться до 4 байт, і воно матиме фіксовану довжину.

Потрібно використовувати тип UNSIGNED INT, тому що IP адреса задіює всі 32 біти беззнакового цілого.

$r = "UPDATE users SET ip = INET_ATON("($_SERVER["REMOTE_ADDR"])") WHERE user_id = $user_id";

15. Таблиці з фіксованою довжиною запису (Static) працюють швидше

Коли кожен окремий стовпець у таблиці має фіксовану довжину, то вся таблиця загалом сприймається як “static” чи “з фіксованою довжиною записи” . Приклади типів стовпців, які мають фіксованої довжини: VARCHAR, TEXT, BLOB. Якщо ви включите хоча б один стовпець з таким типом, таблиця перестає розглядатися як "static" і по-іншому оброблятиметься механізмом MySQL.

Таблиці "static" швидше обробляються механізмом MySQL під час пошуку записів. Коли потрібно прочитати певну запис у таблиці, її становище швидко обчислюється. Якщо розмір рядка не фіксований, то визначення положення записи потрібен час на пошук і зіставлення з індексом основного ключа.

Такі таблиці також простіше кешувати та простіше відновлювати при збоях. Але вони можуть посідати більше місця. Наприклад, якщо конвертувати поле VARCHAR(20) у поле CHAR(20), то завжди будуть зайняті 20 байт незалежно від того, використовуються вони чи ні.

Використання техніки "Вертикальний поділ" дає можливість відокремити стовпці із змінною довжиною в окрему таблицю.

16. Вертикальний поділ

Вертикальний поділ - це поділу структури таблиці по вертикалі з метою оптимізації.

Приклад 1: У вас є таблиця, яка містить домашні адреси, що рідко використовуються в додатку. Ви можете розділити таблицю та зберігати адреси в окремій таблиці. Таким чином, основна таблиця користувачів скоротиться у розмірі. Як відомо, менша таблиця обробляється швидше.

Приклад 2: У таблиці є поле “last_login”. Воно оновлюється щоразу, коли користувач реєструється на сайті. Але кожне оновлення таблиці викликає кешування запиту, що може створити перевантаження системи. Ви можете виділити це поле в іншу таблицю, щоб зробити оновлення таблиці користувачів не такими частими.

Але треба бути впевненими в тому, що не потрібно постійного зв'язування двох таблиць, які ви тільки що розділили, оскільки це може призвести до погіршення продуктивності.

17. Розділяйте великі запити DELETE чи INSERT

Якщо вам потрібно виконати великий запит DELETE або INSERT на працюючому сайті, потрібно бути обережним, щоб не порушити трафік. Коли виконується великий запит, він може заблокувати ваші таблиці і призвести до зупинки програми.

Apache виконує багато паралельних процесів/потоків. з цієї причини він працює більш ефективно, коли скрипт закінчує виконання якнайшвидше, таким чином сервер не використовує занадто багато відкритих з'єднань і процесів, що споживають ресурси, особливо пам'ять.

Якщо ви блокуєте таблиці на тривалий час (наприклад, на 30 і більше секунд) на високо навантаженому веб-сервері, ви можете викликати накопичення процесів і запитів, що потребує значного часу на розчищення або навіть призведе до зупинки вашого веб-сервера.

Якщо у вас є скрипт, який видаляє велику кількість записів, просто використовуйте пропозицію LIMIT для розбиття його на маленькі партії, щоб уникнути описаної ситуації.

While (1) ( mysql_query("DELETE FROM logs WHERE log_date<= "2009-10-01" LIMIT 10000"); if (mysql_affected_rows() == 0) { // выполняем удаление break; } // вы можете сделать небольшую паузу usleep(50000); }

18. Маленькі стовпці обробляються швидше

Для механізму бази даних диск є найважливішим вузьким місцем. Прагнення зробити все більш компактним і маленьким зазвичай добре позначається у сфері продуктивності за рахунок скорочення обсягу даних, що переміщуються.

Документація MySQL містить перелік норм зберігання даних для всіх типів.

Якщо таблиця міститиме лише кілька рядків, то немає причин робити основний ключ типу INT, а не MEDIUMINT, SMALLINT або навіть TINYINT. якщо вам потрібна лише дата, використовуйте DATE замість DATETIME.

Потрібно лише пам'ятати про можливості зростання.

19. Вибирайте правильний механізм зберігання даних

Є два основних механізми зберігання даних для MySQL: MyISAM та InnoDB. Кожен має свої переваги та недоліки.

MyISAM відмінно підходить для додатків з великим навантаженням читання, але він не дуже добре масштабується за наявності великої кількості записів. Навіть якщо ви оновлюєте одне поле в одному рядку, вся таблиця буде заблокована і жоден процес не зможе нічого прочитати, поки запит не завершиться. MyISAM швидко здійснює обчислення для запитів типу SELECT COUNT(*).

InnoDB є більш складним механізмом зберігання даних, і він може бути повільнішим, ніж MyISAM для більшості маленьких програм. Але він підтримує блокування рядків, що найкраще для масштабування таблиць. Також він підтримує деякі додаткові особливості, як-от транзакції.

20. Використовуйте об'єктно-реляційне відображення

Використання об'єктно-реляційного відображення (ORM – Object Relational Mapper) дає ряд переваг. Все, що можна зробити в ORM, можна зробити вручну, але з більшими зусиллями та вищими вимогами до рівня розробника.

ORM відмінно підходить для "лінивого завантаження". Це означає, що отримання значень можливе тоді, коли вони потрібні. Але потрібно бути обережним, тому що можна створити багато маленьких запитів, які зменшать продуктивність.

ORM може також об'єднувати ваші запити в транзакції, які виконуються значно швидше, ніж індивідуальні запити до бази даних.

Для PHP можна використовувати ORM Doctrine.

21. Будьте обережні з постійними з'єднаннями

Постійні з'єднання призначені для скорочення втрат відновлення з'єднань до MySQL. Коли створюється постійне з'єднання, воно залишається відкритим навіть після завершення скрипта. Так як Apache повторно використовує дочірні процеси, процес виконується для нового скрипта, і він використовує теж з'єднання з MySQL.

Це звучить чудово в теорії. Але насправді ця функція не коштує мідного гроша через проблеми. Вона може викликати серйозні неприємності з обмеженнями кількості з'єднань, переповнення пам'яті тощо.

Apache працює на принципах паралельності і створює безліч дочірніх процесів. Ось у чому полягає причина того, що постійні з'єднання не працюють, як очікується в даній системі. Перш ніж використовувати mysql_pconnect(), проконсультуйтеся з вашим системним адміністратором.

Вітаю моїх читачів, набрався досвіду та розповім Вам про принципи роботи форми зворотного зв'язку php. Покажу на наочних прикладах, щоб ви розуміли як все влаштовано і як відбувається взаємодія між самою формою введення (її полями input) та файлом-обробником, написаним мовою php. До того ж безкоштовно зможете завантажити вихідні записи разом з .

Звичайно здорово буде, якщо ви хоч трохи знаєтеся на HTML / CSS т.к. Вам доведеться за аналогією перетягувати код на свою сторінку. PHP мову зачіпати не будемо, всі необхідні редагування, які потрібно буде зробити під себе я покажу.

UPDATE:За відгуками читачів, я зрозумів, що потрібно щось красивіше і функціональніше, зустрічайте, ознайомтеся і подивіться. Самі вибирайте яка більше сподобається)

UPDATE2: Version 3.0 Адаптивний Лендінг + форма ajax з передачею UTM-міток, ознайомтеся та подивіться. Вам сподобається

Згадав себе, коли вперше намагався робити самостійно форму зворотний зв'язок на php, і чесно зізнатися було трудомістко, т.к. не розумів, що і як відбувається. Терпіння та завзятість друзі і у вас все вийде.

Форма зворотного зв'язку php - структура

Розбір самої форми зворотного зв'язку вивчатимемо з прикладу посадкової сторінки (Landing Page), до речі є окрема стаття по . Подивитися як це працює в дії можете за кнопками, розташованими нижче, прикладаю вихідники цього односторінника та головного файлу обробника-php (цей файл і буде обробляти та відправляти лист на email)

Після того як завантажуєте вихідники та розпакуєте архів, ви побачите наступну структуру за файлами:

  • image - всі зображення, які використовуються для самого Landing Page, кнопки і т.д.
  • js - javascript скрипти, які забезпечують наприклад спливаюче модальне вікно на сторінці та інші візуальні ефекти
  • index.html - індексний файл нашого односторінника
  • index1.php - файл обробник, в який передаються значення з форми, далі формується лист з отриманих змінних та відправляється на вказану email адресу. Так само index1.php трапиться в ролі проміжної сторінки повідомлення про успішну відправку даних з автоматичним перенаправленням назад на index.html (тобто наш односторінок)

Важливо, щоб ваш хостинг, на якому розташовуються файли сайту, підтримував обробку php, інакше файл index1.php не виконається і працювати не буде. Щоб уточнити цей нюанс зверніться до кампанії, де зареєстрований ваш хостинг або просто протестуйте — працює, то є підтримка. Якщо ні, то увімкніть опцію підтримки мови php

Погляньте на схему роботи взаємодії всіх елементів (сторінка, форма, обробник)

Вихідний код виклику форми та обробника

Поглянемо на роботу однієї з кнопок, що викликає модальне спливаюче вікно, в якому знаходиться форма зворотного зв'язку. Даний наведений вихідний код - це не раз, два вставив на сторінку і запрацює, Вам доведеться самим підганяти під свій дизайн та потреби.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Замовити зворотній дзвінок

Замовити зворотній дзвінок

Нижче повний вихідний код обробника index1.php, щоб налаштувати відправку на свою поштову скриньку, поміняйте « [email protected]» на свій, інше в принципі можна залишити без змін

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 // від кого $send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = utf-8\r\nFrom:$email"); ini_set("short_open_tag", "On");header("Refresh: 3; URL=index.html"); ?> З вами зв'яжуться