Megérintett profil felhasználó php. 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. A MySQL port módosítása a szkriptben

18.05.2020 hírek

Ezt a leckét a regisztrált felhasználók személyes profiljának létrehozásának szeretném szentelni (kiegészítés a Felhasználói regisztráció létrehozása az oldalon című leckéhez). Mostantól a felhasználók hozzáadhatják avatarjukat, megváltoztathatják kereszt- és vezetéknevüket, megadhatják lakóhelyüket és születésnapjukat. Ehhez az asztal felhasználókat Adjunk hozzá néhány mezőt:

Most hozzunk létre egy profiloldalt profile.phpés add hozzá az oldalhoz index.php linket hozzá

visszhang"
Saját profil"; Most magának a profile.php oldalnak a kódja

Profil<?php echo $login; ?>

Profil



"; visszhang" ".$array["felhasználónév"]." ".$array["vezetéknév"]."
"; switch ($array["birthdate_month"])(//A hónap számának átalakítása kis- és nagybetűvé: $month = "január"; break; case "2" : $month = "február"; break; case " 3" : $month = "március"; szünet; case "4" : $month = "április"; szünet; case "5" : $month = "május"; szünet; case "6" : $hónap = "Június "; szünet; eset "7" : $month = "július"; szünet; eset "8" : $month = "augusztus"; szünet; kis eset "9" : $hónap = "szeptember"; szünet; eset " 10" : $month = "október"; break; case "11" : $month = "november"; break; case "12" : $month = "december"; szünet; ) echo "Regisztráció dátuma: ".$array [" reg_date"]."
"; echo "Sex: ".$array["sex"]."
"; echo "Születésnap: ".$array["születési_nap"]." ".$hónap." ".$array["születési_év"]."
"; echo "Ország: ".$array["ország"]."
"; echo "Város: ".$array["város"]."
"; if($_GET["id"] == $id_user)(//Csak a gazdagép szerkesztheti a profilt echo "Profil szerkesztése"; ) )else( print<<Bejárat:
Belépés: Jelszó:
RegisztrációJelszó helyreállítás ITT; ) ?>

Természetesen, ha erre az oldalra lépünk, egy szabványos avatart fogunk látni noAvatar.jpgés esetleg vezeték- és keresztnév, ha a felhasználó megadta a regisztráció során, akkor a többi elem üres lesz. Az oldal legvégén van egy link a profilszerkesztő oldalra. edit.php. Az oldal kódja nagyon könnyű, és adatbeviteli űrlapokból áll. A meglehetősen nagy terjedelem miatt itt nem adom meg teljes egészében, hanem csak egy részét adom meg, teljes egészében átvehető lesz a forrásfájlokban.

Az összes többi űrlap hasonló, és egy kezelőre hivatkozik save_edit.php, amely módosítja az adatbázist. Ennek is elég nagy kódja van, és itt sem adom meg, de csak egy kicsit elmondom, hogy mi történik benne (a teljes kódot a forrásfájlokban is láthatod). Először is létrehozunk egy avatart, természetesen, ha a felhasználó feltöltötte, ellenkező esetben hagyjuk a szokásosat. Ha igen, akkor az első dolgunk, hogy feltöltsük a mappába avatarok(egyébként hozd létre ezt a mappát, és adj neki 755-ös írási engedélyt), miután ellenőrizted az engedélyezett kiterjesztéseket. Ezután egy új kép jön létre a kiválasztott módtól függő formátumban: $rezim = 1 négyzet alakú kép létrehozása $rezim = 2 a kép arányos az eredetivel. A generált kép szélességét is be kell állítani. $wés minőség $ minőség. A létrehozott képet a funkció segítségével jpg formátumban mentjük el imagejpegés generáljon neki egy véletlenszerű nevet. Most törölnünk kell a régi képet, és frissítenünk kell az adatbázist az újjal. Ennyi a képekkel.

A fájl összes többi eleme a felhasználó személyes adatainak frissítésére szolgál, és egyszerű lekérdezések az adatbázisban a mezők frissítéséhez. Frissítés előtt ellenőrizzük a bejövő változók meglétét, és segítségével ellenőrizzük azok biztonságát perjelekés htmlspecialchars. Ha a frissítés sikeres, azonnal átirányítjuk a felhasználót a profiloldalra.
Most azt tesszük, hogy a bejelentkezett felhasználó lássa az összes többi regisztrált felhasználót. Ehhez létrehozunk egy oldalt user.php, amely az összes felhasználót végigjárja.

Í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őt" 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ályelnevezé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. A növekedéssel ez az alkalmazás a „Felhasználó” meghatározása 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: asszociatív tömb, amely egy sort tartalmaz adatbázisunk felhasználói 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. A példában ez az osztály, először 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";

NÁL NÉL ezt a példát 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) ( $eredmény = 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énynek 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ó. PHP függvény Az unset() 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. Ez egy asszociatív tömböt vesz igénybe számos felhasználói információval, és létrehozza új objektum Felhasználó egy tömb átadásával 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. Ezután 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 szerverrő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 alatt futó és kompatibilis DEB csomagot támogatjuk Linux disztribúciók. Megteheti RPM fájlönmagukban és segítséget.

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: Probléma internetkapcsolat 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. Gyűjteni SQL lekérdezések meg kell változtatnia az alapértelmezett MySQL-kapcsolat gazdagépét és a 3306-os port értékeit a szkriptben. 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 ");