Eltávolítjuk a vizuális szerkesztőt, a színséma kiválasztását és az egyéb részleteket a WordPress adminisztrációs területén. Bejelentkezett felhasználói profil létrehozása Javíthatatlan profil felhasználói php

18.05.2020 Tippek

Írtam már WordPress felhasználókat (nézd meg a linket). De mint minden eszköz (kivéve a kalapácsot), az Adminimize sem tökéletes, és nem tud mindent teljesen eltávolítani, bár ez csak a Vorpress programozóinak köszönhető.

Ez a poszt spontán született, a Blow vendégnek köszönhetjük. Kérdésének lényege a következő volt (inkább egy kérdéssor):

1. Hogyan lehet elrejteni a "Choice színösszeállítás" a felhasználó számára?

2. Hogyan lehet elrejteni a "Gyorsbillentyűket" és a " vizuális szerkesztő» a WordPress irányítópultján?

Rögtön a lényegre térek. Ezzel a módszerrel bármilyen elemet elrejthet a felhasználó számára a profiljában és más oldalakon is. A legegyszerűbb módja a megjelenített fájl szerkesztése!

A "Profil" esetében ez egy fájl user-edit.php, amely a mappában található wp-admin. Nagyon óvatosan kell szerkesztenie, különben jól fizetheti a kísérleteit.

Megoldás (egységes):

1. Töltse le a fájlt a számítógépére, és készítsen róla másolatot (óvatosan ....)

2. Keressük azt a HTML kódot, amely a szükséges információk megjelenítéséért felelős.

3. Óvatosan kommentálja és „töltse fel” egy cserével.

Most gyakorold (a User-edit.php szerkesztése):

Őszintén szólva, nem emlékszem, hogy a WP melyik verziója van a kísérleti oldalon, de semmiképpen sem alacsonyabb, mint 2.8.2.

Először letöltöttem a fájlt egy PC-re, és magát a kódot néztem meg a Chrome Code Viewer segítségével, és megtaláltam a szükséges kódot a Notepad++-ban.

(két kötőjel mindkét oldalon "-")

1. A „Vizuális szerkesztő” elrejtése

Változás kódra:

—>

ps: ne másolja ki ezt a kódot, hanem változtassa meg Önnél - nagy a hibák valószínűsége !!!

2. Rejtse el a "Színséma választása" elemet.

Remélem, észrevetted a különbséget a kódok között – összesen 7 karakter került hozzáadásra. Az elem elrejtéséhez keresünk if (count($_wp_admin_css_colors) > 1)és kommentelje a sor alatt az összes közötti kódot előtt

3. Rejtse el a "Gyorsbillentyűket".

A második leckében még két órát írunk, és teljesen befejezzük a forgatókönyv belső részét.

Terv

Ennek az oktatóanyagnak a célja egy egyszerű alkalmazás létrehozása, amely lehetővé teszi a felhasználók számára a regisztrációt, a bejelentkezést, a kijelentkezést és a beállítások módosítását. Azt az osztályt, amely a felhasználóra vonatkozó összes információt tartalmazni fogja, User néven fogjuk hívni, és a User.class.php fájlban lesz meghatározva. A belépésért/kilépésért felelős osztály neve UserTools (UserTools.class.php).

Egy kicsit az osztálynévadásról

A helyes hang az, hogy az osztályfájlokat ugyanazon a néven nevezzük el, mint magát az osztályt. Így könnyen meghatározható az osztály mappájában lévő egyes fájlok célja.

Az is gyakori, hogy az osztály fájlnevének végére adják a .class vagy .inc karaktereket. Így egyértelműen meghatározzuk a fájl célját, és a .htaccess segítségével korlátozhatjuk a hozzáférést ezekhez a fájlokhoz.

Felhasználói osztály (User.class.php)

Ez az osztály határoz meg minden felhasználót. Az alkalmazás növekedésével a „Felhasználó” definíciója jelentősen megváltozhat. Szerencsére az OOP programozás megkönnyíti további felhasználói attribútumok hozzáadását.

Konstruktőr

