Netačan profil korisnika php. Uklanjamo vizualni uređivač, odabir sheme boja i druge detalje u WordPress admin području. Šta on radi

Opća pitanja

P: Profiler prikazuje aktivnost servera, ali ne prikazuje sve zahtjeve i sesije.

O: Ne zaboravite da kliknete na dugme Start da započnete snimanje sesija.

P: Uspio sam se povezati na MySQL, ali sesije se ne prikazuju.

O: Neor Profile SQL radi kao proxy server. To znači da se mogu prikazati samo sesije koje prolaze kroz profiler. Vaša aplikacija (ili web stranica) mora biti u mogućnosti da se poveže sa profilerom kao običan MySQL server. Profiler koristi samo TCP dolazne veze. I tada ćete vidjeti rezultat na kartici Sesije.

P: Zašto neke sesije imaju zahtjeve sa nultim vremenom?

O: Upiti sa nultim vremenom se izvršavaju izuzetno brzo bez kašnjenja. Takve upite DBMS može keširati ili izvršiti vrlo brzo, na primjer, ako imate moćan server i dobro optimizirane tabele.

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

O:"Vrijeme %" je postotak ukupnog vremena izvršenja sesije. "Trajanje %" je postotak najdužeg zahtjeva u sesiji (odnos prema najdužem zahtjevu).

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

O: JetProfiler prima informacije od MySQL servera preko "show status" komande i ne može dobiti sve informacije na serveru, jer radi diskretno. Neor Profile SQL prikazuje apsolutno sve upite bazi podataka. A ovo zahtijeva konfiguriranje vaše aplikacije da usmjerava tok zahtjeva kroz profiler.

P: Dugme Profil na kartici SQL ne prikazuje rezultat

O: Funkcija profilisanja u SQL editoru radi preko naredbe SHOW PROFILES, koja je dodata MySQL Community Serveru počevši od verzije 5.0.37. Provjerite verziju vašeg MySQL servera.

P: Da li je moguće napraviti profiler baziran na konzoli?

O: Za konzolu koristite kombinaciju DBMS dnevnika i repa, ili posebne alate konzole, kojih ima dosta. Neor Profile SQL je prozorska OS aplikacija koja je dizajnirana da se postavi na sistem programera.

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

O: Glavni graf koristi naredbu SHOW STATUS za glavni server. Možda nemate dozvolu za pokretanje ove komande na serveru. Provjerite imate li dozvole za ovu naredbu.

P: Kako pokrenuti instalater u tihom načinu rada?

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

Windows

P: Kako provjeriti vezu Profilera?

O: Koristite MySQL konzolni klijent da se povežete sa profilerom. Ako vidite svoju sesiju na kartici Sesije, to znači da je sve ispravno konfigurisano.
na primjer:
Zatim pokrenite jednostavnu SQL naredbu:
pokazati tablice;
I pogledajte šta se dogodilo na kartici Sesije u profileru.

Linux

P: Ne mogu da se povežem preko lokalnog hosta.

O: Linux pokušava povezati localhost sa socket vezom, ali Neor Profile SQL radi samo s TCP konekcijama. Postavite adresu servera 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=LOZKA --port=4040

P: Ne mogu da se povežem na 127.0.0.1.

O: Provjerite vrstu veze u vašoj aplikaciji. Također možete koristiti tip povezivanja lokalne utičnice, koji ne zahtijeva da unosite vrijednost porta.

P: Kako instalirati Neor Profile SQL pod OpenSUSE?

O: Trenutno podržavamo samo DEB paket koji radi na Ubuntu, Debian i kompatibilan Linux distribucije. Možete sami napraviti RPM datoteku i time pomoći.

P: Zašto ne mogu presresti Sysbench zahtjeve?

O: 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 povezati na MAMP MySQL server.

O: Problem mrežne veze u MySQL konfiguraciji:

  1. MAMR
    Besplatna verzija– kopirajte standardnu ​​MySQL konfiguraciju u fasciklu
    /Applications/MAMP/conf/my.cnf
    Pro verzija– otvorite meni FILE – EDIT – MySQL šablon
  2. u my.cnf konfiguraciji, uklonite liniju skip-networking
  3. u postavkama Profilera, promijenite adresu hosta baze podataka iz localhost u 127.0.0.1

Promjena MySQL porta u vašoj skripti

