Odstranimo vizualni urejevalnik, izbiro barvne sheme in druge podrobnosti v skrbniškem območju WordPress. Odstranimo vizualni urejevalnik, izbiro barvne sheme in druge podrobnosti v skrbniški plošči WordPress. Skrijemo »Vroče tipke«.

To lekcijo bi rad posvetil ustvarjanju osebnega profila za registrirane uporabnike (dodatek k lekciji Ustvarjanje registracije uporabnika na spletnem mestu). Zdaj bodo uporabniki lahko dodali svoj avatar, spremenili ime in priimek, dodali kraj bivanja in rojstni dan. Če želite to narediti, v tabeli uporabniki dodajmo nekaj polj:

Zdaj pa ustvarimo profilno stran profile.php in ga dodajte na stran index.php povezava do njega

odmev"
Moj profil"; Zdaj koda za samo stran profile.php

Profil<?php echo $login; ?>

Profil



"; odmev " ".$matrika["ime_uporabnika"]." ".$matrika["priimek"]."
"; switch ($array["birthdate_month"])(//Pretvori številko meseca v ime case "1" : $month = "January"; break; case "2" : $month = "february"; break; case "3" = "marec"; case "4" = "april"; case "5" = "maj"; "junij"; primer "julij"; primer "8"; primer "9"; 10" : $month = "oktober"; odmor; case "11" : $month = "november"; odmor; $month = "december"; echo "Datum registracije: ".$array[" reg_date"]."
"; echo "Spol: ".$array["spol"]."
"; echo "Rojstni dan: ".$array["birthdate_day"]." ".$mesec." ".$array["leto_rojstva"]."
"; echo "Država: ".$array["država"]."
"; echo "Mesto: ".$array["mesto"]."
"; if($_GET["id"] == $id_user)(//Samo lastnik lahko ureja profil echo "Uredi profil"; ) )else( natisni<<Vhod:
Vpiši se: geslo:
Registracija Obnovitev gesla TUKAJ; ) ?>

Seveda, ko gremo na to stran, bomo videli standardni avatar noAvatar.jpg ter po možnosti ime in priimek, če ju je uporabnik navedel ob registraciji, bodo ostale postavke prazne. Čisto na koncu te strani je povezava do strani za urejanje profila uredi.php. Koda za to stran je zelo lahka in je sestavljena iz obrazcev za vnos podatkov. Zaradi precej velikega obsega ga tukaj ne bom dal v celoti, ampak ga bom dal le del;

Vse druge oblike so podobne in se nanašajo na enega upravljavca save_edit.php, ki bo spremenil bazo podatkov. Ima tudi precej veliko kodo in je tudi ne bom predstavil tukaj, ampak vam bom le povedal nekaj o tem, kaj se v njej dogaja (celotno kodo lahko najdete tudi v izvornih datotekah). Najprej ustvarimo avatar, če ga je uporabnik seveda naložil, sicer pustimo standardnega. Če je temu tako, ga najprej prenesemo v mapo avatarji(mimogrede, ustvarite to mapo in ji dajte dovoljenja za pisanje 755) po preverjanju dovoljenih razširitev. Nato se ustvari nova slika s formatom, ki je odvisen od izbranega načina: $rezim = 1 nastane kvadratna slika, $rezim = 2 slika je proporcionalna originalu. Prav tako morate nastaviti širino ustvarjene slike $w in kakovost $kakovost. Ustvarjeno sliko shranimo v formatu jpg s funkcijo imagejpeg in ustvarite naključno ime zanj. Zdaj morate izbrisati staro sliko in jo v bazi podatkov posodobiti z novo. To je vse za slike.

Vsi drugi elementi v tej datoteki so namenjeni posodobitvi osebnih podatkov o uporabniku in so preproste poizvedbe v bazi podatkov za posodobitev polj. Pred posodobitvijo se preveri obstoj vhodnih spremenljivk in njihova varnost z uporabo stripslashes in htmlspecialchars. Če je posodobitev uspešna, uporabnika takoj preusmerimo na profilno stran.
Zdaj pa poskrbimo, da lahko prijavljeni uporabnik vidi vse ostale registrirane uporabnike. Če želite to narediti, ustvarimo stran uporabnik.php, ki bo prikazal vse uporabnike v zanki.

O uporabnikih WordPressa sem že pisal (glej povezavo). Toda kot vsako orodje (razen šeleshamer), Adminimize ni idealno in ne more popolnoma odstraniti vsega, čeprav je to zasluga programerjev WordPressa.

