Зворушений profile user php. Забираємо візуальний редактор, вибір колірної схеми та інші деталі в адмінці WordPress. Зміна порту MySQL у вашому скрипті

18.05.2020 Новини

Цей урок хотілося б присвятити створенню особистого профілю для зареєстрованих користувачів (додаток до уроку Створення реєстрації на сайті). Тепер користувачі зможуть додати свій аватар, змінити ім'я та прізвище, додати місце проживання та день народження. Для цього до таблиці usersдодамо кілька полів:

Тепер створимо сторінку профілю profile.phpта додамо на сторінці index.phpпосилання на неї

Echo "
Мій профіль"; Тепер код самої сторінки profile.php

Профіль<?php echo $login; ?>

Профіль



"; echo" ".$array["name_user"]." ".$array["lastname"]."
"; switch ($array["birthdate_month"])(//Перетворюємо номер місяця в назву case "1" : $month = "Січня"; break; case "2" : $month = "Лютого"; break; case " 3" : $month = "Березня"; break; case "4" : $month = "Квітня"; break; case "5" : $month = "Мая"; break; "; break; case "7" : $month = "Липня"; break; case "8" : $month = "Серпня"; break; case "9" : $month = "Вересня"; break; case "10" : $month = "Жовтень"; break; case "11" : $month = "Листопад"; break; case "12" : $month = "Грудень"; break; ) echo "Дата реєстрації: ".$array[" reg_date"]."
"; echo "Пол: ".$array["sex"]."
"; echo "День народження: ".$array["birthdate_day"]." ".$month." ".$array["birthdate_year"]."
"; echo "Країна: ".$array["country"]."
"; echo "Місто: ".$array["city"]."
"; if($_GET["id"] == $id_user)(//Редагувати профіль може тільки господар echo "Редагувати профіль"; ) )else( print<<Вхід:
Логін: Пароль:
РеєстраціяВідновлення пароля HERE; ) ?>

Природно перейшовши на цю сторінку, ми побачимо стандартну аватарку noAvatar.jpgі можливе ім'я та прізвище, якщо користувач під час реєстрації вказав їх, інші пункти будуть порожні. Наприкінці цієї сторінки є посилання на сторінку редагування профілю edit.php. Код цієї сторінки є дуже легким і складається з форм для введення даних. Через досить великий обсяг приводити тут повністю я його не буду, а наведу лише частину, повністю взяти його можна буде у вихідних файлах.

Всі інші форми аналогічні і будуть посилатися на один обробник save_edit.php, який і вноситиме зміни до бази даних. Він також має досить великий код, і тут я його теж наводити не буду, а лише трохи розповім, що в ньому відбувається (повністю код ви також можете у вихідних файлах). Насамперед ми створюємо аватарку, якщо користувач її завантажив звичайно, інакше залишаємо стандартну. Якщо це так, то насамперед ми завантажуємо в папку avatars(до речі, створіть цю папку та поставте їй права на запис 755) попередньо перевіривши з дозволеними розширеннями. Потім створюється нове зображення форматом, що залежить від вибраного режиму: $rezim = 1створюється квадратна картинка, $rezim = 2картинка пропорційна вихідній. Також треба задати ширину зображення, що створюється $wта якість $quality. Створене зображення ми зберігаємо у форматі jpg за допомогою функції imagejpegі генеруємо йому випадкове ім'я. Тепер потрібно видалити старе зображення та оновити базу даних на нове. На цьому із зображеннями все.

Всі інші пункти даного файлу призначені для оновлення особистих даних про користувача та є простими запитами до бази даних для оновлення полів. Попередньо перед оновленням перевіряється існування вхідних змінних та їх безпека за допомогою stripslashesі htmlspecialchars. Якщо оновлення відбувається успішно, ми відразу перенаправляємо користувача на сторінку профілю.
Тепер зробимо так щоб користувач, що увійшов, зміг бачити всіх інших зареєстрованих користувачів. Для цього створимо сторінку user.php, яка у циклі виводитиме всіх користувачів.

Користувачів WordPress я вже писав (дивимось за посиланням). Але як і будь-який інструмент (крім кувалди) Adminimize - не ідеальний і все повністю він прибрати не може, хоча завдяки тільки програмістам Ворпреса.

Ця посада народилася спонтанно, можете дякувати гостю Blow. Суть його питання полягала в наступному (скоріше серії питань):

1. Як приховати «Вибір колірної схеми» для користувача?

2. Як приховати «Гарячі клавіші» та «Візуальний редактор» на панелі WordPress?

Перейду одразу до справи. За допомогою такого способу можна приховувати будь-які елементи для користувача в його профілі та на інших сторінках також. Спосіб найпростіший - редагування файлу відображення!