U Neor Profile SQL-u podrazumevani port je 4040. Za prikupljanje SQL upiti morate promijeniti zadane vrijednosti za povezivanje s MySQL hostom i portom 3306 u skripti Ispod su primjeri kako to učiniti.

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


Promjena porta u popularnom CMS-u

Wordpress

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

PrestaShop

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

OpenCart

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

Već sam pisao o korisnicima WordPress-a (pogledajte link). Ali kao i svaki alat (osim čekića), Adminimize nije idealan i ne može sve ukloniti u potpunosti, iako je to zahvaljujući samo WordPress programerima.

Ova objava je nastala spontano, može se reći hvala gostu Blow. Suština njegovog pitanja je bila ovo (više kao niz pitanja):

1. Kako sakriti "Izbor" shema boja» za korisnika?

2. Kako sakriti “Hot Keys” i “Vizuelni uređivač” u WordPress panelu?

Preći ću direktno 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 da uredite datoteku za prikaz!

Za “Profil” ovo je fajl user-edit.php, koji se nalazi u folderu wp-admin. Morate ga vrlo pažljivo urediti, inače možete dobro "platiti" svoje eksperimente.

Rješenje (objedinjeno):

1. Preuzmite datoteku na svoj PC i napravite kopiju (sigurno....)

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

3. Pažljivo ga prokomentirajte i “napunite” ga zamjenom.

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

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

Prvo sam preuzeo datoteku na svoj PC i koristio Viewer Chrome kod„Pogledao sam sam kod i pronašao potreban kod u Notepad++.

(dvije crtice sa svake strane "-")

1. Sakrijte “Vizuelni uređivač”

Promijeni u kod:

—>

ps: nemojte kopirati ovaj kod, već ga sami promijenite - velika je vjerovatnoća greške!!!

2. Sakrij “Odaberi šemu boja”.

Nadam se da ste primijetili razliku između kodova - dodano je ukupno 7 znakova. Da sakrijemo ovu stavku koju tražimo if (count($_wp_admin_css_colors) > 1) i komentirajte ispod reda sav kod između to

3. Sakrijte “Hot Keys”.

Želio bih ovu lekciju posvetiti kreiranju ličnog profila za registrovane korisnike (dodatak lekciji Kreiranje registracije korisnika na stranici). Sada će korisnici moći dodati svoj avatar, promijeniti ime i prezime, dodati mjesto stanovanja i rođendan. Da biste to učinili, u tabeli korisnika dodajmo nekoliko polja:

Sada kreirajmo stranicu profila profile.php i dodajte ga na stranicu index.php link do njega

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

Profil<?php echo $login; ?>

Profil



"; odjek" ".$array["name_user"]." ".$array["prezime"]."
"; switch ($array["birthdate_month"])(//Pretvori broj mjeseca u ime velikog slova "1" : $month = "januar"; pauza; slučaj "2" : $month = "februar"; pauza; case "3" : "pauza" : $month = "pauza"; "Juni" : $month = "September"; 10" : $month = "Oktobar"; pauza; slučaj "11" : $month = "Novembar"; pauza; $month = "Decembar"; echo "Datum registracije: ".$array[" reg_date"]."
"; echo "Spol: ".$array["sex"]."
"; echo "Rođendan: ".$array["birthdate_day"]." ".$month." ".$array["birthdate_year"]."
"; 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( print<<ulaz:
Prijava: Lozinka:
Oporavak lozinke za registraciju OVDJE; ) ?>

Naravno, odlaskom na ovu stranicu vidjet ćemo standardni avatar noAvatar.jpg i eventualno ime i prezime, ako ih je korisnik naveo prilikom registracije, preostale stavke će biti prazne. Na samom kraju ove stranice nalazi se link do stranice za uređivanje profila edit.php. Kod za ovu stranicu je vrlo lagan i sastoji se od obrazaca za unos podataka. Zbog prilično velikog obima, neću ga ovdje dati u cijelosti, već ću ga dati samo dio moći će ga dobiti u cijelosti u izvornim datotekama.

