Showing posts with label PHP. Show all posts
Showing posts with label PHP. Show all posts

Tuesday, February 2, 2016

Limbajul PHP. Cookies. Greseala de incepator :-) (link aplicatie)

Un server poate gazdui un numar oarecare de scripturi sau de aplicatii-site, fiecare programat, eventual, sa foloseasca mecanismul de cookies. Fiecare dintre site-urile care trimit cookies seteaza acestor cookies, in afara de nume (cheie) si valoare, alti parametri precum timpul de expirare, domeniul si calea.

Exista, desigur, scenarii in care se folosesc valorile implicite ale parametrilor optionali.
Neglijarea acestor valori implicite (sau a logicii dupa care ele sunt generate) se soldeaza, uneori, cu consecinte neplacute.

Spre exemplu, fie enuntul urmator, dat ca tema in cadrul unui curs de PHP procedural:

" Se concepe un formular HTML in care utilizatorul alege dintr-un drop-down list site-ul catre care doreste sa mearga. Dupa expedierea formularului, utilizatorul va fi redirectionat catre site-ul ales. 
1) Adaugire: se va include un checkbox "Remember my decision". Odata ce utilizatorul a ales un site, a bifat checkbox-ul si a expediat formularul (fiind redirectionat catre site-ul ales), la fiecare vizita ulterioara el va fi automat redirectionat catre site-ul ales initial. 
2) Adaugire: odata ales site-ul default, la vizitele ulterioare, pagina va contine un buton "Reset my website preference". Apasarea acestui buton duce la anularea site-ului default - la urmatoarea vizita, utilizatorului i se va prezenta din nou pagina de selectie de site".

Primele doua cerinte nu comporta probleme: se folosesc formularele HTML corespunzatoare, functia header(), functia setcookies(). "Surprizele"pot sa apara la ultimul punct.

Presupunem ca formularul html este gazduit pe prima pagina a unui site, sa-i spunem site-ul A, iar selectia din drop-down list redirecteaza utilizatorul catre site-urile B, C, D…. Pentru simplitate, vom limita momentan drop-down list la un singur site, B, care poate fi bifat sau nu ca favorit, in vederea redirectarii automate.

Site-ul A se afla intr-un folder oarecare pe masina locala, sa-i spunem "practice1", iar site-ul B se afla intr-un subfolder al lui practice1, sa-i spunem "targets". Aceasta configuratie este importanta si vom vedea imediat de ce.

Friday, January 22, 2016

Limbajul PHP. Functii. Birth date generator

Un enunt adaptat pe baza unei teme de practica individuala din cadrul unui curs de PHP procedural, predat la InfoAcademy Bucuresti.

// Se genereaza in mod aleator o data de nastere. Pentru simplificare, luna generata va fi ianuarie sau februarie.
// Se va incerca generarea zilei in intervalul corect (1-31 pentru ianuarie, 1-28 sau 1-29 pentru februarie, in functie de an).
// Se va afisa un tabel HTML cu: data generata, anul (bisect sau ordinar), zodia.

Algoritmul pentru testarea unui an (bisect/ordinar), aici.

O lista a anilor bisecti care acopera si intervalul utilizat in acest exemplu, aici.

Functia Generator() apeleaza functia is_leap($y) pentru testul numarului (pseudo)aleator care reprezinta anul. In functie de test si de valoare numerica a lunii este apoi generata ziua.

O bucla for apeleaza de 10 ori functia Generator() pentru afisarea celor 10 intrari in tabelul html.

Pe sistemul pe care s-a facut testul, codul nu este rezident in folderul www ci intr-un alias setat corespunzator.

Codul si prinscreen-ul:

Tuesday, January 12, 2016

Limbajul PHP. Guessing game. Tablouri multidimensionale

Urmatorul enunt de pe www.programmr.com este o problema simpla cu sase scenarii posibile, raspunsurile de selectie fiind introduse de la tastatura.

Se cere sa se identifice prin doua interogari un obiect intr-o matrice 2 x 3 (screen-ul urmator).

Din pacate, softul de pe programmr.com valideaza si topica si compozitia stringului de iesire, dupa urmatorul pattern.

1) "alive" & "outside" sau "alive" & "inside":  Obviously the living thing on your mind is a ...

2) "not alive" & "outside" sau "not alive" & "inside" : Obviously the nonliving thing on your mind is a ...
3) ("alive" sau "not alive") && "both":   Obviously the nonliving thing inside/outside on your mind is a ...

Altminteri, problema e triviala iar varianta comoda este stocarea entitatilor living/not living etc intr-un tablou bidimensional cu cheile indicate mai jos.


Friday, January 8, 2016

Limbajul PHP. The proper way to adress someone ... in English :-)


Conform multiplelor surse, e o mica bataie de cap sa te adresezi "cu eticheta" unei persoane in limba engleza, presupunand ca nu-i cunosti dinainte sexul, varsta si starea civila.

Teoria spune ca daca e vorba de femei majore, nemaritate, folosesti formula ambigua Ms. in fata numelul de familie (last name) sau chiar in fata numelui intreg. Daca femeia-i maritata, folosesti fara teama Mrs. in fata numelui (intreg sau de familie). Ambele formule isi au originea in "Mistress".

Enuntul urmator de pe programmr.com introduce in plus urmatoarea regula fara discriminare de sex: daca varsta este sub cea a majoratului, persoana este chemata pe numele complet. Daca e vorba de un barbat major, se foloseste Mr. inaintea numelui de familie.

"Write a program which displays an appropriate name for a person, using a combination of nested if's and compound conditions. Ask the user for a gender, first name, last name and age.
If the person is female and 20 or over, ask if she is married. If so, display "Mrs." in front of her name. If not, display "Ms." in front of her name. If the female is under 20, display her first and last name.
If the person is male and 20 or over, display "Mr." in front of his name. Otherwise, display his first and last name.
Note that asking a person if they are married should only be done if they are female and 20 or older."

Monday, November 30, 2015

Limbajul PHP. Functii si tablouri. Aplicatie: eliminarea elementelor dintr-un string pe baza paritatii si afisarea optimizata a rezultatului

Problema urmatoare este enuntata pe site-ul www.programmr.com si face apel la notiunile de functie, string, tablou, instructiuni de decizie si ciclare.

Enuntul:

"Write a function evens that accepts an integer parameter 'n' and that returns the integer formed by removing the odd digits from 'n'.

If a negative number with even digits other than 0 is passed to the method, the result should also be negative.


Leading zeros in the result should be ignored and if there are no even digits other than 0 in the number, the method should return 0."

Rezolvarea propusa in codul urmator face abstractie de functiile accesibile in manipularea sirurilor se caractere. De pilda, lungimea stringului in care sunt stocate cifrele si eventualul semn al numarului introdus de la tastatura se determina intr-o bucla while si nu cu strlen().