Для "Профілю" - це файл user-edit.php, який лежить у папці wp-admin.Правити його потрібно дуже обережно, інакше можна добре розплатитися за свої експерименти.

Рішення (уніфіковане):

1. Завантажуємо файл до себе на ПК і робимо його копію (збереженого ….)

2. Шукаємо Html-код, який відповідає за виведення потрібної нам інформації.

3. Обережно коментуємо його та «заливаємо» назад із заміною.

Тепер практика (редагування User-edit.php):

Чесно, не пам'ятаю, яка версія у мене WP на піддослідному сайті, але точно не нижче 2.8.2.

Спочатку, я скачав файл на ПК і за допомогою "Переглядача коду Chrome" подивився сам код, а в Notepad ++ знайшов потрібний код.

(рисок по дві з кожного боку "-")

1. Приховуємо «Візуальний редактор»

Змінюємо на код:

—>

ps: не копіюйте цей код, а змінюйте у себе - велика ймовірність помилок!

2. Приховуємо "Вибір колірної схеми".

Ви, сподіваюся, помітили, у чому різниця кодів — всього додали 7 символів. Для приховання цього пункту шукаємо if (count($_wp_admin_css_colors) > 1)і коментуємо під рядком весь код між до

3. Приховуємо "Гарячі клавіші".

У другому уроці ми напишемо ще два класи та повністю закінчимо внутрішню частину скрипту.

План

Мета серії уроків створити простий додаток, який дозволяє користувачам реєструватися, входити, виходити та змінювати налаштування. Клас, який міститиме всю інформацію про користувача буде називатися User і він буде визначений у файлі User.class.php. Клас, який відповідатиме за вхід\вихід буде називатися UserTools (UserTools.class.php).

Трохи про назву класів

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

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

Клас Користувачів (User.class.php)

Цей клас визначатиме кожного користувача. Зі зростанням цього додаткуВизначення "Користувач" може суттєво змінитись. На щастя, програмування ООП дозволяє легко додавати додаткові атрибути користувачів.

Конструктор

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

