Dotaknuo profil korisnika php. Uklanjamo vizualni uređivač, odabir sheme boja i druge detalje u WordPress administratorskom području. Promjena MySQL priključka u vašoj skripti

18.05.2020 Vijesti

Želio bih ovu lekciju posvetiti stvaranju osobnog profila za registrirane korisnike (dodatak lekciji Stvaranje registracije korisnika na web mjestu). Sada će korisnici moći dodati svoj avatar, promijeniti ime i prezime, dodati mjesto stanovanja i rođendan. Da biste to učinili, u tablici korisnika dodajmo nekoliko polja:

Kreirajmo sada profilnu stranicu profil.php i dodajte ga na stranicu indeks.php poveznica na njega

Jeka"
Moj profil"; Sada kod za samu stranicu profile.php

Profil<?php echo $login; ?>

Profil



"; jeka " ".$array["name_user"]." ".$array["prezime"]."
"; switch ($array["birthdate_month"])(//Pretvori broj mjeseca u naziv case "1" : $month = "siječanj"; break; case "2" : $month = "february"; break; case " 3" : $month = "ožujak"; break; case "4" : $month = "travanj"; break; case "5" : $month = "svibanj"; break; case "6" : $month = "Lipanj "; stanka; slučaj "7" : $mjesec = "srpanj"; stanka; slučaj "8" : $mjesec = "kolovoz"; stanka; slučaj "9" : $mjesec = "rujan"; stanka; slučaj " 10" : $month = "listopad"; pauza; case "11" : $month = "studeni"; pauza; case "12" : $mjesec = "prosinac"; pauza; ) echo "Datum registracije: ".$array [" reg_date"]."
"; echo "Spol: ".$array["spol"]."
"; echo "Rođendan: ".$array["birthdate_day"]." ".$mjesec." ".$array["datum_rođenja_godina"]."
"; echo "Država: ".$array["country"]."
"; echo "Grad: ".$array["grad"]."
"; if($_GET["id"] == $id_user)(//Samo vlasnik može uređivati ​​profil echo "Uredi profil"; ) )else( ispis<<Ulaz:
Prijaviti se: Lozinka:
Registracija Vraćanje lozinke OVDJE; ) ?>

Naravno, odlaskom na ovu stranicu vidjet ćemo standardni avatar noAvatar.jpg te eventualno ime i prezime, ako ih je korisnik naveo prilikom registracije, ostale stavke će biti prazne. Na samom kraju ove stranice nalazi se poveznica na stranicu za uređivanje profila uredi.php. Kôd za ovu stranicu je vrlo lagan i sastoji se od obrazaca za unos podataka. Zbog dosta velikog volumena, neću ga ovdje dati u cijelosti, već ću dati samo dio, u cijelosti će se moći dobiti u izvornim datotekama.

Svi ostali oblici su slični i odnosit će se na jednog rukovatelja save_edit.php, koji će unijeti izmjene u bazu podataka. Također ima prilično velik kod, a ni njega neću predstavljati ovdje, već ću vam samo reći nešto o tome što se događa u njemu (također možete pronaći cijeli kod u izvornim datotekama). Prije svega, napravimo avatar, ako ga je korisnik postavio, naravno, inače ostavljamo standardni. Ako je to slučaj, prvo ga preuzimamo u mapu avatari(usput, stvorite ovu mapu i dajte joj dopuštenje za pisanje 755) nakon provjere s dopuštenim proširenjima. Zatim se stvara nova slika s formatom koji ovisi o odabranom načinu rada: $rezim = 1 stvara se kvadratna slika, $rezim = 2 slika je proporcionalna originalu. Također morate postaviti širinu stvorene slike $w i kvaliteta $kvaliteta. Stvorenu sliku spremamo u jpg format pomoću funkcije imagejpeg i generirajte nasumično ime za to. Sada morate izbrisati staru sliku i ažurirati je u bazi podataka novom. To je sve za slike.

Sve ostale stavke u ovoj datoteci namijenjene su ažuriranju osobnih podataka o korisniku i jednostavni su upiti bazi podataka za ažuriranje polja. Prije ažuriranja, postojanje ulaznih varijabli i njihova sigurnost provjeravaju se pomoću stripslashes I htmlposebni znakovi. Ako je ažuriranje uspješno, odmah preusmjeravamo korisnika na stranicu profila.
Sada provjerimo može li prijavljeni korisnik vidjeti sve ostale registrirane korisnike. Da bismo to učinili, napravimo stranicu korisnik.php, koji će prikazati sve korisnike u petlji.

