Afisare paginata de rezultate cu PHP si MySQL

Acest articol studiaza afisarea paginata a rezultatelor pentru un site dinamic realizat pe platforma PHP cu date stocate intr-o baza de date gestionata se un  server SQL de tip MySQL.

Una din cele mai utilizate tipuri de afisare in paginile web este afisarea paginata, mai precis afisarea unui numar prestabilit de rezultate  intr-o pagina si afisarea numarului de pagini pentru a putea gasi mai usor informatia dorita .

Baza realizarii acestui mod de afisare sta in urmatoarele interogari SQL

SELECT  *  FROM nume_tabel LIMIT 10 OFFSET 15;

Studiem numai patrea "LIMIT 10 OFFSET 15". Prin aceasta anuntam serverul de SQL ca ne intereseaza numai 10 rezultate incepand de la cel de-al 16 rezultat "OFFSET 15".

Se poate utiliza o varianta prescurtata a acestei instructiuni si anume

SELECT  *  FROM nume_tabel LIMIT 15, 10;

Atentie cand folosim varianta prescurtata offset este primul . In acest caz OFFSET defineste limita de la care sunt afisate un numar de rezultate .

Mai ramane sa preluam numarul de rezultate pe pagina care va determina OFFSET si numarul de rezultate pentru fiecare pagina in parte , si sa determinam  numarul total de rezultate cu : 

SELECT COUNT(*) FROM  nume_tabel;

unde numarul de pagini reprezinta numarul total de rezultate impartit la numarul de rezultate pe pagina.

 

Ce este un server DNS ?

Comunicarea in retele de date ( calculatoare, dispozitive mobile, I.O.T. ) este coordonata si gestionata de un protocol numit TCP/IP .

Pentru a putea comunica, asa cum la telefon avem un numar de telefon unic in retea, dispozitivele conectate la o retea de date au o adresa unica in retea numita IP.

IP-ul este de fapt un sir de caractere format din patru grupuri de numere de la 0 la 255 separate prin caracterul alfanumeric punct.

Exemplu: 123.215.211.11 si vorbesc acum de protocolul IPv4 care inca este dominant deoarece in protocolul IPv6 avem numere in sistemul de numeratie hexazecimal.

Serviciul de prezentare WWW ( world wide web ) este unul din serviciile retelei mondiale de date pe care o numim INTERNET iar acest serviciu utilizeaza pentru comunicare tot protocolul de date TCP/IP.

Avand in vedere ca ne este practic imposibil sa retinem pe post de denumire siruri de numere , s-a impus un mecanism care sa faca trecerea la un mod de adresare bazat pe nume in loc de adrese IP. Acest serviciu poarta numele de Domain Name Server mai pe scurt DNS.

Intr-o descriere simplista acesta pune la dispozitia echipamentelor conectate da o retea de date ( INTERNET dar nu numai ) o lista cu o corespondenta intre un nume de domeniu si o adresa IP.

Pentru a putea fi gasit pe internet un domeniu trebuie sa aiba alocate niste inregistrari cu perechi de nume - adresa IP , in cel putin un server DNS.

Modul de atribuire a domeniilor pe internet respecta un mod ierarhic de tip arborescent cu un domeniu radacina care se va ocupa de gestionarea inregistrarilor cu adresele serverelor DNS pentru toate domeniile sale.

Ca exemplu pentru toate domeniile care au ca domeniu radacina .ro, in cazul meu pro-s.ro administratorul este INSTITUTUL NAȚIONAL DE CERCETARE-DEZVOLTARE ÎN INFORMATICĂ - ICI BUCUREȘTI, accesibil de pe internet la adresa https://www.rotld.ro/

Cu speranta ca am risipi un pic din ceata legata de multimea de prescurtari care va este aruncata in fata de catre “specialistii” din domeniul IT drept justificare pentru toate nefunctionalitatile, va multumesc pentru rabdarea de a citi acest scurt articol.

Accesare fisierelor cu video si fotografii iregistrate cu camera EKEN H6s 4K+, prin intermediul cablului microUSB avand ca sistem de operare Ubuntu 18.04 lTS.

 

Am achizitionat o camera sport de tipul EKEN H6s 4K+ si am inceput sa ma joc cu ea . Camera filmeaza mai mult decat acceptabil, as putea spune chiar  foarte bine avand in vedere pretul insa experienta de a te conecta la camera prin intermediul WiFi pentru a descarca filmele este de-a dreptul oribila . De la interfata , daca se poarte numi asa pagina de web care ofera acces la sistemul de fisiere de pe microSD-ul camerei, pana la viteza de maxim 1MB pe secunda la descarcarea filmelor este o bataie de joc . Descarci doua filmulete de 5 minute la intamplare, deoarece nu am identificat inca logica dupa care denumeste fisierele iar in " INTERFATA "  nu ai posibilitatea de a accesa orice alta informatie cu privire la momentul in care ai facut filmarea, si ai descarcat o baterie.

Singura posibilitate pe care o am este conectarea directa prin intermediul cablului.

In clipa in care am conectat  camera  prin intermediul cablului la laptop am primit un mesaj de eroare "cannot mount unknown filesystem type ‘exfat’ " idea principala fiind ca sistemul de operare al laptopului respectiv Ubuntu nu recunoaste tipul de partitie utilizat de catre camera la formatarea cardului microSD .

Remedierea este foarte simpla . Am deschis terminalul si am dat comanda:

# sudo apt-get install exfat-fuse exfat-utils

Asta este tot. am conectat cablul  si acum am acces la fisiere cu aceeasi viteza ca la orice alt dispozitiv de stocare pe USB 2.0 .

Acum pot considera camera EKEN H6s 4K+ drept o camera sport utila.

Returnarea datelor din MsSQL sub forma unei matrici String[][] in Java

Acest articol se adreseaza celor care utilizeaza limbajul de programare Java  pentru a obtine, prelucra , stoca date intr-o baza de date de tip Microsoft SQL Server prin intermediul JDBC utilizand ca driver de baza de date mssql-jdbc-7.2.2.  

M-am hotarat sa scriu acest articol dupa ce m-am lovit de aceeasi problema de doua ori la intervale de timp diferite. Ma intereseaza sa creez o structura de tip  array, String[][] pentru implementarea unei matrici ( tabel ) cu datele returnate de catre interogarea SQL  de tip SELECT .  Avand in vedere ca in Java trebuie sa cunosc dimensiunile array-ului dublu pentru a-l instantia,  respectiv numarul de coloane ( il cunosc de cand realizez interogarea SQL) si numarul de randuri returnate de respectiva interogare SQ:L aparent am la dispozitie doua metode pentru a realiza acest lucru.

Prima metoda care se preteaza pentru orice baza de date este sa creez doua interogari diferite, prima sa-mi returneze numarul de randuri si a doua interogare care sa-mi puna la dispozitie datele propriu-zise. Aceasta metoda este foarte defectuoasa deoarece , din cauza accesului concurential la un server de baze de date, exista possibilitatea ca numarul de randuri sa se modifice intre cele doua interogari ceea ce va conduce la aparitia unei erori de tipul  "stack overflow" in concluzie aceasta metoda este contraproductiva.

A doua metoda, cea pe care o folosesc, este :

PreparedStatement pstc=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
int nrR=0;
ResultSet rsNr=pstc.executeQuery();
rsNr.last();
nrR=rsNr.getRow();
rsNr.beforeFirst();

unde nrR este numarul de randuri returnate de respectiva interogare SQL.