Ta objava se je rodila spontano, za kar se lahko zahvalite gostu Blowu. Bistvo njegovega vprašanja je bilo naslednje (bolj kot serija vprašanj):

1. Kako skriti "Izberi" barvna shema" za uporabnika?

2. Kako skriti »Hot Keys« in »Visual Editor« na plošči WordPress?

Preidem takoj k bistvu. S to metodo lahko skrijete vse elemente za uporabnika v njegovem profilu in tudi na drugih straneh. Najlažji način je urejanje prikazne datoteke!

Za »Profil« je to datoteka uporabnik-urejanje.php, ki je v mapi wp-admin. Urediti ga morate zelo previdno, sicer lahko svoje poskuse dobro "plačate".

Rešitev (enotno):

1. Prenesite datoteko na svoj računalnik in jo kopirajte (varno....)

2. Iščemo kodo HTML, ki je odgovorna za prikaz informacij, ki jih potrebujemo.

3. Previdno ga komentirajte in ga "napolnite" nazaj z zamenjavo.

Zdaj vadite (uredite User-edit.php):

Iskreno povedano, ne spomnim se, katero različico WP imam na testnem mestu, vendar zagotovo ni nižja od 2.8.2.

Najprej sem prenesel datoteko v svoj računalnik in si ogledal kodo s Chrome Viewerjem kode ter našel zahtevano kodo v Notepad++.

(dva pomišljaja na vsaki strani »-«)

1. Skrijte »Vizualni urejevalnik«

Spremeni v kodo:

—>

ps: te kode ne kopirajte, ampak jo spremenite sami - obstaja velika verjetnost napak!!!

2. Skrijte »Izberi barvno shemo«.

Upam, da ste opazili razliko med kodama - dodanih je bilo skupno 7 znakov. Da skrijemo ta predmet, ki ga iščemo če (štetje($_wp_admin_css_colors) > 1) in komentirajte pod vrstico vso kodo med prej

3. Skrij »Hot Keys«.

V drugi lekciji bomo napisali še dve uri in v celoti dokončali notranji del skripte.

Načrtujte

Cilj te serije vadnic je ustvariti preprosto aplikacijo, ki uporabnikom omogoča registracijo, prijavo, odjavo in spreminjanje nastavitev. Razred, ki bo vseboval vse podatke o uporabniku, se bo imenoval User in bo definiran v datoteki User.class.php. Razred, ki bo odgovoren za vnos/izhod, se bo imenoval Uporabniška orodja (UserTools.class.php).

Nekaj ​​o poimenovanju razredov

Pravilen bonton je, da datoteke, ki opisujejo razred, poimenujete z enakim imenom kot sam razred. Tako je enostavno določiti namen vsake datoteke v mapi razredov.

Prav tako je običajno dodati .class ali .inc na konec imena datoteke razreda. Na ta način jasno določimo namen datoteke in lahko uporabimo .htaccess za omejitev dostopa do teh datotek.

Uporabniški razred (User.class.php)

Ta razred bo definiral vsakega uporabnika. Z rastjo to aplikacijo Definicija "uporabnika" se lahko bistveno spremeni. Na srečo OOP programiranje olajša dodajanje dodatnih uporabniških atributov.

Konstruktor

V tem razredu bomo uporabljali konstruktor - to je funkcija, ki se samodejno pokliče pri ustvarjanju naslednje kopije razreda. To nam omogoča samodejno objavo nekaterih atributov, potem ko je projekt ustvarjen. V tem razredu bo konstruktor prevzel en sam argument: asociativno polje, ki vsebuje eno vrstico iz tabele uporabnikov naše baze podatkov.