Ebben az osztályban a konstruktort fogjuk használni - ez egy olyan függvény, amely automatikusan meghívódik az osztály következő példányának létrehozásakor. Ez lehetővé teszi bizonyos attribútumok automatikus közzétételét a projekt létrehozása után. Ebben az osztályban a konstruktor egyetlen argumentumot vesz fel: egy asszociatív tömböt, amely egy sort tartalmaz az adatbázisunkban lévő felhasználók táblájából.

request_once "db.osztály.php"; osztály Felhasználó ( publikus $id; nyilvános $felhasználónév; nyilvános $hashedPassword; nyilvános $e-mail;
nyilvános $joinDate;
//A konstruktor meghívása új objektum létrehozásakor//Egy asszociatív tömböt vesz fel argumentumként a DB sorral. függvény __construct($data) ( $this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" felhasználónév"])) ? $data["felhasználónév"] : ""; $this->hashedPassword = (isset($data["jelszó"])) ? $data["jelszó"] : ""; $this- >email = (isset($data["email"])) ? $data["email"] : ""; $this->joinDate = (isset($data["csatlakozási_dátum"])) ? $adat[" csatlakozás dátuma"] : ""; )
public function save($isNewUser = false) ( //új adatbázis-objektum létrehozása. $db = new DB(); //ha a felhasználó már regisztrálva van és mi"újra //csak frissítjük az adatait. if(!$isNewUser ) ( //az adattömb beállítása $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"",
"email" => ""$this->email"");
//az adatbázis sorának frissítése $db->update($data, "users", "id = ".$this->id); )else ( //ha a felhasználót először regisztrálják. $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"" , "email" => ""$this->email", "join_date" => """.date("Y-m-d H:i:s",time())."""); $this-> id = $db->insert($adat, "felhasználók"); $this->joinDate = idő(); ) return true; ) ) ?>

Magyarázat

A kód első része az osztályzónán kívül biztosítja az osztály és az adatbázis kapcsolatát (mert a User osztályban van egy függvény, amely ezt az osztályt igényli).

Az 1. leckében használt „védett” osztályváltozók helyett „nyilvánosként” definiáljuk őket. Ez azt jelenti, hogy az osztályon kívüli bármely kód hozzáfér ezekhez a változókhoz, amikor a User objektummal dolgozik.

A konstruktor egy tömböt vesz fel, amelyben a táblázat oszlopai a kulcsok. Az osztályváltozót a $this->variablename használatával definiáljuk. Ennek az osztálynak a példájában mindenekelőtt azt ellenőrizzük, hogy létezik-e egy adott kulcs értéke. Ha igen, akkor az osztályváltozót erre az értékre állítjuk. Ellenkező esetben üres karakterlánc. A kód a forgalom jelölésének rövid formáját használja, ha:

$érték = (3 == 4) ? "A": "B";

Ebben a példában azt ellenőrizzük, hogy 3 egyenlő-e négy! Ha igen - akkor $érték = "A", nem - $érték = "B". Példánkban az eredmény $érték = “B”.

A felhasználók adatainak mentése az adatbázisba

A mentés funkcióval módosítható az adatbázistábla a User objektum aktuális értékeivel. Ez a függvény az első oktatóanyagban létrehozott DB osztályt használja. Osztályváltozók segítségével beállítjuk a $data tömböt. Ha ez az első alkalom, hogy a felhasználót eltárolják, akkor a $isNewUser $true-ként kerül átadásra (az alapértelmezett érték false). Ha $isNewUser = $true, akkor a DB osztály insert() függvénye kerül meghívásra. Ellenkező esetben az update() függvény kerül meghívásra. Mindkét esetben a felhasználói objektum információi az adatbázisban tárolódnak.

Osztály UserTools.class.php

Ez az osztály a felhasználókkal kapcsolatos függvényeket fogja tartalmazni: login(), logout(), checkUsernameExists() és get(). De ennek az alkalmazásnak a bővítésével még sok mást is hozzáadhat.

//UserTools.class.php request_once "User.class.php"; request_once "db.osztály.php";
osztály UserTools(
//A felhasználó bejelentkezése. Először ellenőrzi, hogy a //felhasználónév és a jelszó egyezik-e az adatbázis egy sorával. //Ha sikeres, állítsa be a munkamenet változóit //és tárolja a felhasználói objektumot.
nyilvános funkció bejelentkezés ($felhasználónév, $jelszó)
{
$hashedPassword = md5($jelszó); $result = mysql_query("SELECT * FROM felhasználók WHERE felhasználónév = "$felhasználónév" ÉS jelszó = "$hashedPassword""); if(mysql_szam_sorok($eredmény) == 1) ( $_SESSION["felhasználó"] = serialize(new User(mysql_fetch_assoc($result))); $_SESSION["bejelentkezési_idő"] = idő(); $_SESSION["bejelentkezés "] = 1; return true; )else( return false; ) )
//A felhasználó kijelentkezése. Törölje a munkamenet változóit. public function logout() ( unset($_SESSION["felhasználó"]); unset($_SESSION["bejelentkezési_idő"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Ellenőrizze, hogy létezik felhasználónév. //Ezt a regisztráció során hívják meg, hogy minden felhasználónév egyedi legyen. public function checkUsernameExists($username) ( $result = mysql_query("válasszon azonosítót olyan felhasználóktól ahol username="$username""); if(mysql_num_rows($result) == 0) ( return false; )else( true return; )
}
//felhasználó beszerzése //felhasználói objektumot ad vissza. A felhasználói azonosítót veszi be bemeneti nyilvános függvényként get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result ) ) )
?>

login() függvény

A login() függvény magától értetődő. Felveszi a $felhasználónév és a $password felhasználói argumentumokat, és ellenőrzi, hogy egyeznek-e. Ha minden egyezik, létrehoz egy felhasználói objektumot az összes információval, és eltárolja a munkamenetben. Ne feledje, hogy csak a PHP serialize() függvényét használjuk. Létrehozza az objektum tartós változatát, amely könnyen megszüntethető az unserialize() segítségével. A bejelentkezési idő is mentésre kerül. Ez később felhasználható arra, hogy a felhasználók tájékoztatást kapjanak az oldalon való tartózkodásuk időtartamáról.

Azt is észreveheti, hogy a $_SESSION["logged_in"] értéket 1-re állítjuk. Ezzel minden oldalon könnyen ellenőrizhetjük, hogy a felhasználó be van-e jelentkezve. Elég csak ezt a változót ellenőrizni.

logout() függvény

Szintén egyszerű funkció. A PHP unset() függvénye törli a változókat a memóriában, míg a session_destroy() törli a munkamenetet.

checkUsernameExists() függvény

Aki tud angolul, az könnyen megérti a funkciót. Egyszerűen lekérdezi az adatbázist, hogy használ-e ilyen bejelentkezést vagy sem.

get() függvény

Ez a függvény egyedi felhasználói azonosítót vesz fel, és lekérdezi az adatbázist a DB osztály, nevezetesen a select() függvény segítségével. Egy asszociatív tömböt vesz igénybe néhány felhasználói információval, és létrehoz egy új felhasználói objektumot, átadva a tömböt a konstruktornak.

Hol lehet használni? Például, ha olyan oldalt hoz létre, amelyen meghatározott felhasználói profilokat kell megjeleníteni, akkor ezeket az információkat dinamikusan kell átvennie. Ezt így teheti meg: (tegyük fel, hogy az URL http://www.website.com/profile.php?felhasználóazonosító=3)

//megjegyzés: először meg kell nyitnia egy adatbázis-kapcsolatot. //Erről további információkért lásd az 1. részt. //Győződjön meg arról is, hogy az osztály fájljait tartalmazza.
$tools = new UserTools(); $felhasználó = $eszközök->get($_REQUEST["felhasználói azonosító"]); echo "Felhasználónév: ".$felhasználó->felhasználónév.""; echo "Csatlakozás: ".$user->joinDate."";

Könnyen! Igazság?

Szerveroldali befejezés: global.inc.php

A global.inc.php a webhely minden oldalához szükséges. Miért? Így minden szokásos műveletet elhelyezünk az oldalon, amire szükségünk van. Például elindítjuk a session_start() parancsot. Az adatbázis-kapcsolat is megnyílik.

request_once "classes/UserTools.class.php";
request_once "classes/DB.class.php";
//csatlakozás az adatbázishoz $db = new DB(); $db->connect();
//inicializálja a UserTools objektumot $userTools = new UserTools(); //indítsa el a munkamenetet
session_start();
//frissítse a munkamenet változóit, ha be van jelentkezve if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id)); ) ?>

Mit csinál?

Itt több dolog is zajlik. Először is megnyitunk egy kapcsolatot az adatbázissal.

Csatlakozás után elindítjuk a session_start() függvényt. A funkció létrehoz egy munkamenetet, vagy folytatja az aktuálisat, ha a felhasználó már be van jelentkezve. Mivel alkalmazásunkat a felhasználók be- és kijelentkezésére tervezték, ez a funkció minden oldalon kötelező.

Ezután ellenőrizzük, hogy a felhasználó be van-e jelentkezve. Ha igen, akkor frissítjük a $_SESSION["felhasználó"] fájlt, hogy megjelenítse a legfrissebb felhasználói információkat. Például, ha egy felhasználó megváltoztatja az e-mail címét, a munkamenet továbbra is tárolja a régit. De az automatikus frissítés segítségével ez nem fog megtörténni.

Ezzel véget is ért a második rész! Holnap várható az utolsó óra ebben a témában.

Minden jót!

Általános kérdések

K: A profilkészítő megjeleníti a szervertevékenységet, de nem jeleníti meg az összes kérést és munkamenetet.

V: Ne felejtsen el a Start gombra kattintani a munkamenetek rögzítésének megkezdéséhez.

K: Lehetett csatlakozni a MySQL-hez, de a munkamenetek nem jelennek meg.

V: A Neor Profile SQL proxyszerverként működik. Ez azt jelenti, hogy csak a profilkészítőn áthaladó munkamenetek jeleníthetők meg. Az alkalmazásnak (vagy webhelynek) képesnek kell lennie a profilkészítőhöz, mint egy normál MySQL-kiszolgálóhoz. A profilkészítő csak TCP bejövő kapcsolatokat használ. És akkor látni fogja az eredményt a Munkamenetek lapon.

K: Miért nulla idővel rendelkező kérések vannak bizonyos munkamenetekben?

V: A nulla idejű kérések rendkívül gyorsak, késedelem nélkül. Az ilyen lekérdezéseket a DBMS gyorsítótárba helyezheti, vagy nagyon gyorsan végrehajthatja, például ha nagy teljesítményű szerverrel és jól optimalizált táblákkal rendelkezik.

K: Mit jelent a % az idő és az időtartam tekintetében egy munkamenetben?

V: Az „idő %” a munkamenet teljes végrehajtási idejének százalékos aránya. Az „időtartam %” a munkamenet leghosszabb kérésének töredéke (a leghosszabb kérelemhez viszonyított arány).

K: JetProfilert használok, és könnyebben beállítható.

V: A JetProfiler információkat kap a MySQL szervertől a "show status" paranccsal, és nem tud minden információt megszerezni a szerveren, mivel diszkréten működik. A Neor Profile SQL abszolút az összes adatbázis-lekérdezést megjeleníti. Ehhez pedig be kell állítani az alkalmazást, hogy a kérésfolyamat a profilkészítőn keresztül irányítsa.

K: Az SQL lap Profil gombja nem jelenít meg eredményt

V: Az SQL-szerkesztő profilalkotási funkciója a SHOW PROFILES paranccsal működik, amely az 5.0.37-es verzió óta hozzáadódik a MySQL Community Serverhez. Ellenőrizze a MySQL szerver verzióját.

K: Lehetséges profilkészítő konzolt készíteni?

V: A konzolhoz használjon egy csomó DBMS-t és tail log-ot, vagy speciális konzoleszközöket, amelyekből elég sok van. A Neor Profile SQL egy ablakos operációs rendszer alkalmazás, amelyet fejlesztői rendszeren való használatra szántak.

K: A profilkészítő működik, de valamiért nem jeleníti meg a fő statisztikai grafikont?

V: A fő grafikon a SHOW STATUS parancsot használja a fő szerverhez. Előfordulhat, hogy nincs engedélye a parancs futtatására a kiszolgálón. Győződjön meg arról, hogy rendelkezik jogosultságokkal ehhez a parancshoz.

K: Hogyan kell futtatni a telepítőt csendes módban?

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

ablakok

K: Hogyan ellenőrizhető a profiler kapcsolat?

V: A profilkészítőhöz való csatlakozáshoz használja a MySQL konzolklienst. Ha a munkamenetet látja a Munkamenetek lapon, az azt jelenti, hogy minden megfelelően van beállítva.
Például:
Ezután futtasson egy egyszerű SQL parancsot:
táblázatok megjelenítése;
És nézze meg, mi történt a profilozó Munkamenetek lapján.

Linux

K: Nem lehet csatlakozni localhost-on keresztül.

V: A Linux megpróbálja társítani a localhost-ot egy socket kapcsolattal, de a Neor Profile SQL csak TCP-kapcsolatokkal működik. Állítsa be a szerver címét a profilkészítőben 127.0.0.1-re localhost helyett. Tegye ugyanezt az alkalmazás beállításaiban.
Például:
mysql --host=127.0.0.1 --user=BEJELENTKEZÉS --password=JELSZÓ --port=4040

K: Nem lehet csatlakozni a 127.0.0.1-hez.

V: Ellenőrizze a kapcsolat típusát az alkalmazásban. Használhatja a helyi socket csatlakozási típust is, amelyhez nincs szükség portértékre.

K: Hogyan telepítsem a Neor Profile SQL-t OpenSUSE alatt?

V: Jelenleg csak az Ubuntu, Debian és kompatibilis Linux disztribúciók alatt futó DEB csomagot támogatjuk. Ön is létrehozhat egy RPM-fájlt, és segíthet.

K: Miért nem tudom elfogni a Sysbench kéréseket?

V: A profilkészítő csak TCP bejövő kapcsolatokat használ. Futtassa a Sysbench programot gazdagép- és portparaméterekkel:
sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=4040--mysql-user=root --mysql-password=jelszó előkészítése

Mac OS X

K: A profilkészítő nem tud csatlakozni a MAMP MySQL szerverhez.

V: Hálózati kapcsolati probléma a MySQL konfigurációban:

  1. MAMR
    Ingyenes verzió– másolja a szabványos MySQL konfigurációt a mappába
    /Applications/MAMP/conf/my.cnf
    Pro verzió- nyissa meg a FÁJL - SZERKESZTÉS - MySQL sablon menüt
  2. a my.cnf konfigurációban távolítsa el a skip-networking sort
  3. a profiler beállításaiban módosítsa a DB gazdagép címét localhost-ról 127.0.0.1-re

A MySQL port módosítása a szkriptben

A Neor Profile SQL-ben az alapértelmezett port a 4040. SQL-lekérdezések gyűjtéséhez meg kell változtatnia a szkriptben a gazdagép és a 3306-os port alapértelmezett MySQL-kapcsolati értékét. Az alábbiakban példákat láthat ennek végrehajtására.

string connStr = " szerver=127.0.0.1;port=4040; adatbázis=YOUR_ADATBÁZIS;felhasználó=YOUR_FELHASZNÁLÓ;jelszó=JELSZAVAD;";
http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html


Portváltás a népszerű CMS-ben

Wordpress

Fájl: wp-config.php
Kód: define("DB_HOST", "localhost :4040 ");

PrestaShop

Fájl: config/settings.inc.php
Kód: define("_DB_SERVER_", "localhost :4040 ");

nyitott kocsi

Fájl: config.php
Kód: define("DB_HOSTNAME", "localhost :4040 ");