Već sam pisao o korisnicima WordPressa (pogledajte poveznicu). Ali kao i svaki alat (osim malja), Adminimize nije idealan i ne može sve ukloniti u potpunosti, iako to mogu zahvaliti samo WordPress programerima.

Ovaj post je nastao spontano, možete reći zahvaljujući gostu Blowu. Suština njegovog pitanja bila je sljedeća (više kao niz pitanja):

1. Kako sakriti "Odabir" Shema boja" za korisnika?

2. Kako sakriti “Hot Keys” i “Visual Editor” u WordPress panelu?

Prijeći ću odmah na stvar. Koristeći ovu metodu, možete sakriti sve elemente za korisnika u njegovom profilu i na drugim stranicama. Najlakši način je urediti datoteku prikaza!

Za “Profil” ovo je datoteka korisnik-uređivanje.php, koji se nalazi u mapi wp-admin. Morate ga vrlo pažljivo urediti, inače možete dobro "platiti" za svoje eksperimente.

Rješenje (objedinjeno):

1. Preuzmite datoteku na svoje računalo i napravite njezinu kopiju (sigurno....)

2. Tražimo HTML kod koji je odgovoran za prikaz informacija koje su nam potrebne.

3. Pažljivo ga komentirajte i "dopunite" ga zamjenom.

Sada vježbajte (uredite User-edit.php):

Iskreno, ne sjećam se koju verziju WP-a imam na testnoj stranici, ali definitivno nije niža od 2.8.2.

Najprije sam preuzeo datoteku na svoje računalo i pogledao kod pomoću preglednika kodova u pregledniku Chrome, a traženi kod pronašao u Notepad++.

(dvije crtice sa svake strane “-”)

1. Sakrijte "Vizualni uređivač"

Promjena u kod:

—>

ps: nemojte kopirati ovaj kod, već ga sami promijenite - postoji velika vjerojatnost greške!!!

2. Sakrijte “Odaberi shemu boja”.

Nadam se da ste primijetili razliku između kodova - dodano je ukupno 7 znakova. Da sakrijemo ovaj predmet koji tražimo if (count($_wp_admin_css_colors) > 1) i komentirajte ispod retka sav kod između prije

3. Sakrijte “Hot Keys”.

U drugoj lekciji ćemo napisati još dva sata i u potpunosti završiti interni dio skripte.

Plan

Cilj ove serije vodiča je stvoriti jednostavnu aplikaciju koja korisnicima omogućuje registraciju, prijavu, odjavu i promjenu postavki. Klasa koja će sadržavati sve podatke o korisniku zvat će se Korisnik i bit će definirana u datoteci User.class.php. Klasa koja će biti odgovorna za ulaz/izlaz zvat će se Korisnički alati (UserTools.class.php).

Malo o imenovanju razreda

Ispravna je etiketa imenovati datoteke koje opisuju klasu istim imenom kao i sama klasa. To olakšava određivanje svrhe svake datoteke u mapi klasa.

Također je uobičajeno dodati .class ili .inc na kraj naziva datoteke klase. Na taj način jasno definiramo svrhu datoteke i možemo koristiti .htaccess za ograničavanje pristupa tim datotekama.

Korisnička klasa (User.class.php)

Ova klasa će definirati svakog korisnika. S rastom ovu aplikaciju Definicija "Korisnika" može se značajno promijeniti. Srećom, OOP programiranje olakšava dodavanje dodatnih korisničkih atributa.

Konstruktor

U ovoj klasi koristit ćemo konstruktor - to je funkcija koja se automatski poziva prilikom kreiranja sljedeće kopije klase. To nam omogućuje da automatski objavimo neke atribute nakon što je projekt stvoren. U ovoj klasi, konstruktor će uzeti jedan argument: asocijativni niz, koji sadrži jedan redak iz tablice korisnika naše baze podataka.