Svi ostali oblici su slični i odnosiće se na jednog rukovaoca save_edit.php, koji će izvršiti promjene u bazi podataka. Takođe ima prilično veliki kod, i ja ga neću predstavljati ni ovde, već ću vam samo reći nešto o tome šta se u njemu dešava (potpuni kod možete pronaći i u izvornim datotekama). Prije svega, kreiramo avatar, ako ga je korisnik postavio, naravno, inače ostavljamo standardni. Ako je to slučaj, onda ga prije svega preuzimamo u mapu avatari(usput, kreirajte ovaj folder i dajte mu dozvole za pisanje 755) nakon provjere s dozvoljenim ekstenzijama. Zatim se kreira nova slika u formatu koji zavisi od odabranog načina rada: $rezim = 1 kreira se kvadratna slika, $rezim = 2 slika je proporcionalna originalnoj. Također morate podesiti širinu kreirane slike $w i kvaliteta $kvalitete. Stvorenu sliku spremamo u jpg formatu pomoću funkcije imagejpeg i generirajte nasumično ime za njega. Sada morate izbrisati staru sliku i ažurirati je u bazi podataka novom. To je sve za slike.

Sve ostale stavke u ovoj datoteci imaju za cilj ažuriranje ličnih podataka o korisniku i jednostavni su upiti bazi podataka za ažuriranje polja. Prije ažuriranja, korištenjem se provjerava postojanje dolaznih varijabli i njihova sigurnost stripslashes I htmlspecialchars. Ako je ažuriranje uspješno, korisnika odmah preusmjeravamo na stranicu profila.
Sada ćemo se pobrinuti da prijavljeni korisnik može vidjeti sve ostale registrirane korisnike. Da bismo to učinili, napravimo stranicu user.php, koji će prikazati sve korisnike u petlji.

U drugoj lekciji ćemo napisati još dva razreda i u potpunosti završiti unutrašnji dio skripte.

Plan

Cilj ove serije tutorijala je kreiranje jednostavne aplikacije koja korisnicima omogućava registraciju, prijavu, odjavu i promjenu postavki. Klasa koja će sadržati sve informacije o korisniku će se zvati User i biće definisana u datoteci User.class.php. Klasa koja će biti odgovorna za ulaz/izlaz će se zvati UserTools (UserTools.class.php).

Malo o imenovanju klasa

Ispravan bonton je da se imenuju datoteke koje opisuju klasu istim imenom kao i sama klasa. Ovo olakšava određivanje svrhe svake datoteke u fascikli classes.

Također je uobičajeno dodati .class ili .inc na kraj naziva datoteke klase. Na ovaj način jasno definiramo svrhu datoteke i možemo koristiti .htaccess da ograničimo pristup tim datotekama.

Korisnička klasa (User.class.php)

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

Constructor

U ovoj klasi ćemo koristiti konstruktor - ovo je funkcija koja se automatski poziva prilikom kreiranja sljedeće kopije klase. Ovo nam omogućava da automatski objavimo neke atribute nakon kreiranja projekta. U ovoj klasi, konstruktor će uzeti jedan argument: asocijativni niz, koji sadrži jedan red iz tabele korisnika naše baze podataka.

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

Objašnjenje

Prvi dio koda, izvan zone klase, osigurava da je klasa povezana sa bazom podataka (pošto klasa User ima funkciju koja zahtijeva ovu klasu).

Umjesto varijabli klase “zaštićene” (koje se koriste u 1. lekciji), definišemo ih kao “javne”. To znači da svaki kod izvan klase ima pristup ovim varijablama kada radi sa objektom User.

Konstruktor uzima niz u kojem su stupci u tabeli ključevi. Definiramo varijablu klase koristeći $this->variablename. U primjeru ove klase prvo provjeravamo postoji li vrijednost određenog ključa. Ako da, onda postavljamo varijablu klase na tu vrijednost. U suprotnom, prazan niz. Kod koristi kratku formu notacije ako:

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

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

Podatke o Korisnicima čuvamo u bazi podataka

Funkcija spremanja se koristi za unošenje promjena u tablicu baze podataka s trenutnim vrijednostima u objektu User. Ova funkcija koristi DB klasu koju smo kreirali u prvoj lekciji. Koristeći varijable klase, postavlja se niz $data. Ako se korisnički podaci spremaju po prvi put, onda se $isNewUser prosljeđuje kao $true (netačno po defaultu). Ako je $isNewUser = $true onda se poziva funkcija insert() DB klase. U suprotnom, poziva se funkcija update(). U oba slučaja, informacije iz korisničkog objekta bit će pohranjene u bazi podataka.

