Usuwamy edytor wizualny, wybór schematu kolorów i inne szczegóły w obszarze administracyjnym WordPress. Usuwamy edytor wizualny, wybór schematu kolorów i inne szczegóły w panelu administracyjnym WordPress. Ukrywamy „Klawisze skrótu”.

Chciałbym poświęcić tę lekcję na utworzenie profilu osobistego dla zarejestrowanych użytkowników (dodatek do lekcji Tworzenie rejestracji użytkownika w serwisie). Teraz użytkownicy będą mogli dodać swój awatar, zmienić imię i nazwisko, dodać miejsce zamieszkania oraz datę urodzenia. Aby to zrobić, w tabeli użytkownicy dodajmy kilka pól:

Teraz utwórzmy stronę profilu profil.php i dodaj go do strony indeks.php link do niego

Echo"
Mój profil"; Teraz kod samej strony profile.php

Profil<?php echo $login; ?>

Profil



"; Echo " ".$array["nazwa_użytkownika"]." „.$tablica[„nazwisko”].”
"; switch ($array["birthdate_month"])(//Konwertuj numer miesiąca na nazwę case "1": $miesiąc = "styczeń"; break; case "2": $miesiąc = "luty"; break; przypadek „3”: $miesiąc = „marzec”; przypadek „4”: $miesiąc = „kwiecień”; przypadek „5”: $miesiąc = „maj”; „Czerwiec”; przerwa; przypadek „7”: $miesiąc = „lipiec”; przerwa „8”: $miesiąc = „sierpień”; przerwa; przypadek „9”: $miesiąc = „wrzesień”; 10": $miesiąc = "październik"; przerwa; case "11": $miesiąc = "listopad"; przerwa; $miesiąc = "grudzień"; echo "Data rejestracji: ".$array[" reg_date"]."
"; echo "Płeć: ".$array["płeć"]."
"; echo "Urodziny: ".$array["data_urodzeń"]." „.$miesiąc.” ".$array["data_urodzenia"]."
"; echo "Kraj: ".$array["kraj"]."
"; echo "Miasto: ".$array["miasto"]."
"; if($_GET["id"] == $id_user)(//Tylko właściciel może edytować echo profilu "Edytuj profil"; ) )else( print<<Wejście:
Zaloguj sie: Hasło:
Rejestracja Odzyskanie hasła TUTAJ; )?>

Naturalnie wchodząc na tę stronę zobaczymy standardowy awatar noAvatar.jpg oraz ewentualnie imię i nazwisko, jeśli użytkownik podał je podczas rejestracji, pozostałe pozycje będą puste. Na samym końcu tej strony znajduje się link do strony edycji profilu edycja.php. Kod tej strony jest bardzo lekki i składa się z formularzy wprowadzania danych. Ze względu na dość dużą objętość nie przytaczam go tutaj w całości, ale podam tylko część, którą będzie można uzyskać w całości w plikach źródłowych.

Wszystkie inne formularze są podobne i będą odnosić się do jednego modułu obsługi save_edit.php, który dokona zmian w bazie danych. Ma też dość duży kod, którego też tutaj nie będę przedstawiał, a jedynie opowiem trochę o tym, co się w nim dzieje (pełny kod znajdziesz też w plikach źródłowych). W pierwszej kolejności tworzymy awatar, jeśli oczywiście użytkownik go przesłał, w innym przypadku zostawiamy standardowy. Jeśli tak jest, to najpierw pobieramy go do folderu awatary(przy okazji utwórz ten folder i nadaj mu uprawnienia do zapisu 755) po sprawdzeniu dozwolonych rozszerzeń. Następnie tworzony jest nowy obraz w formacie zależnym od wybranego trybu: $rezim = 1 powstaje kwadratowy obraz, $rezim = 2 obraz jest proporcjonalny do oryginału. Musisz także ustawić szerokość tworzonego obrazu $w i jakość jakość. Utworzony obraz zapisujemy w formacie jpg za pomocą funkcji obrazjpeg i wygeneruj dla niego losową nazwę. Teraz należy usunąć stary obraz i zaktualizować go w bazie danych nowym. To wszystko, jeśli chodzi o obrazy.