require_once "DB.class.php"; razred Uporabnik ( public $id; public $username; public $hashedPassword; public $email;
public $joinDate;
//Konstruktor se pokliče, ko je ustvarjen nov objekt//Vzame asociativno polje z vrstico DB kot argument. funkcija __construct($data) ( $this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" uporabniško ime"])) ? $data["uporabniško ime"] : ""; $this->hashedPassword = (isset($data["geslo"])) ? $data["geslo"] : ""; $this- >email = (isset($data["email"])) $data["email"] : ""; $this->joinDate = (isset($data["join_date"])) $data[" join_date "] : ""; )
javna funkcija save($isNewUser = false) ( //ustvari nov objekt baze podatkov. $db = new DB(); //če je uporabnik že registriran in //samo posodabljamo njegove podatke. if(!$isNewUser ) ( //nastavi niz podatkov $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"",
"e-pošta" => ""$this->e-pošta"");
//posodobi vrstico v bazi $db->update($data, "users", "id = ".$this->id); )else ( //če se uporabnik registrira prvič. $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(); ) ) ?>

Razlaga

Prvi del kode, zunaj cone razreda, zagotavlja, da je razred povezan z bazo podatkov (ker ima razred Uporabnik funkcijo, ki zahteva ta razred).

Namesto spremenljivk razreda “protected” (uporabljenih v 1. lekciji) jih definiramo kot “public”. To pomeni, da ima katera koli koda zunaj razreda dostop do teh spremenljivk pri delu z uporabniškim objektom.

Konstruktor vzame matriko, v kateri so stolpci v tabeli ključi. Spremenljivko razreda definiramo z $this->imespremenljivke. V primeru tega razreda najprej preverimo, ali vrednost določenega ključa obstaja. Če da, potem spremenljivko razreda nastavimo na to vrednost. V nasprotnem primeru prazen niz. Koda uporablja kratko obliko zapisa, če:

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

IN v tem primeru preverimo, ali je 3 enako štiri! Če da - potem $value = "A", ne - $value = "B". V našem primeru je rezultat $value = "B".

Podatke o uporabnikih shranjujemo v bazi podatkov

Funkcija shranjevanja se uporablja za spreminjanje tabele baze podatkov s trenutnimi vrednostmi v objektu Uporabnik. Ta funkcija uporablja razred DB, ki smo ga ustvarili v prvi vadnici. Z uporabo spremenljivk razreda se nastavi niz $data. Če se uporabniški podatki shranjujejo prvič, se $isNewUser posreduje kot $true (privzeto false). Če je $isNewUser = $true, se pokliče funkcija insert() razreda DB. V nasprotnem primeru se pokliče funkcija update(). V obeh primerih bodo informacije iz uporabniškega objekta shranjene v bazi podatkov.

Razred UserTools.class.php

Ta razred bo vseboval funkcije, ki so povezane z uporabniki: login(), logout(), checkUsernameExists() in get(). Toda z razširitvijo te aplikacije lahko dodate še veliko več.

//UserTools.class.php require_once "User.class.php"; require_once "DB.class.php";
razred Uporabniška orodja(
//Prijava uporabnika. Najprej preveri, ali se //uporabniško ime in geslo ujemata z vrstico v bazi podatkov. //Če je uspešno, nastavite spremenljivke seje //in shranite uporabniški objekt znotraj.
prijava v javno funkcijo ($uporabniško ime, $geslo)
{
$hashedPassword = md5($geslo); $result = mysql_query("SELECT * FROM users WHERE uporabniško ime = "$uporabniško ime" IN geslo = "$hashedPassword""); if(mysql_num_rows($result) == 1) ( $_SESSION["user"] = serialize(new User(mysql_fetch_assoc($result))); $_SESSION["login_time"] = time(); $_SESSION["logged_in "] = 1; vrni resnično; )else( vrni napačno; ) )
//Odjava uporabnika. Uniči spremenljivke seje. javna funkcija odjava() ( unset($_SESSION["user"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Preverite, če uporabniško ime obstaja. //To se kliče med registracijo, da se zagotovi, da so vsa uporabniška imena edinstvena. javna funkcija checkUsernameExists($username) ( $rezultat = mysql_query("izberi ID od uporabnikov, kjer je uporabniško ime="$uporabniško ime""); if(mysql_num_rows($result) == 0) ( return false; )else( return true; )
}
//dobi uporabnika //vrne objekt uporabnika. ID uporabnika vzame kot vhodno javno funkcijo get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result ); ))
?>

funkcija login().

Funkcija login() je jasna že po imenu. Vzame uporabniška argumenta $uporabniško ime in $geslo ter preveri, ali se ujemata. Če se vse ujema, ustvari uporabniški objekt z vsemi informacijami in ga shrani v sejo. Upoštevajte, da uporabljamo samo funkcijo PHP serialize(). Ustvari shranjeno različico predmeta, ki jo je mogoče preprosto unserializirati z unserialize(). Shranjen bo tudi čas prijave. To se lahko kasneje uporabi za zagotavljanje informacij uporabnikom o dolžini bivanja na spletnem mestu.

Morda boste tudi opazili, da smo $_SESSION["logged_in"] nastavili na 1. To nam omogoča, da na vsaki strani enostavno preverimo, ali je uporabnik prijavljen. Dovolj je, da preverite samo to spremenljivko.

funkcija odjava().

Tudi preprosta funkcija. Funkcija PHP unset() počisti spremenljivke v pomnilniku, medtem ko bo session_destroy() izbrisala sejo.

funkcijo checkUsernameExists().

Kdor zna angleško, bo zlahka razumel funkcijo. Bazo podatkov preprosto vpraša, ali je bila uporabljena podobna prijava ali ne.

funkcijo get().

Ta funkcija vzame edinstveni ID uporabnika in izvede poizvedbo v bazi podatkov z uporabo razreda DB, in sicer funkcije select(). Vzel bo asociativno matriko s številnimi uporabniškimi informacijami in ustvaril nov uporabniški objekt, ki bo matriko posredoval konstruktorju.

Kje lahko to uporabim? Na primer, če ustvarite stran, ki mora prikazati določene uporabniške profile, boste morali te podatke pridobiti dinamično. To lahko storite tako: (recimo, da je URL http://www.website.com/profile.php?userID=3)

//opomba: najprej boste morali odpreti povezavo z bazo podatkov. //za nadaljnje informacije o tem glejte 1. del. //Prav tako se boste morali prepričati, da ste vključili datoteke razreda.
$tools = nova uporabniška orodja(); $user = $tools->get($_REQUEST["userID"]); echo "Uporabniško ime: ".$user->uporabniško ime.""; echo "Pridružil se: ".$user->joinDate."";

Enostavno! Ali je res?

Zadnji dotik na strani strežnika: global.inc.php

global.inc.php je potreben za vsako stran na spletnem mestu. Zakaj? Tako bomo vse običajne operacije, ki jih bomo potrebovali, postavili na stran. Na primer, zagnali bomo session_start(). Odprla se bo tudi povezava z bazo podatkov.

require_once "razredi/UserTools.class.php";
require_once "razredi/DB.class.php";
//poveži se z bazo podatkov $db = new DB(); $db->poveži();
//inicializiraj objekt UserTools $userTools = new UserTools(); //začetek seje
session_start();
//osveži spremenljivke seje, če je prijavljen if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id) ) ?>

Kaj dela?

Tu se dogaja več stvari. Najprej odpremo povezavo do podatkovne baze.

Po vzpostavitvi povezave zaženemo funkcijo session_start(). Funkcija ustvari sejo ali nadaljuje trenutno, če je uporabnik že prijavljen. Ker je naša aplikacija zasnovana za prijavo/odjavo uporabnikov, je ta funkcija obvezna na vsaki strani.

Nato preverimo, ali je uporabnik prijavljen. Če je tako, bomo posodobili $_SESSION["user"], da bo odražal najnovejše podatke o uporabniku. Na primer, če uporabnik spremeni svoj e-poštni naslov, bo stari shranjen v seji. Toda s samodejno posodobitvijo se to ne bo zgodilo.

S tem se zaključuje drugi del! Jutri počakajte na zadnjo lekcijo na to temo.

Vse najboljše!

Splošna vprašanja

V: Profiler prikazuje dejavnost strežnika, vendar ne prikazuje vseh zahtev in sej.

A: Ne pozabite klikniti gumba Start, da začnete zajemati seje.

V: Uspelo mi je vzpostaviti povezavo z MySQL, vendar seje niso prikazane.

A: Neor Profile SQL deluje kot proxy strežnik. To pomeni, da so lahko prikazane samo seje, ki potekajo skozi profiler. Vaša aplikacija (ali spletno mesto) mora biti povezana s profilerjem, kot da bi bil običajen strežnik MySQL. Profiler uporablja samo dohodne povezave TCP. Nato boste videli rezultat na zavihku Seje.

V: Zakaj imajo nekatere seje zahteve z ničelnim časom?

A: Poizvedbe z ničelnim časom se izvedejo izjemno hitro brez zakasnitve. Takšne poizvedbe lahko predpomni DBMS ali pa se izvedejo zelo hitro, na primer, če imate zmogljiv strežnik in dobro optimizirane tabele.

V: Kaj pomeni % v času in trajanju seje?

A:»Čas %« je odstotek celotnega časa izvajanja seje. »Trajanje %« je odstotek najdaljše zahteve v seji (razmerje z najdaljšo zahtevo).

V: Uporabljam JetProfiler in ga je lažje nastaviti.

A: JetProfiler prejema informacije od strežniki MySQL prek ukaza "show status" in ne more pridobiti vseh informacij na strežniku, saj deluje diskretno. Neor Profile SQL prikazuje absolutno vse poizvedbe v bazi podatkov. In to zahteva konfiguracijo vaše aplikacije za usmerjanje toka zahtev skozi profiler.

V: Gumb Profil na zavihku SQL ne prikaže rezultata

A: Funkcija profiliranja v urejevalniku SQL deluje prek ukaza SHOW PROFILES, ki je bil dodan strežniku skupnosti MySQL od različice 5.0.37. Preverite svojo različico strežnika MySQL.

V: Ali je mogoče profiler narediti konzolno zasnovano?

A: Za konzolo uporabite kombinacijo DBMS logov in repa ali pa posebna konzolna orodja, ki jih je kar nekaj. Neor Profile SQL je aplikacija OS z okni, ki je zasnovana za namestitev v sistem razvijalca.

V: Profiler deluje, vendar iz neznanega razloga ne prikaže glavnega grafa statistike?

A: Glavni graf uporablja ukaz SHOW STATUS za glavni strežnik. Morda nimate dovoljenja za izvajanje tega ukaza na strežniku. Preverite, ali imate dovoljenja za ta ukaz.

V: Kako zagnati namestitveni program v tihem načinu?

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

Windows

V: Kako preveriti povezavo Profilerja?

A: Za povezavo s profilerjem uporabite odjemalca konzole MySQL. Če vidite svojo sejo na zavihku Seje, to pomeni, da je vse pravilno konfigurirano.
Na primer:
Potem naredi preprost SQL ukaz:
razstavne mize;
In poglejte, kaj se je zgodilo na zavihku Seje v profilerju.

Linux

V: Ne morem se povezati prek lokalnega gostitelja.

A: Linux poskuša lokalnega gostitelja povezati s povezavo vtičnice, vendar Neor Profile SQL deluje samo s povezavami TCP. Naslov strežnika v profilerju nastavite na 127.0.0.1 namesto na localhost. Enako lahko storite v nastavitvah aplikacije.
Na primer:
mysql --host=127.0.0.1 --user=PRIJAVA --password=GESLO --port=4040

V: Ne morem se povezati z 127.0.0.1.

A: Preverite vrsto povezave v svoji aplikaciji. Uporabite lahko tudi vrsto lokalne vtičnice, ki ne zahteva vnosa vrednosti vrat.

V: Kako namestiti Neor Profile SQL pod OpenSUSE?

A: Trenutno podpiramo samo paket DEB, ki deluje na Ubuntuju, Debianu in združljivih. Linux distribucije. Datoteko RPM lahko naredite sami in s tem pomagate.

V: Zakaj ne morem prestreči zahtev Sysbench?

A: Profiler uporablja samo dohodne povezave TCP. Zaženite Sysbench s parametri gostitelja in vrat:
sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=4040--mysql-user=root --mysql-password=priprava gesla

Mac OS X

V: Profiler se ne more povezati s strežnikom MAMP MySQL.

A: Problem omrežno povezavo v konfiguraciji MySQL:

  1. MAMR
    Brezplačna različica– kopirajte standardno konfiguracijo MySQL v mapo
    /Applications/MAMP/conf/my.cnf
    Pro različica – odprite meni FILE – EDIT – MySQL predloga
  2. v konfiguraciji my.cnf odstranite vrstico skip-networking
  3. v nastavitvah Profilerja spremenite naslov gostitelja baze podatkov iz localhost v 127.0.0.1

Spreminjanje vrat MySQL v vašem skriptu

V Neor Profile SQL so privzeta vrata 4040. Za zbiranje poizvedb SQL morate spremeniti privzete vrednosti za povezovanje z gostiteljem MySQL in vrati 3306 v vašem skriptu. Spodaj so primeri, kako to storiti.

niz connStr = " strežnik=127.0.0.1;vrata=4040; baza podatkov=VAŠA_BAZA_PODATKOV;uporabnik=VAŠ_UPORABNIK;geslo=VAŠE_GESLO;";
http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html


Spreminjanje vrat v priljubljenem CMS

Wordpress

Datoteka: wp-config.php
Koda: define("DB_HOST", "localhost :4040 ");

PrestaShop

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

OpenCart

Datoteka: config.php
Koda: define("DB_HOSTNAME", "localhost :4040 ");