require_once "DB.class.php"; class User ( public $id; public $username; public $hashedPassword; public $email;
public $joinDate;
//Конструктор викликається під час створення нового об'єкта//Таки an associative array with the DB ряд як an argument. function __construct($data) ( $this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" username"])) ? $data["username"] : ""; $this->hashedPassword = (isset($data["password"])) ? $data["password"] : ""; >email = (isset($data["email"])) ? $data["email"] : ""; $this->joinDate = (isset($data["join_date"])) ? $data[" join_date"] : ""; )
public function save($isNewUser = false) ( //create a new database object. $db = new DB(); //if the user is already registered and we"re //just updating their info. if(!$isNewUser ) ( //set the data array $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"",
"email" => ""$this->email"");
//update the row in the database $db->update($data, "users", "id = ".$this->id); )else ( //if the user is being registered for the first time. $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"" , "email" => ""$this->email"", "join_date" => """.date("Y-m-d H:i:s",time())."""); id = $db->insert($data, "users"); $this->joinDate = time(); ) return true; ) ) ?>

Пояснення

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

Замість змінних класу "protected" (використовувалися в 1-му уроці) ми визначаємо їх як "public". Це означає, що будь-який код поза класом має доступ до цих змінних під час роботи з об'єктом User.

Конструктор бере масив, у якому колонки у таблиці є ключами. Ми задаємо змінну класу, використовуючи $this->variablename. У прикладі даного класу, ми перш за все перевіряємо чи існує значення певного ключа. Якщо так, тоді ми прирівнюємо змінну класу до цього значення. В іншому випадку - порожній рядок. Код використовує коротку форму запису обороту if:

$ value = (3 == 4)? "A": "B";

У даному прикладіми перевіряємо чи дорівнює 3 чотирьом! Якщо так - тоді $value = "A", ні - $ value = "B". У прикладі результат $value = “B”.

Зберігаємо Інформацію про Користувачів у БД

Функція збереження використовується для внесення змін до таблиці баз даних з поточними значеннями в об'єкті User. Ця функція використовує клас БД, який ми створили у першому уроці. Використовуючи змінні класу, встановлюється масив $data. Якщо дані про користувача зберігаються вперше, $isNewUser передається як $true (за промовчанням false). Якщо $isNewUser = $true, тоді викликається функція insert() класу DB. Інакше викликається функція update(). В обох випадках інформація від об'єкта користувача буде збережена в БД.

Клас UserTools.class.php

Цей клас буде містити функції, які стосуються користувачів: login(), logout(), checkUsernameExists() та get(). Але з розширенням цієї програми, Ви можете додати ще багато інших.

//UserTools.class.php require_once "User.class.php"; require_once "DB.class.php";
class UserTools (
//Log the user in. Перші вибори до повідомлень, якщо //username і password match a row in the database. //If it is successful, set the session variables //and store the user object within.
public function login($username, $password)
{
$hashedPassword = md5($password); $result = mysql_query("SELECT * FROM users WHERE username = "$username" AND password = "$hashedPassword""); if(mysql_num_rows($result) == 1) ( $_SESSION["user"] = serialize(new User(mysql_fetch_assoc($result))); $_SESSION["login_time"] = time(); $_SESSION["logged_in "] = 1; return true; )else( return false; ) )
//Log the user out. Destroy the session variables. public function logout() ( unset($_SESSION["user"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Check to see if a username exists. //Ця є названа під час реєстрації в тому, що всі користувачі називаються unique. public function checkUsernameExists($username) ( $result = mysql_query("select id from users where username="$username""); if(mysql_num_rows($result) == 0) ( return false; )else( return true; )
}
//get a user //returns a User object. Такі users id as an input public function get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result ); ) )
?>

Функція login()

Функція login() зрозуміла за назвою. Вона бере аргументи користувача $username і $password і перевіряє їхню відповідність. Якщо все збігається, створює об'єкт User з усією інформацією та зберігає його у сесії. Зверніть увагу, що ми використовуємо функцію PHP serialize(). Вона створює збережений варіант об'єкта, який можна скасувати за допомогою unserialize(). Також час логіну буде збережено. Це може використовуватися надалі для надання користувачам інформації про тривалість перебування на сайті.

Ви також можете помітити, що ми виставляємо $_SESSION["logged_in"] на 1. Це дозволяє нам легко перевірити на кожній сторінці чи залогінен користувач. Достатньо перевірити лише цю змінну.

Функція logout()

Також найпростіша функція. Функція PHP unset() очищає змінні пам'яті, тоді як session_destroy() видалить сесію.

Функція checkUsernameExists()

Хто знає англійську, легко зрозуміє функцію. Вона просто запитує БД, чи використаний подібний логін чи ні.

Функція get()

Ця функція бере унікальний ID користувача і робить запит до БД за допомогою класу DB, а саме функції select(). Вона візьме асоціативний масив із низкою інформації про користувача та створить новий об'єкт User, передаючи масив конструктору.

Де це можна використовувати? Наприклад, якщо Ви створите сторінку, яка повинна відображати специфічні профілі користувачів, Вам необхідно динамічно брати цю інформацію. Ось так Ви можете це зробити (припустимо УРЛ http://www.website.com/profile.php?userID=3)

//note: Ви маєте здійснити Open up Database connection first. //see Part 1 for further information on doing so. //You'll also have to make sure that you've included the class files.
$tools = New UserTools(); $user = $tools->get($_REQUEST["userID"]); echo "Username: ".$user->username.""; echo "Joined On: ".$user->joinDate."";

Легко! Правда?

Останній штрих серверної частини: global.inc.php

global.inc.php потрібний для кожної сторінки сайту. Чому? Таким чином, ми розмістимо всі звичайні операції, які нам знадобляться на сторінці. Наприклад, ми розпочнемо session_start(). З'єднання з БД також відкриється.

require_once "classes/UserTools.class.php";
require_once "classes/DB.class.php";
//connect to the database $db = новий DB(); $db->connect();
//initialize UserTools object $userTools = new UserTools(); //start the session
session_start();
//refresh session variables if logged in if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id));) ?>

Що він робить?

Тут трапляється кілька речей. Насамперед, ми відкриваємо з'єднання з базою.

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

Далі ми перевіряємо чи закладений користувач. Якщо так - ми оновимо $_SESSION["user"], щоб відображати останню інформацію про користувача. Наприклад, якщо користувач змінює свій емейл, у сесії зберігатиметься ще старий. Але за допомогою авто оновлення такого не станеться.

На цьому друга частина добігла кінця! Завтра чекайте на заключний урок з цієї теми.

Всього найкращого!

Загальні питання

Q:Профайлер показує активність сервера, але не показує всіх запитів та сесій.

A:Не забудьте натиснути кнопку Старт, щоб розпочати захоплення сесій.

Q:Вдалося підключитися до MySQL, але сесії не показуються.

A: Neor Profile SQL працює як проксі-сервер. Це означає, що можуть бути показані тільки сесії, що проходять через профайлер. Ваша програма (або сайт) має бути з'єднуватися з профайлером як зі звичайним MySQL сервером. Профайлер використовує лише TCP вхідні з'єднання. І тоді ви побачите результат у закладці Сесії.

Q:Чому у деяких сесіях запити з нульовим часом?

A:Запити з нульовим часом виконуються дуже швидко без затримки. Такі запити могли бути закешовані СУБД або виконуються дуже швидко, наприклад, якщо у вас потужний сервер і добре оптимізовані таблиці.

Q:Що означає % у часі та тривалості у сесії?

A:"Час %" - це частка загального часу виконання сесії. "Тривалість %" - це частка від найдовшого запиту в сесії (співвідношення до найдовшого запиту).

Q:Я використовую JetProfiler і це в налаштуванні простіше.

A: JetProfiler отримує інформацію від MySQL сервера через команду "show status" і може отримати всю інформацію на сервері, оскільки працює дискретно. Neor Profile SQL показує всі запити до бази даних. І це вимагає налаштування вашої програми для направлення потоку запитів через профайлер.

Q:Кнопка Профіль в закладці SQL не показує результату

A:Функція профілювання в редакторі SQL працює через команду SHOW PROFILES, яка була додана в MySQL Community Server починаючи з версії 5.0.37. Перевірте свою версію MySQL.

Q:Чи можна зробити профайлер консольним?

A:Для консолі використовуйте зв'язку логів СУБД та tail, або спеціальні консольні інструменти, яких досить багато. Neor Profile SQL - це програма для віконної ОС, яка призначена для розміщення на системі у розробника.

Q:Профайлер працює, але чомусь не відображає головний графік статистики?

A:Головний графік використовує команду SHOW STATUS для основного сервера. Можливо, у вас немає прав для запуску цієї команди на сервері. Переконайтеся, що ця команда доступна.

Q:Як запустити установник у тихому режимі?

A: sqlprofiler-4.1.1.exe /S /D:C:Program Files (x86)Neor Profile SQL

Windows

Q:Як перевірити з'єднання Профайлера?

A:Використовуйте консольний клієнт MySQL для з'єднання з профайлером. Якщо ви побачите свою сесію в закладці Сесії, це означає, що все налаштовано правильно.
Наприклад:
Потім виконайте просту SQL команду:
show tables;
І подивіться що вийшло в закладці Сесії у профайлері.

Linux

Q:Не можу з'єднатись через localhost.

A: Linux намагається асоціювати localhost із сокетним з'єднанням, але Neor Profile SQL працює лише з TCP з'єднаннями. Встановіть у профайлері серверну адресу 127.0.0.1 замість localhost. Те саме зробите в налаштуваннях своєї програми.
Наприклад:
mysql --host=127.0.0.1 --user=LOGIN --password=PASSWORD --port=4040

Q:Не можу з'єднатися із 127.0.0.1.

A:Перевірте тип з'єднання у вашому додатку. Можна також скористатися типом з'єднання local socket, в якому не потрібно вводити порт.

Q:Як встановити Neor Profile SQL під OpenSUSE?

A:На сьогоднішній момент ми підтримуємо лише пакет DEB, який працює під Ubuntu, Debian та сумісних Linux дистрибутивах. Ви можете зробити RPM файлсвоїми силами та допомогти тим самим.

Q:Чому я не можу перехопити запити Sysbench?

A:Профайлер використовує лише TCP вхідні з'єднання. Запускайте Sysbench з параметрами хоста та порту:
sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=4040--mysql-user=root --mysql-password=password prepare

Mac OS X

Q:Профайлер не може з'єднатися з сервером MAMP MySQL.

A:Проблема мережного з'єднанняу конфігурації MySQL:

  1. МАМР
    Безкоштовна версія– скопіюйте стандартний MySQL конфіг у папку
    /Applications/MAMP/conf/my.cnf
    Pro версія – відкрийте меню FILE – EDIT – MySQL template
  2. у конфігурації my.cnf видаліть рядок skip-networking
  3. у Налаштуваннях профайлера змініть адресу хоста БД з localhost на 127.0.0.1

Зміна порту MySQL у вашому скрипті

У порту Neor Profile SQL за замовчуванням 4040. Для збору SQL запитівви повинні змінити у вашому скрипті стандартні значення підключення до MySQL хоста та порту 3306. Нижче наведено приклади, як це зробити.

string connStr = " server=127.0.0.1;port=4040; database=YOUR_DATABASE;user=YOUR_USER;password=YOUR_PASSWORD;";
http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html


Зміна порту в популярних CMS

Wordpress

File: wp-config.php
Code: define("DB_HOST", "localhost :4040 ");

PrestaShop

File: config/settings.inc.php
Code: define("_DB_SERVER_", "localhost :4040 ");

OpenCart

File: config.php
Code: define("DB_HOSTNAME", "localhost :4040 ");