require_once "DB.class.php"; klasa Korisnik ( public $id; public $username; public $hashedPassword; public $email;
javni $joinDate;
//Konstruktor se poziva kada se kreira novi objekt//Uzima asocijativni niz s redom DB kao argument. funkcija __construct($data) ( $this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" korisničko ime"])) ? $data["korisničko ime"] : ""; $this->hashedPassword = (isset($data["password"])) ? $data["password"] : ""; $this- >email = (isset($data["email"])) ? $data["email"] : ""; $this->joinDate = (isset($data["join_date"])) ? $data[" datum_pridruživanja"] : ""; )
javna funkcija save($isNewUser = false) ( //stvori novi objekt baze podataka. $db = new DB(); //ako je korisnik već registriran i mi //samo ažuriramo njegove podatke. if(!$isNewUser ) ( //postavite niz podataka $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"",
"e-pošta" => ""$ovo->e-pošta"");
//ažuriraj red u bazi $db->update($data, "users", "id = ".$this->id); )else ( //ako se korisnik registrira prvi put. $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($data, "users"); $this->joinDate = time(); ) return true; ) ) ?>

Obrazloženje

Prvi dio koda, izvan zone klase, osigurava da je klasa povezana s bazom podataka (budući da klasa Korisnik ima funkciju koja zahtijeva ovu klasu).

Umjesto varijabli klase “protected” (korištene u 1. lekciji), definiramo ih kao “javne”. To znači da svaki kod izvan klase ima pristup ovim varijablama kada radi s objektom User.

Konstruktor uzima niz u kojem su stupci u tablici ključevi. Definiramo varijablu klase pomoću $this->variablename. U primjeru ove klase, prvo provjeravamo postoji li vrijednost određenog ključa. Ako da, tada postavljamo varijablu klase na tu vrijednost. Inače, prazan niz. Kod koristi kratki oblik notacije ako:

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

U u ovom primjeru provjeravamo je li 3 jednako četiri! Ako da - tada je $vrijednost = “A”, ne - $vrijednost = “B”. U našem primjeru, rezultat je $value = “B”.

Podatke o Korisnicima spremamo u bazu podataka

Funkcija spremanja koristi se za izmjene u tablici baze podataka s trenutnim vrijednostima u objektu User. Ova funkcija koristi DB klasu koju smo stvorili u prvoj lekciji. Pomoću varijabli klase postavlja se polje $data. Ako se podaci o korisniku spremaju prvi put, tada se $isNewUser prosljeđuje kao $true (false prema zadanim postavkama). Ako je $isNewUser = $true tada se poziva funkcija insert() klase DB. Inače se poziva funkcija update(). U oba slučaja, informacije iz korisničkog objekta bit će spremljene u bazi podataka.

Klasa UserTools.class.php

Ova će klasa sadržavati funkcije koje se odnose na korisnike: login(), logout(), checkUsernameExists() i get(). Ali s proširenjem ove aplikacije, možete dodati još puno više.

//UserTools.class.php require_once "User.class.php"; require_once "DB.class.php";
klasa Korisnički alati(
//Prijava korisnika. Prvo provjerava odgovaraju li //korisničko ime i lozinka retku u bazi podataka. //Ako je uspješno, postavite varijable sesije //i pohranite korisnički objekt unutar.
javna funkcija prijava ($korisničko ime, $lozinka)
{
$hashedPassword = md5($password); $result = mysql_query("SELECT * FROM users WHERE korisničko ime = "$username" AND lozinka = "$hashedPassword""); if(mysql_num_rows($result) == 1) ( $_SESSION["user"] = serijalize(new User(mysql_fetch_assoc($result))); $_SESSION["login_time"] = time(); $_SESSION["logged_in "] = 1; vrati istinito; )else( vrati lažno; ) )
//Odjava korisnika. Uništite varijable sesije. javna funkcija odjava() ( unset($_SESSION["user"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Provjerite da li korisničko ime postoji. //Ovo se poziva tijekom registracije kako bi se osiguralo da su sva korisnička imena jedinstvena. javna funkcija checkUsernameExists($username) ( $result = mysql_query("select id from users where username="$username""); if(mysql_num_rows($result) == 0) ( return false; )else( return true; )
}
//dobi korisnika //vraća objekt User. Uzima ID korisnika kao ulaznu javnu funkciju get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result );)))
?>

funkcija login().

Funkcija login() je jasna po svom nazivu. Uzima korisničke argumente $username i $password i provjerava podudaraju li se. Ako sve odgovara, stvara korisnički objekt sa svim informacijama i sprema ga u sesiju. Imajte na umu da koristimo samo PHP funkciju serialize(). Stvara pohranjenu verziju objekta koja se lako može deserializirati pomoću unserialize(). Također, vrijeme prijave će biti spremljeno. Ovo se kasnije može koristiti za pružanje informacija korisnicima o duljini boravka na stranici.

Također možete primijetiti da smo postavili $_SESSION["logged_in"] na 1. To nam omogućuje da na svakoj stranici lako provjerimo je li korisnik prijavljen. Dovoljno je provjeriti samo ovu varijablu.

funkcija odjava().

Također jednostavna funkcija. PHP funkcija unset() briše varijable u memoriji, dok session_destroy() će izbrisati sesiju.

funkcija checkUsernameExists().

Svatko tko zna engleski lako će razumjeti funkciju. Jednostavno pita bazu podataka je li korištena slična prijava ili ne.

funkcija get().

Ova funkcija uzima jedinstveni ID korisnika i postavlja upit bazi podataka pomoću DB klase, točnije funkcije select(). Uzet će asocijativni niz s brojnim korisničkim informacijama i stvoriti novi objekt Korisnik, prosljeđuje polje konstruktoru.

Gdje mogu ovo upotrijebiti? Na primjer, ako izradite stranicu koja treba prikazati određene korisničke profile, morat ćete dinamički dohvatiti te informacije. Evo kako to možete učiniti: (recimo da je URL http://www.website.com/profile.php?userID=3)

//napomena: prvo ćete morati otvoriti vezu s bazom podataka. //pogledajte 1. dio za dodatne informacije o tome. //Također ćete morati provjeriti jeste li uključili datoteke razreda.
$tools = novi korisnički alati(); $user = $tools->get($_REQUEST["userID"]); echo "Korisničko ime: ".$user->username.""; echo "Pridružio se: ".$user->joinDate."";

Lako! To je istina?

Završni dodir na strani poslužitelja: global.inc.php

global.inc.php je potreban za svaku stranicu na stranici. Zašto? Na ovaj način ćemo sve uobičajene radnje koje će nam trebati smjestiti na stranicu. Na primjer, pokrenut ćemo session_start(). Otvorit će se i veza s bazom podataka.

require_once "klase/Korisnički alati.class.php";
require_once "klase/DB.class.php";
//spojiti se na bazu $db = new DB(); $db->poveži();
//inicijaliziraj objekt UserTools $userTools = new UserTools(); //pokreni sesiju
početak_sesije();
//osvježi varijable sesije ako je prijavljen if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id)); ) ?>

Što on radi?

Ovdje se događa nekoliko stvari. Prije svega otvaramo vezu s bazom podataka.

Nakon povezivanja pokrećemo funkciju session_start(). Funkcija stvara sesiju ili nastavlja trenutnu ako je korisnik već prijavljen. Budući da je naša aplikacija dizajnirana za prijavu/odjavu korisnika, ova je značajka potrebna na svakoj stranici.

Zatim provjeravamo je li korisnik prijavljen. Ako je tako, ažurirat ćemo $_SESSION["user"] da odražava najviše najnovije informacije o korisniku. Na primjer, ako korisnik promijeni svoju e-poštu, stara će biti pohranjena u sesiji. Ali s automatskim ažuriranjem to se neće dogoditi.

Ovim završava drugi dio! Očekujte sutra posljednju lekciju na ovu temu.

Sve najbolje!

Opća pitanja

P: Profiler prikazuje aktivnost poslužitelja, ali ne prikazuje sve zahtjeve i sesije.

A: Ne zaboravite kliknuti gumb Start za početak snimanja sesija.

P: Uspio sam se spojiti na MySQL, ali sesije nisu prikazane.

A: Neor Profile SQL radi kao proxy poslužitelj. To znači da se mogu prikazati samo sesije koje prolaze kroz profiler. Vaša aplikacija (ili web stranica) mora biti povezana s profilerom kao da je obični MySQL poslužitelj. Profiler koristi samo TCP dolazne veze. Zatim ćete vidjeti rezultat na kartici Sesije.

P: Zašto neke sesije imaju zahtjeve s nula vremena?

A: Upiti s nultim vremenom izvršavaju se iznimno brzo bez kašnjenja. Takve upite može DBMS spremiti u predmemoriju ili izvršiti vrlo brzo, na primjer, ako imate moćan poslužitelj i dobro optimizirane tablice.

P:Što % znači u vremenu i trajanju u sesiji?

A:"Vrijeme %" je postotak ukupnog vremena izvršenja sesije. "Trajanje %" je postotak najduljeg zahtjeva u sesiji (omjer prema najduljem zahtjevu).

P: Koristim JetProfiler i lakše ga je postaviti.

A: JetProfiler prima informacije od MySQL poslužitelja putem naredbe "show status" i ne može dobiti sve podatke na poslužitelju, jer radi diskretno. Neor Profile SQL prikazuje apsolutno sve upite prema bazi podataka. A to zahtijeva konfiguriranje vaše aplikacije za usmjeravanje toka zahtjeva kroz profiler.

P: Gumb Profil na kartici SQL ne prikazuje rezultat

A: Značajka profiliranja u SQL editoru radi preko naredbe SHOW PROFILES, koja je dodana MySQL Community Serveru počevši od verzije 5.0.37. Provjerite svoju verziju MySQL poslužitelja.

P: Je li moguće izraditi profiler zasnovan na konzoli?

A: Za konzolu koristite kombinaciju DBMS logova i repa ili posebne konzolne alate kojih ima dosta. Neor Profile SQL je prozorska OS aplikacija koja je dizajnirana za postavljanje na sustav razvojnog programera.

P: Profiler radi, ali iz nekog razloga ne prikazuje glavni grafikon statistike?

A: Glavni grafikon koristi naredbu SHOW STATUS za glavni poslužitelj. Možda nemate dozvolu za pokretanje ove naredbe na poslužitelju. Provjerite imate li dopuštenja za ovu naredbu.

P: Kako pokrenuti instalacijski program u tihom načinu rada?

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

Windows

P: Kako provjeriti vezu Profilera?

A: Koristite MySQL konzolni klijent za povezivanje s profilerom. Ako vidite svoju sesiju na kartici Sesije, to znači da je sve ispravno konfigurirano.
Na primjer:
Zatim pokrenite jednostavnu SQL naredbu:
pokazati tablice;
I pogledajte što se dogodilo na kartici Sesije u profileru.

Linux

P: Ne mogu se spojiti putem lokalnog hosta.

A: Linux pokušava povezati localhost sa socket vezom, ali Neor Profile SQL radi samo s TCP vezama. Postavite adresu poslužitelja u profileru na 127.0.0.1 umjesto localhost. Isto možete učiniti u postavkama aplikacije.
Na primjer:
mysql --host=127.0.0.1 --user=LOGIN --password=PASSWORD --port=4040

P: Ne mogu se spojiti na 127.0.0.1.

A: Provjerite vrstu veze u svojoj aplikaciji. Također možete koristiti vrstu veze lokalne utičnice, koja ne zahtijeva unos vrijednosti porta.

P: Kako instalirati Neor Profile SQL pod OpenSUSE?

A: Trenutačno podržavamo samo DEB paket, koji radi na Ubuntuu, Debianu i kompatibilnim. Linux distribucije. Možete učiniti RPM datoteka sami i time pomoći.

P: Zašto ne mogu presresti Sysbench zahtjeve?

A: Profiler koristi samo TCP dolazne veze. Pokrenite Sysbench s parametrima hosta i porta:
sysbench --test=oltp --mysql-host=127.0.0.1 --mysql-port=4040--mysql-user=root --mysql-password=pripremite lozinku

Mac OS X

P: Profiler se ne može spojiti na MAMP MySQL poslužitelj.

A: Problem Mrežna veza u MySQL konfiguraciji:

  1. MAMR
    Besplatna verzija– kopirajte standardnu ​​MySQL konfiguraciju u mapu
    /Applications/MAMP/conf/my.cnf
    Pro verzija – otvorite izbornik FILE – EDIT – MySQL predložak
  2. u konfiguraciji my.cnf uklonite redak za preskakanje umrežavanja
  3. u postavkama Profilera promijenite adresu hosta baze podataka s localhost na 127.0.0.1

Promjena MySQL priključka u vašoj skripti

U Neor Profile SQL zadani port je 4040. Za prikupljanje SQL upiti morate promijeniti zadane vrijednosti za povezivanje na MySQL host i port 3306 u vašoj skripti. Ispod su primjeri kako to učiniti.

string connStr = " server=127.0.0.1;port=4040; baza podataka=VAŠA_BAZA_PODATAKA;korisnik=VAŠ_KORISNIK;lozinka=VAŠA_LOZINKA;";
http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html


Promjena porta u popularnom CMS-u

Wordpress

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

PrestaShop

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

OpenCart

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