Înlăturăm editorul vizual, selecția schemei de culori și alte detalii din zona de administrare WordPress. Crearea unui profil de utilizator înregistrat Profil incorect de utilizator php

18.05.2020 Sfat

Am scris deja despre utilizatorii WordPress (vezi linkul). Dar, ca orice instrument (cu excepția unui baros), Adminimize nu este ideal și nu poate elimina totul complet, deși acest lucru se datorează doar programatorilor WordPress.

Această postare s-a născut spontan, puteți spune mulțumiri invitatului Blow. Esența întrebării sale a fost aceasta (mai mult ca o serie de întrebări):

1. Cum să ascundeți „Selectare” schema de culori" pentru utilizator?

2. Cum să ascundeți „Hotkeys” și „ Editor vizual» în panoul WordPress?

Voi ajunge direct la subiect. Folosind această metodă, puteți ascunde orice elemente pentru utilizator în profilul său și pe alte pagini. Cel mai simplu mod este să editați fișierul afișat!

Pentru „Profil” acesta este un fișier user-edit.php, care se află în folder wp-admin. Trebuie să-l editați cu mare atenție, altfel puteți „plăti” bine pentru experimentele dvs.

Soluție (unificată):

1. Descărcați fișierul pe computer și faceți o copie a acestuia (în siguranță....)

2. Căutăm codul HTML care este responsabil pentru afișarea informațiilor de care avem nevoie.

3. Comentează-l cu atenție și „umple”-l înapoi cu un înlocuitor.

Acum exersați (editați User-edit.php):

Sincer, nu-mi amintesc ce versiune de WP am pe site-ul de testare, dar cu siguranță nu este mai mică decât 2.8.2.

Mai întâi, am descărcat fișierul pe computer și m-am uitat la cod folosind Chrome Code Viewer și am găsit codul necesar în Notepad++.

(două liniuțe pe fiecare parte „-”)

1. Ascundeți „Editorul vizual”

Schimbarea la cod:

—>

ps: nu copiați acest cod, ci schimbați-l singur - există o mare probabilitate de erori!!!

2. Ascundeți „Selectează schema de culori”.

Sper că ați observat diferența dintre coduri - au fost adăugate un total de 7 caractere. Pentru a ascunde acest articol pe care îl căutăm dacă (număr ($_wp_admin_css_colors) > 1)și comentați sub linia tot codul dintre inainte de

3. Ascundeți „Tastele rapide”.

În a doua lecție vom mai scrie două clase și vom termina complet partea internă a scenariului.

Plan

Scopul acestei serii de tutoriale este de a crea o aplicație simplă care să permită utilizatorilor să se înregistreze, să se conecteze, să se deconecteze și să modifice setările. Clasa care va contine toate informatiile despre utilizator se va numi User si va fi definita in fisierul User.class.php. Clasa care va fi responsabilă de intrare/ieșire se va numi UserTools (UserTools.class.php).

Câteva despre denumirea clasei

Eticheta potrivită este de a numi fișierele care descriu o clasă cu același nume ca și clasa în sine. Acest lucru facilitează determinarea scopului fiecărui fișier din folderul clase.

De asemenea, este obișnuit să adăugați .class sau .inc la sfârșitul numelui fișierului clasei. În acest fel definim clar scopul fișierului și putem folosi .htaccess pentru a restricționa accesul la aceste fișiere.

Clasa de utilizator (User.class.php)

Această clasă va defini fiecare utilizator. Pe măsură ce această aplicație crește, definiția „Utilizator” se poate schimba semnificativ. Din fericire, programarea OOP facilitează adăugarea de atribute suplimentare de utilizator.

Constructor

În această clasă vom folosi un constructor - aceasta este o funcție care este apelată automat la crearea următoarei copii a clasei. Acest lucru ne permite să publicăm automat unele atribute după ce proiectul este creat. În această clasă, constructorul va lua un singur argument: o matrice asociativă care conține un rând din tabelul utilizatori al bazei noastre de date.