Klasa UserTools.class.php

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

//UserTools.class.php require_once "User.class.php"; require_once "DB.class.php";
class UserTools(
//Prijavite korisnika. Prvo provjerava da li //korisničko ime i lozinka odgovaraju nekom redu u bazi podataka. //Ako je uspješan, postavite varijable sesije //i pohranite korisnički objekt unutar.
prijava na javnu funkciju ($korisničko ime, $lozinka)
{
$hashedPassword = md5($password); $result = mysql_query("SELECT * FROM users WHERE username = "$username" AND password = "$hashedPassword""); if(mysql_num_rows($result) == 1) ( $_SESSION["user"] = serialize(new User(mysql_fetch_assoc($result))); $_SESSION["login_time"] = time(); $_SESSION["logged_in "] = 1; vrati true; )else( vrati netačno; ) )
//Odjavite korisnika. Uništite varijable sesije. javna funkcija logout() ( unset($_SESSION["user"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Provjerite da li korisničko ime postoji. //Ovo se poziva tokom registracije kako bi se osiguralo da su sva korisnička imena jedinstvena. javna funkcija checkUsernameExists($username) ( $result = mysql_query("odaberite id od korisnika gdje je korisničko ime="$username""); if(mysql_num_rows($result) == 0) (vrati false; )else( vrati true; )
}
//dobijamo korisnika //vraća korisnikov objekt. Uzima id korisnika kao ulaznu javnu funkciju get($id) ( $db = novi DB(); $result = $db->select("users", "id = $id"); vrati novog korisnika($result ); ) )
?>

funkcija login().

Funkcija login() je jasna po svom imenu. Uzima korisničke argumente $username i $password i provjerava da li se podudaraju. Ako se sve poklapa, kreira User objekat sa svim informacijama i sprema ga u sesiju. Imajte na umu da koristimo samo PHP serialize() funkciju. Kreira pohranjenu verziju objekta koja se lako može deserializirati korištenjem unserialize(). Također, vrijeme prijave će biti sačuvano. Ovo se kasnije može koristiti za pružanje informacija korisnicima o dužini boravka na stranici.

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

funkcija odjave().

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

funkcija checkUsernameExists().

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

get() funkcija

Ova funkcija uzima jedinstveni id korisnika i postavlja upit bazi podataka koristeći DB klasu, odnosno funkciju select(). Uzet će asocijativni niz s određenim brojem korisničkih informacija i kreirati novi objekt korisnika, prosljeđujući niz konstruktoru.

Gdje mogu ovo koristiti? Na primjer, ako kreirate stranicu koja treba da prikaže određene korisničke profile, morat ćete dinamički dohvatiti ove 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 sa bazom podataka. //pogledajte 1. dio za dodatne informacije o tome. //Morat ćete također biti sigurni da ste uključili datoteke klasa.
$tools = novi UserTools(); $user = $tools->get($_REQUEST["userID"]); echo "Korisničko ime: ".$user->username.""; echo "Pridružio se: ".$user->joinDate."";

Lako! Da li je to istina?

Poslednji dodir na strani servera: global.inc.php

global.inc.php je neophodan za svaku stranicu na sajtu. Zašto? Na ovaj način ćemo postaviti sve uobičajene operacije koje će nam trebati na stranici. Na primjer, pokrenut ćemo session_start(). Veza sa bazom podataka će se također otvoriti.

require_once "classes/UserTools.class.php";
require_once "classes/DB.class.php";
//povezivanje na bazu podataka $db = new DB(); $db->connect();
//inicijaliziraj UserTools objekt $userTools = new UserTools(); //pokreni sesiju
session_start();
//osvježite varijable sesije ako ste prijavljeni if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id) ) ?>

šta on radi?

Ovdje se dešava nekoliko stvari. Prije svega, otvaramo vezu s bazom podataka.

Nakon povezivanja, pokrećemo funkciju session_start(). Funkcija kreira sesiju ili nastavlja trenutnu ako je korisnik već prijavljen. Budući da je naša aplikacija dizajnirana da se korisnici prijavljuju/odjavljuju, ova funkcija je potrebna na svakoj stranici.

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

Ovim je završen drugi dio! Zadnju lekciju na ovu temu očekujte sutra.

Sve najbolje!

Izbor