Wszystkie pozostałe pozycje w tym pliku mają na celu aktualizację danych osobowych użytkownika i są prostymi zapytaniami do bazy danych w celu aktualizacji pól. Przed aktualizacją sprawdzane jest istnienie przychodzących zmiennych i ich bezpieczeństwo za pomocą ukośniki I htmlznaki specjalne. Jeśli aktualizacja się powiedzie, natychmiast przekierowujemy użytkownika na stronę profilu.
Teraz upewnijmy się, że zalogowany użytkownik widzi wszystkich pozostałych zarejestrowanych użytkowników. Aby to zrobić, utwórzmy stronę użytkownik.php, który wyświetli w pętli wszystkich użytkowników.

O użytkownikach WordPressa pisałem już (patrz link). Ale jak każde narzędzie (z wyjątkiem młota), Adminimize nie jest idealne i nie może usunąć wszystkiego całkowicie, chociaż dzieje się tak tylko dzięki programistom WordPressa.

Post ten powstał spontanicznie, można powiedzieć dzięki gościnnemu Blowowi. Istota jego pytania była następująca (bardziej jak seria pytań):

1. Jak ukryć „Wybierz” schemat kolorów„dla użytkownika?

2. Jak ukryć „Hot Keys” i „Edytor wizualny” w panelu WordPress?

Przejdę od razu do rzeczy. Za pomocą tej metody możesz ukryć dowolne elementy użytkownika w jego profilu, a także na innych stronach. Najłatwiej jest edytować plik wyświetlany!

W przypadku „Profilu” jest to plik edycja użytkownika.php, który znajduje się w folderze wp-admin. Musisz go bardzo ostrożnie edytować, w przeciwnym razie możesz dobrze „zapłacić” za swoje eksperymenty.

Rozwiązanie (ujednolicone):

1. Pobierz plik na swój komputer i wykonaj jego kopię (bezpieczną...)

2. Poszukujemy kodu HTML odpowiedzialnego za wyświetlenie potrzebnych nam informacji.

3. Uważnie skomentuj go i „uzupełnij” go zamiennikiem.

Teraz poćwicz (edytuj User-edit.php):

Szczerze mówiąc, nie pamiętam, jaką wersję WP mam na stronie testowej, ale na pewno nie jest ona niższa niż 2.8.2.

Najpierw pobrałem plik na komputer, sprawdziłem kod za pomocą przeglądarki Chrome Code Viewer i znalazłem wymagany kod w Notepad++.

(dwa myślniki po każdej stronie „-”)

1. Ukryj „Edytor wizualny”

Zmień na kod:

—>

ps: nie kopiuj tego kodu, ale zmień go sam - istnieje duże prawdopodobieństwo błędów!!!

2. Ukryj „Wybierz schemat kolorów”.

Mam nadzieję, że zauważyłeś różnicę między kodami - w sumie dodano 7 znaków. Aby ukryć ten przedmiot, którego szukamy if (count($_wp_admin_css_colors) > 1) i skomentuj poniżej linii cały kod pomiędzy zanim

3. Ukryj „Klawisze skrótu”.

Na drugiej lekcji napiszemy jeszcze dwie zajęcia i całkowicie dokończymy wewnętrzną część skryptu.

Plan

Celem tej serii tutoriali jest stworzenie prostej aplikacji, która pozwala użytkownikom rejestrować się, logować, wylogowywać i zmieniać ustawienia. Klasa, która będzie zawierać wszystkie informacje o użytkowniku, będzie nosiła nazwę User i zostanie zdefiniowana w pliku User.class.php. Klasa odpowiedzialna za wejście/wyjście będzie nazywać się UserTools (UserTools.class.php).

Trochę o nazewnictwie klas

Właściwą etykietą jest nadawanie nazw plikom opisującym klasę tą samą nazwą, co sama klasa. Ułatwia to określenie przeznaczenia każdego pliku w folderze klas.

Często na końcu nazwy pliku klasy dodaje się także końcówkę .class lub .inc. W ten sposób jasno definiujemy przeznaczenie pliku i możemy użyć .htaccess do ograniczenia dostępu do tych plików.