require_once "DB.class.php"; clasa Utilizator ( public $id; public $nume utilizator; public $hashedPassword; public $email;
public $joinDate;
//Constructorul este apelat atunci când este creat un nou obiect//Ia ca argument o matrice asociativă cu rândul DB. funcția __construct($date) ( $this->id = (isset($date["id"])) ? $data["id"] : ""; $this->username = (isset($data[" username"])) ? $data["username"]: ""; $this->hashedPassword = (isset($data["parola"])) ? $data["parola"]: ""; $this- >email = (isset($date["email"])) ? $data["email"]: ""; $this->joinDate = (isset($data["join_date"])) ? $data[" Data înscrierii"] : ""; )
funcția publică salvare($isNewUser = false) ( //creați un nou obiect de bază de date. $db = new DB(); //dacă utilizatorul este deja înregistrat și //doar îi actualizăm informațiile. if(!$isNewUser ) ( //setează matricea de date $date = array("username" => ""$this->username"", "parolă" => ""$this->hashedPassword"",
"email" => ""$this->email"");
//actualizează rândul din baza de date $db->update($date, "users", "id = ".$this->id); )else ( //dacă utilizatorul este înregistrat pentru prima dată. $date = array("username" => ""$this->username"", "parolă" => ""$this->hashedPassword"" , "email" => ""$this->email"", "join_date" => """.date("Y-m-d H:i:s",time())."""); $this-> id = $db->insert($date, "utilizatori"); $this->joinDate = time(); ) return true; ) ) ?>

Explicaţie

Prima parte a codului, în afara zonei de clasă, asigură că clasa este conectată la baza de date (deoarece clasa User are o funcție care necesită această clasă).

În loc de variabile ale clasei „protejate” (utilizate în prima lecție), le definim drept „publice”. Aceasta înseamnă că orice cod din afara clasei are acces la aceste variabile atunci când lucrează cu obiectul User.

Constructorul preia o matrice în care coloanele din tabel sunt chei. Definim o variabilă de clasă folosind $this->variablename. În exemplul acestei clase, verificăm mai întâi dacă există valoarea unei anumite chei. Dacă da, atunci setăm variabila de clasă la acea valoare. În caz contrar, șirul gol. Codul folosește forma scurtă de notație dacă:

$valoare = (3 == 4) ? „A” : „B”;

În acest exemplu, verificăm dacă 3 este egal cu patru! Dacă da - atunci $valoare = „A”, nu - $valoare = „B”. În exemplul nostru, rezultatul este $value = „B”.

Salvăm informații despre utilizatori în baza de date

Funcția de salvare este utilizată pentru a face modificări în tabelul bazei de date cu valorile curente din obiectul Utilizator. Această funcție folosește clasa DB pe care am creat-o în prima lecție. Folosind variabile de clasă, matricea $data este setată. Dacă datele utilizatorului sunt salvate pentru prima dată, atunci $isNewUser este transmis ca $true (false în mod implicit). Dacă $isNewUser = $true atunci funcția insert() a clasei DB este apelată. În caz contrar, funcția update() este apelată. În ambele cazuri, informațiile din obiectul utilizator vor fi salvate în baza de date.

Clasa UserTools.class.php

Această clasă va conține funcții care sunt legate de utilizatori: login(), logout(), checkUsernameExists() și get(). Dar odată cu extinderea acestei aplicații, puteți adăuga multe altele.

//UserTools.class.php require_once „User.class.php”; require_once "DB.class.php";
clasa UserTools(
// Conectați utilizatorul. Mai întâi verifică dacă //numele de utilizator și parola se potrivesc cu un rând din baza de date. //Dacă are succes, setați variabilele de sesiune //și stocați obiectul utilizator.
conectare la funcția publică ($nume utilizator, $parolă)
{
$hashedPassword = md5($parola); $rezultat = mysql_query("SELECT * FROM users WHERE nume de utilizator = "$nume utilizator" SI parola = "$parola hashed""); if(mysql_num_rows($rezultat) == 1) ( $_SESSION["user"] = serialize(new User(mysql_fetch_assoc($result))); $_SESSION["login_time"] = time(); $_SESSION["logged_in "] = 1; returnează adevărat; )else( returnează fals; ) )
//Deconectați utilizatorul. Distrugeți variabilele de sesiune. funcția publică logout() ( unset($_SESSION["utilizator"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Verificați dacă un nume de utilizator există. //Acest lucru este apelat în timpul înregistrării pentru a vă asigura că toate numele de utilizator sunt unice. funcția publică checkUsernameExists($username) ( $result = mysql_query("select id from users where username="$username""); if(mysql_num_rows($result) == 0) ( return false; )else( return true; )
}
//obține un utilizator //returnează un obiect User. Ia ID-ul utilizatorilor ca o funcție publică de intrare get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result ); ))
?>

funcția login().

Funcția login() este clară după numele ei. Ia argumentele utilizatorului $nume utilizator și $parolă și verifică dacă se potrivesc. Dacă totul se potrivește, creează un obiect User cu toate informațiile și îl salvează în sesiune. Vă rugăm să rețineți că folosim doar funcția PHP serialize(). Acesta creează o versiune stocată a obiectului care poate fi deserializată cu ușurință folosind unserialize(). De asemenea, timpul de conectare va fi salvat. Acesta poate fi folosit ulterior pentru a oferi utilizatorilor informații despre durata șederii pe site.

De asemenea, puteți observa că am setat $_SESSION["logged_in"] la 1. Acest lucru ne permite să verificăm cu ușurință pe fiecare pagină dacă utilizatorul este autentificat. Este suficient să verificați doar această variabilă.

funcția logout().

De asemenea, o funcție simplă. Funcția PHP unset() șterge variabilele din memorie, în timp ce session_destroy() va șterge sesiunea.

funcția checkUsernameExists().

Oricine cunoaște limba engleză va înțelege cu ușurință funcția. Pur și simplu întreabă baza de date dacă a fost folosită sau nu o autentificare similară.

funcția get().

Această funcție preia id-ul unic al utilizatorului și face o interogare la baza de date folosind clasa DB, și anume funcția select(). Va lua o matrice asociativă cu un număr de informații despre utilizator și va crea un nou obiect User, pasând matricea constructorului.

Unde pot folosi asta? De exemplu, dacă creați o pagină care trebuie să afișeze anumite profiluri de utilizator, va trebui să preluați în mod dinamic aceste informații. Iată cum o puteți face: (să spunem că adresa URL este http://www.website.com/profile.php?userID=3)

//notă: mai întâi va trebui să deschideți o conexiune la baza de date. //vezi Partea 1 pentru mai multe informații despre acest lucru. //De asemenea, va trebui să vă asigurați că ați inclus fișierele de clasă.
$tools = new UserTools(); $user = $tools->get($_REQUEST["userID"]); echo „Nume utilizator: „.$utilizator->nume utilizator.””; echo „S-a alăturat la: „.$user->joinDate.””;

Uşor! Este adevarat?

Atingerea finală pe partea serverului: global.inc.php

global.inc.php este necesar pentru fiecare pagină de pe site. De ce? Astfel vom plasa pe pagină toate operațiunile obișnuite de care vom avea nevoie. De exemplu, vom începe session_start(). Se va deschide și conexiunea la baza de date.

require_once „classes/UserTools.class.php”;
require_once "classes/DB.class.php";
//conectează-te la baza de date $db = new DB(); $db->conectare();
//inițializează obiectul UserTools $userTools = new UserTools(); //începe sesiunea
sesiune_start();
//reîmprospătează variabilele de sesiune dacă sunteți autentificat if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id)); ) ?>

Ce face?

Sunt mai multe lucruri care se întâmplă aici. În primul rând, deschidem o conexiune la baza de date.

După conectare, pornim funcția session_start(). Funcția creează o sesiune sau o continuă pe cea curentă dacă utilizatorul este deja autentificat. Deoarece aplicația noastră este concepută pentru ca utilizatorii să se conecteze/deconectați, această funcție este necesară pe fiecare pagină.

Apoi, verificăm dacă utilizatorul este autentificat. Dacă da, vom actualiza $_SESSION[„user”] pentru a reflecta cele mai recente informații despre utilizator. De exemplu, dacă un utilizator își schimbă e-mailul, cel vechi va fi stocat în sesiune. Dar cu actualizarea automată acest lucru nu se va întâmpla.

Asa se incheie partea a doua! Așteptați mâine lecția finală pe acest subiect.

Toate cele bune!

Probleme generale

Î: Profilerul arată activitatea serverului, dar nu arată toate solicitările și sesiunile.

A: Nu uitați să faceți clic pe butonul Start pentru a începe capturarea sesiunilor.

Î: Am reușit să mă conectez la MySQL, dar sesiunile nu sunt afișate.

A: Neor Profile SQL funcționează ca un server proxy. Aceasta înseamnă că pot fi afișate numai sesiunile care trec prin profiler. Aplicația (sau site-ul) dvs. trebuie să fie conectată la profiler ca și cum ar fi un server MySQL obișnuit. Profiler folosește numai conexiuni de intrare TCP. Și apoi veți vedea rezultatul în fila Sesiuni.

Î: De ce unele sesiuni au solicitări cu timp zero?

A: Interogările zero-time sunt executate extrem de rapid, fără latență. Astfel de interogări ar putea fi stocate în cache de SGBD sau executate foarte repede, de exemplu, dacă aveți un server puternic și tabele bine optimizate.

Î: Ce înseamnă % în timp și durată într-o sesiune?

A:„Timp %” este procentul din timpul total de execuție a sesiunii. „Durata %” este procentul celei mai lungi solicitări din sesiune (raport față de cea mai lungă solicitare).

Î: Eu folosesc JetProfiler și este mai ușor de configurat.

A: JetProfiler primește informații de la serverul MySQL prin comanda „show status” și nu poate obține toate informațiile de pe server, deoarece funcționează discret. Neor Profile SQL arată absolut toate interogările la baza de date. Și acest lucru necesită configurarea aplicației pentru a direcționa fluxul de cereri prin profiler.

Î: Butonul Profil din fila SQL nu afișează rezultatul

A: Caracteristica de profilare din editorul SQL funcționează prin comanda SHOW PROFILES, care a fost adăugată la MySQL Community Server începând cu versiunea 5.0.37. Verificați versiunea serverului dvs. MySQL.

Î: Este posibil să faci profiler bazat pe consola?

A: Pentru consolă, utilizați o combinație de jurnalele DBMS și tail, sau instrumente speciale de consolă, dintre care există destul de multe. Neor Profile SQL este o aplicație de sistem de operare cu ferestre care este proiectată pentru a fi plasată pe sistemul dezvoltatorului.

Î: Profiler funcționează, dar din anumite motive nu afișează graficul principal al statisticilor?

A: Graficul principal folosește comanda SHOW STATUS pentru serverul principal. Este posibil să nu aveți permisiunea de a rula această comandă pe server. Asigurați-vă că aveți permisiuni pentru această comandă.

Î: Cum să rulezi programul de instalare în modul silențios?

A: sqlprofiler-4.1.1.exe /S /D:C:Fișiere de program (x86)Neor Profile SQL

Windows

Î: Cum se verifică conexiunea Profiler?

A: Utilizați clientul consolei MySQL pentru a vă conecta la profiler. Dacă vedeți sesiunea dvs. în fila Sesiuni, aceasta înseamnă că totul este configurat corect.
De exemplu:
Apoi rulați o comandă SQL simplă:
arata tabele;
Și uitați-vă la ce s-a întâmplat în fila Sesiuni din profiler.

Linux

Î: Nu mă pot conecta prin localhost.

A: Linux încearcă să asocieze localhost cu o conexiune socket, dar Neor Profile SQL funcționează numai cu conexiuni TCP. Setați adresa serverului în profiler la 127.0.0.1 în loc de localhost. Puteți face același lucru în setările aplicației dvs.
De exemplu:
mysql --host=127.0.0.1 --user=LOGIN --parola=PAROLA --port=4040

Î: Nu mă pot conecta la 127.0.0.1.

A: Verificați tipul de conexiune în aplicația dvs. De asemenea, puteți utiliza tipul de conexiune la socket local, care nu necesită introducerea unei valori de port.

Î: Cum se instalează Neor Profile SQL sub OpenSUSE?

A:În prezent, acceptăm doar pachetul DEB, care rulează pe Ubuntu, Debian și distribuții Linux compatibile. Puteți crea singur un fișier RPM și, prin urmare, puteți ajuta.

Î: De ce nu pot intercepta solicitările Sysbench?

A: Profiler folosește numai conexiuni de intrare TCP. Rulați Sysbench cu parametrii de gazdă și port:
sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=4040--mysql-user=rădăcină --mysql-password=pregătiți parola

Mac OS X

Î: Profilerul nu se poate conecta la serverul MAMP MySQL.

A: Problemă de conexiune la rețea în configurația MySQL:

  1. MAMR
    Versiune gratuită– copiați configurația standard MySQL în folder
    /Applications/MAMP/conf/my.cnf
    Versiune Pro– deschide meniul FILE – EDIT – șablon MySQL
  2. în configurația my.cnf, eliminați linia de ignorare a rețelei
  3. în Setări Profiler, modificați adresa gazdei bazei de date din localhost la 127.0.0.1

Schimbarea portului MySQL în scriptul dvs

În Neor Profile SQL, portul implicit este 4040. Pentru a colecta interogări SQL, trebuie să modificați valorile implicite pentru conectarea la gazda MySQL și portul 3306 în scriptul dvs. Mai jos sunt exemple despre cum să faceți acest lucru.

șir connStr = " server=127.0.0.1;port=4040; baza de date=YOUR_DATABASE;user=YOUR_USER;parola=YOUR_PASSWORD;";
http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html


Schimbarea portului în CMS popular

Wordpress

Fișier: wp-config.php
Cod: define("DB_HOST", "localhost :4040 ");

PrestaShop

Fișier: config/settings.inc.php
Cod: define("_DB_SERVER_", "localhost :4040 ");

OpenCart

Fișier: config.php
Cod: define("DB_HOSTNAME", "localhost :4040 ");