Klasa użytkownika (User.class.php)

Ta klasa zdefiniuje każdego użytkownika. Ze wzrostem ta aplikacja Definicja „Użytkownika” może ulec istotnym zmianom. Na szczęście programowanie OOP ułatwia dodawanie dodatkowych atrybutów użytkownika.

Konstruktor

W tej klasie skorzystamy z konstruktora - jest to funkcja, która wywoływana jest automatycznie przy tworzeniu kolejnej kopii klasy. Dzięki temu możemy automatycznie publikować niektóre atrybuty po utworzeniu projektu. W tej klasie konstruktor przyjmie pojedynczy argument: tablicę asocjacyjną zawierającą jeden wiersz z tabeli użytkowników naszej bazy danych.

require_once "DB.class.php"; użytkownik klasy (public $id; public $nazwa użytkownika; public $hashedPassword; public $e-mail;
publiczna $joinDate;
//Konstruktor jest wywoływany podczas tworzenia nowego obiektu//Pobiera tablicę asocjacyjną z wierszem DB jako argument. funkcja __construct($data) ( $this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" nazwa_użytkownika"])) ? $data["nazwa użytkownika"] : ""; $this->hashedPassword = (isset($data["hasło"])) ? $data["hasło"]: ""; $this- >email = (isset($data["email"])) ?data["email"] : "";$this->joinDate = (isset($data["data_łączenia"])) $data["data_łączenia "] : ""; )
funkcja publiczna save($isNewUser = false) ( //utwórz nowy obiekt bazy danych. $db = new DB(); //jeśli użytkownik jest już zarejestrowany, a my //tylko aktualizujemy jego dane. if(!$isNewUser ) ( //ustaw tablicę danych $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"",
"email" => ""$ten->e-mail"");
//aktualizuj wiersz w bazie danych $db->update($data, "users", "id = ".$this->id); )else ( //jeśli użytkownik jest rejestrowany po raz pierwszy. $data = array("username" => ""$this->username"", "password" => "$this->hashedPassword"" , "email" => ""$this->email"", "join_date" => """.date("Y-m-d H:i:s",time())."""); id = $db ->insert($dane, "użytkownicy"); $this->joinDate = czas(); )) ?>

Wyjaśnienie

Pierwsza część kodu, znajdująca się poza strefą klas, zapewnia połączenie klasy z bazą danych (ponieważ klasa User posiada funkcję wymagającą tej klasy).

Zamiast zmiennych klasy „chronionej” (używanej na pierwszej lekcji) definiujemy je jako „publiczne”. Oznacza to, że dowolny kod spoza klasy ma dostęp do tych zmiennych podczas pracy z obiektem User.

Konstruktor pobiera tablicę, w której kolumny tabeli są kluczami. Definiujemy zmienną klasy za pomocą $this->variablename. W przykładzie tej klasy najpierw sprawdzamy, czy wartość danego klucza istnieje. Jeśli tak, to ustawiamy zmienną klasy na tę wartość. W przeciwnym razie pusty ciąg. W kodzie używana jest krótka forma notacji, jeśli:

$wartość = (3 == 4) ? „A”: „B”;

W w tym przykładzie sprawdzamy, czy 3 równa się cztery! Jeśli tak - to $wartość = „A”, nie - $wartość = „B”. W naszym przykładzie wynikiem jest $wartość = „B”.

Zapisujemy informacje o Użytkownikach w bazie danych

Funkcja zapisu służy do wprowadzenia zmian w tabeli bazy danych z aktualnymi wartościami w obiekcie User. Ta funkcja wykorzystuje klasę DB, którą utworzyliśmy w pierwszej lekcji. Za pomocą zmiennych klasowych ustawiana jest tablica $data. Jeśli dane użytkownika są zapisywane po raz pierwszy, wówczas zmienna $isNewUser jest przekazywana jako $true (domyślnie false). Jeśli $isNewUser = $true, wówczas wywoływana jest funkcja Insert() klasy DB. W przeciwnym razie wywoływana jest funkcja update(). W obu przypadkach w bazie danych zostaną zapisane informacje z obiektu użytkownika.

Klasa UserTools.class.php

Ta klasa będzie zawierać funkcje związane z użytkownikami: login(), logout(), checkUsernameExists() i get(). Ale wraz z rozwojem tej aplikacji możesz dodać o wiele więcej.

//UserTools.class.php require_once "User.class.php"; require_once "DB.class.php";
klasa Narzędzia użytkownika (
//Zaloguj użytkownika. Najpierw sprawdza, czy //nazwa użytkownika i hasło pasują do wiersza w bazie danych. //Jeśli się powiedzie, ustaw zmienne sesji // i zapisz w nich obiekt użytkownika.
logowanie do funkcji publicznej ($nazwa użytkownika, $hasło)
{
$hashedPassword = md5($hasło); $result = mysql_query("WYBIERZ * OD użytkowników GDZIE nazwa użytkownika = "$nazwa użytkownika" ORAZ hasło = "$hashedPassword""); if(mysql_num_rows($result) == 1) ( $_SESSION["użytkownik"] = serialize(nowy użytkownik(mysql_fetch_assoc($result))); $_SESSION["login_time"] = czas(); $_SESSION["zalogowany_in "] = 1; zwróć wartość true; ) else ( zwróć wartość false; ) )
//Wyloguj użytkownika. Zniszcz zmienne sesji. funkcja publiczna logout() ( unset($_SESSION["użytkownik"]); unset($_SESSION["czas_logowania"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Sprawdź, czy nazwa użytkownika istnieje. //Jest to wywoływane podczas rejestracji, aby upewnić się, że wszystkie nazwy użytkowników są unikalne. funkcja publiczna checkUsernameExists($username) ( $result = mysql_query("wybierz identyfikator od użytkowników, gdzie username="$username""); if(mysql_num_rows($result) == 0) ( return false; )else( return true; )
}
//pobierz użytkownika //zwraca obiekt użytkownika. Pobiera identyfikator użytkownika jako wejściową funkcję publiczną get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result ); ) )
?>

funkcja logowania().

Funkcja login() jest jasna po nazwie. Pobiera argumenty użytkownika $nazwa użytkownika i $hasło i sprawdza, czy są zgodne. Jeśli wszystko pasuje, tworzy obiekt użytkownika ze wszystkimi informacjami i zapisuje go w sesji. Pamiętaj, że używamy tylko funkcji serialize() PHP. Tworzy przechowywaną wersję obiektu, którą można łatwo zdeserializować za pomocą unserialize(). Zapisany zostanie także czas logowania. Można to później wykorzystać w celu przekazania użytkownikom informacji o długości pobytu na stronie.

Możesz także zauważyć, że ustawiliśmy $_SESSION["logged_in"] na 1. Dzięki temu możemy łatwo sprawdzić na każdej stronie, czy użytkownik jest zalogowany. Wystarczy sprawdzić tylko tę zmienną.

funkcja wylogowania().

Również prosta funkcja. Funkcja PHP unset() czyści zmienne w pamięci, natomiast session_destroy() usuwa sesję.

checkUsernameExists().

Każdy, kto zna język angielski, z łatwością zrozumie tę funkcję. Po prostu pyta bazę danych, czy użyto podobnego loginu, czy nie.

funkcja get().

Funkcja ta pobiera unikalny identyfikator użytkownika i wysyła zapytanie do bazy danych przy użyciu klasy DB, czyli funkcjiselect(). Pobierze tablicę asocjacyjną z liczbą informacji o użytkowniku i utworzy nowy obiekt User, przekazując tablicę do konstruktora.

Gdzie mogę tego użyć? Na przykład, jeśli utworzysz stronę, która ma wyświetlać określone profile użytkowników, będziesz musiał dynamicznie pobierać te informacje. Można to zrobić w następujący sposób: (powiedzmy, że adres URL to http://www.website.com/profile.php?userID=3)

//uwaga: najpierw musisz otworzyć połączenie z bazą danych. //więcej informacji na ten temat można znaleźć w części 1. //Musisz także upewnić się, że dołączyłeś pliki klas.
$narzędzia = nowe Narzędzia użytkownika(); $użytkownik = $narzędzia->get($_REQUEST["IDużytkownika"]); echo "Nazwa użytkownika: ".$użytkownik->nazwa użytkownika.""; echo "Dołączył: ".$user->joinDate."";

Łatwo! Czy to prawda?

Ostatni akcent po stronie serwera: global.inc.php

global.inc.php jest wymagany dla każdej strony w serwisie. Dlaczego? W ten sposób umieścimy na stronie wszystkie zwykłe operacje, które będą nam potrzebne. Na przykład uruchomimy session_start(). Otworzy się również połączenie z bazą danych.

require_once "classes/UserTools.class.php";
require_once "classes/DB.class.php";
//połącz się z bazą danych $db = new DB(); $db->połącz();
//inicjalizuj obiekt UserTools $userTools = new UserTools(); //rozpocznij sesję
początek_sesji();
//odśwież zmienne sesji, jeśli jesteś zalogowany if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($użytkownik->id)) ?>

Co on robi?

Dzieje się tutaj kilka rzeczy. W pierwszej kolejności otwieramy połączenie z bazą danych.

Po połączeniu uruchamiamy funkcję session_start(). Funkcja tworzy sesję lub kontynuuje obecną, jeśli użytkownik jest już zalogowany. Ponieważ nasza aplikacja jest zaprojektowana tak, aby użytkownicy mogli się logować i wylogowywać, ta funkcja jest wymagana na każdej stronie.

Następnie sprawdzamy czy użytkownik jest zalogowany. Jeśli tak, zaktualizujemy $_SESSION["user"], aby uwzględnić najnowsze informacje o użytkowniku. Na przykład, jeśli użytkownik zmieni swój adres e-mail, stary zostanie zapisany w sesji. Ale w przypadku automatycznej aktualizacji tak się nie stanie.

Na tym kończy się druga część! Wypatrujcie jutro ostatniej lekcji na ten temat.

Wszystkiego najlepszego!

Ogólne problemy

Q: Profiler pokazuje aktywność serwera, ale nie pokazuje wszystkich żądań i sesji.

A: Nie zapomnij kliknąć przycisku Start, aby rozpocząć przechwytywanie sesji.

Q: Udało mi się połączyć z MySQL, ale sesje nie są pokazane.

A: Neor Profile SQL działa jako serwer proxy. Oznacza to, że można wyświetlić tylko sesje przechodzące przez profiler. Twoja aplikacja (lub witryna internetowa) musi być połączona z profilerem tak, jakby był zwykłym serwerem MySQL. Profiler używa tylko połączeń przychodzących TCP. A potem zobaczysz wynik w zakładce Sesje.

Q: Dlaczego niektóre sesje mają żądania z zerowym czasem?

A: Zapytania zero-time są wykonywane niezwykle szybko, bez opóźnień. Takie zapytania mogą być buforowane przez system DBMS lub wykonywane bardzo szybko, na przykład, jeśli masz mocny serwer i dobrze zoptymalizowane tabele.

Q: Co oznacza % w czasie i czasie trwania sesji?

A:„Czas%” to procent całkowitego czasu wykonania sesji. „Czas trwania%” to procent najdłuższego żądania w sesji (stosunek do najdłuższego żądania).

Q: Używam JetProfiler i jest łatwiejszy w konfiguracji.

A: JetProfiler otrzymuje informacje z Serwery MySQL za pomocą polecenia „show status” i nie może uzyskać wszystkich informacji z serwera, ponieważ działa on dyskretnie. Neor Profile SQL pokazuje absolutnie wszystkie zapytania do bazy danych. Wymaga to skonfigurowania aplikacji tak, aby kierowała przepływ żądań przez profiler.

Q: Przycisk Profil w zakładce SQL nie pokazuje wyniku

A: Funkcja profilowania w edytorze SQL działa poprzez polecenie SHOW PROFILES, które zostało dodane do MySQL Community Server począwszy od wersji 5.0.37. Sprawdź wersję serwera MySQL.

Q: Czy możliwe jest, aby profiler był oparty na konsoli?

A: W przypadku konsoli użyj kombinacji dzienników i ogona DBMS lub specjalnych narzędzi konsoli, których jest sporo. Neor Profile SQL to okienkowa aplikacja systemu operacyjnego przeznaczona do umieszczenia w systemie programisty.

Q: Profiler działa, ale z jakiegoś powodu nie wyświetla głównego wykresu statystyk?

A: Główny wykres wykorzystuje polecenie SHOW STATUS dla głównego serwera. Być może nie masz uprawnień do uruchomienia tego polecenia na serwerze. Upewnij się, że masz uprawnienia do tego polecenia.

Q: Jak uruchomić instalator w trybie cichym?

A: sqlprofiler-4.1.1.exe /S /D:C:Pliki programów (x86)Neor Profile SQL

Okna

Q: Jak sprawdzić połączenie Profilera?

A: Użyj klienta konsoli MySQL, aby połączyć się z profilerem. Jeśli widzisz swoją sesję w zakładce Sesje, oznacza to, że wszystko jest skonfigurowane poprawnie.
Na przykład:
Więc zrób to prosty SQL Komenda:
pokaż tabele;
I spójrz, co się stało w zakładce Sesje w profilerze.

Linuksa

Q: Nie mogę się połączyć przez localhost.

A: Linux próbuje powiązać localhost z połączeniem przez gniazdo, ale Neor Profile SQL działa tylko z połączeniami TCP. Ustaw adres serwera w profilerze na 127.0.0.1 zamiast localhost. To samo możesz zrobić w ustawieniach aplikacji.
Na przykład:
mysql --host=127.0.0.1 --user=LOGIN --password=HASŁO --port=4040

Q: Nie mogę połączyć się z 127.0.0.1.

A: Sprawdź typ połączenia w swojej aplikacji. Można także użyć typu połączenia z gniazdem lokalnym, które nie wymaga podawania wartości portu.

Q: Jak zainstalować Neor Profile SQL w OpenSUSE?

A: Obecnie obsługujemy tylko pakiet DEB, który działa na Ubuntu, Debianie i kompatybilnych. Dystrybucje Linuksa. Możesz samodzielnie utworzyć plik RPM i w ten sposób pomóc.

Q: Dlaczego nie mogę przechwytywać żądań Sysbench?

A: Profiler używa tylko połączeń przychodzących TCP. Uruchom Sysbench z parametrami hosta i portu:
sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=4040--mysql-user=root --mysql-password=przygotowanie hasła

Mac OS X

Q: Profiler nie może połączyć się z serwerem MAMP MySQL.

A: Problem połączenie internetowe w konfiguracji MySQL:

  1. MAMR
    Darmowa wersja– skopiuj standardową konfigurację MySQL do folderu
    /Applications/MAMP/conf/my.cnf
    Wersja profesjonalna – otwórz menu PLIK – EDYCJA – Szablon MySQL
  2. w konfiguracji my.cnf usuń linię pomijania sieci
  3. w Ustawieniach Profilera zmień adres hosta bazy danych z localhost na 127.0.0.1

Zmiana portu MySQL w skrypcie

W Neor Profile SQL domyślny port to 4040. Aby zbierać zapytania SQL, musisz zmienić w swoim skrypcie domyślne wartości połączenia z hostem MySQL i port 3306. Poniżej znajdują się przykłady, jak to zrobić.

ciąg znaków connStr = " serwer=127.0.0.1;port=4040; baza danych=TWOJA_BAZA DANYCH;użytkownik=TWÓJ_UŻYTKOWNIK;hasło=TWOJE_HASŁO;";
http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html


Zmiana portu w popularnym CMS-ie

Wordpress

Plik: wp-config.php
Kod: zdefiniuj("DB_HOST", "localhost :4040 ");

PrestaShop

Plik: config/settings.inc.php
Kod: zdefiniuj("_DB_SERVER_", "localhost :4040 ");

OpenCart

Plik: config.php
Kod: zdefiniuj("DB_HOSTNAME", "localhost :4040 ");