PHP (scripturi, aplicatii, tutorial)

Diverse limbaje, programare, scripting, coduri, unelte specifice etc.
Bordanc_Nicu
Sergent major
Mesaje: 89
Membru din: 20 Aug 2009, 23:44
Localitate: Timisoara
Contact:

Mesaj de Bordanc_Nicu »

Pun si eu mai jos un cod php, care arata ceasul pe site.

Cod: Selectaţi tot

<?php
$TimeZone="0";
$New_Time = time() + ($TimeZone * 60 * 60);
$time=date("H:i");
$Hour=date("G",$New_Time);
if ($Hour <= 4)
{
echo 'Noapte Buna!';
}
else if ($Hour <= 10)
	{
echo 'Buna Dimineata!';
}
else if ($Hour <= 14)
{
echo 'Buna Ziua!';
}
else if ($Hour <= 16)
{
echo 'O dupa amiaza Placuta!';
}
else if ($Hour <= 22)
{
echo 'Buna Seara!';
}
Renunta la ce nu poti pastra, pentru a castiga ce nu poti pierde!!!
Bordanc_Nicu
Sergent major
Mesaje: 89
Membru din: 20 Aug 2009, 23:44
Localitate: Timisoara
Contact:

Mesaj de Bordanc_Nicu »

Cod: Selectaţi tot

//Lunile anului:
if(date("M")=="Jan")$luna="Ianuarie";
if(date("M")=="Feb")$luna="Februarie";
if(date("M")=="Mar")$luna="Martie";
if(date("M")=="Apr")$luna="Aprilie";
if(date("M")=="May")$luna="Mai";
if(date("M")=="Jun")$luna="Iunie";
if(date("M")=="Jul")$luna="Iulie";
if(date("M")=="Aug")$luna="August";
if(date("M")=="Sep")$luna="Septembrie";
if(date("M")=="Oct")$luna="Octombrie";
if(date("M")=="Nov")$luna="Noiembrie";
if(date("M")=="Dec")$luna="Decembrie";
//Zilele saptamanii:
if(date("D")=="Mon")$ziua="Luni";
if(date("D")=="Tue")$ziua="Marti";
if(date("D")=="Wed")$ziua="Miercuri";
if(date("D")=="Thu")$ziua="Joi";
if(date("D")=="Fri")$ziua="Vineri";
if(date("D")=="Sat")$ziua="Sambata";
if(date("D")=="Sun")$ziua="Duminica";
echo "<center>".date("H:i:s")."<br>$ziua,".date("d")."-$luna-".date("Y")."<br>";
echo "</center>";
?>
Si acum revin cu niste explicatii:
If egal daca. Deci "daca" ora este x, atunci ataseaza si mesajul y.
Apoi, am definit lunile anului si zilele saptamanii.
Deci la randul urmator, adica dupa ora, minute, secunde, se va afisa luna, ziua si anul curente.
Renunta la ce nu poti pastra, pentru a castiga ce nu poti pierde!!!
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Varianta pusa de tine pentru afisarea zilei saptamanii sau a lunii anului este una analitica, pun si eu una sintetica cu array-uri. Se vede ca ai invatat PHP de la inceput si, intr-adevar, if-ul rezolva oricand orice, doar ca de multe ori ia multe randuri de cod cand vrei sa specifici conditia pentru multe valori ale unei variabile. Array-ul vine tocmai in intampinarea problemei numarului mare de variabile, practic intr-una singura se pot include oricate.

Cod: Selectaţi tot

<?php
	$data_zile=array('Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă', 'Duminică');
	$data_luni=array('ianuarie', 'februarie', 'martie', 'aprilie', 'mai', 'iunie', 'iulie', 'august', 'septembrie', 'octombrie', 'noiembrie', 'decembrie');
if(date('w')!=0)
{
	$ziua=$data_zile[date('w')-1];
}
else
{
    $ziua=$data_zile[6];
}
	$luna=$data_luni[date('n')-1];
	$data=$ziua.', '.date('j').' '.$luna.' '.date('Y');
	echo $data;
?>
Codul de sus inclus pe undeva va afisa pentru momentul postarii mele:
Miercuri, 3 noiembrie 2010

Este un nivel mai avansat de programare, dar poate fi luat exemplul ca tinta la care sa se ajunga pentru afisarea unei date dupa ce este inteles exemplul analitic propus de Bordanc_Nicu.
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Campus
Comandantul unitatii
Mesaje: 446
Membru din: 09 Mai 2007, 12:15
Localitate: Cluj Napoca

Mesaj de Campus »

O alta imbunatatire posibila in exemplul dat de manu pentru a nu mai fi nevoie de $ziua=$data_zile[date('w')-1 se poate pune Duminica ca prima valoare din array.
De asemenea la lunile anului se poate pune o valoare nula pentru indexul 0 al array-ului. Cam asa ar arata codul si mai simplificat:

Cod: Selectaţi tot

<?php 
   $data_zile=array 'Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'); 
   $data_luni=array('','ianuarie', 'februarie', 'martie', 'aprilie', 'mai', 'iunie', 'iulie', 'august', 'septembrie', 'octombrie', 'noiembrie', 'decembrie'); 


   echo $data_zile[date('w')].', '.date('j').' '.$data_luni[date('n')].' '.date('Y'); 
?> 

astfel echo este facut cu concatenarea simultana a valorilor selectate din cele doua tablourri de date.
Kov.Kriszti
Plutonier major
Mesaje: 218
Membru din: 16 Noi 2009, 14:54
Localitate: Romania

Mesaj de Kov.Kriszti »

Bună seara. Am și eu o nelămurire în legătură cu PHP.
În scripturile mele folosesc session-ul. În unele merge dar în altele îmi apare următoarea eroare
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at și aici este locația scriptului.
Aș fi recunoscător dacă m-ar lămuri și pe mine cineva de ce apare această eroare și ce aș putea face să meargă session-ul.
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

Cand folosesti session_start() se creaza o noua sesiune sau se foloseste una existenta, iar in mod obisnuit se seteaza un cookie care contine identificatorul acelei sesiuni. Cookie-ul este un header HTTP care trebuie sa fie trimis inainte de a trimite altceva catre browser. Deci scriptul tau nu trebuie sa printeze nimic in browser inaintea folosirii session_start().
Kov.Kriszti
Plutonier major
Mesaje: 218
Membru din: 16 Noi 2009, 14:54
Localitate: Romania

Mesaj de Kov.Kriszti »

Aceste lucruri le știam. În fiecare fișier primul rând este
<?php session_start(); ?>
Am mai citit pe unele forumuri că ar fi o problemă setarea caracterelor la UTF-8 dar am scos și acel tag din fișier și era aceeași problemă.
Avatar utilizator
Manu
General de divizie
Mesaje: 4120
Membru din: 02 Feb 2007, 01:15
Localitate: Cluj-Napoca
Contact:

Mesaj de Manu »

Am patit si eu treaba asta si uneori se rezolva la nimereala, mai schimbam pe ici pe colo si disparea. Vezi sa fie totusi UTF8 encoding-ul, nu ala cu Signature cum salveaza Notepad-ul din Windows. Eu ca sa fiu sigur folosesc Notepad2, acolo stiu clar ca e un UTF8 normal.
Iti face figura si pe server, ori doar local cu XAMPP?
Errare humanum est, sed perseverare diabolicum...
In forum linguae Latinae venite! (via est: www.limbalatina.ro)
Kov.Kriszti
Plutonier major
Mesaje: 218
Membru din: 16 Noi 2009, 14:54
Localitate: Romania

Mesaj de Kov.Kriszti »

Folosesc Edsharp ca și editor, iar eroarea apare și pe server.
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

Salveaza fisierele PHP in format ASCII/ANSI/Latin1, nu in format UTF-8.
Tipul de encoding UTF-8 nu are nevoie de BOM (byte order mark), adica acele caractere netiparibile care apar la inceputul fisierului, dar programele facute de Microsoft adauga de obicei acel BOM, iar EdSharp este facut cu unelte Microsoft.
In EdSharp apasa Alt+Shift+Y ca sa schimbi tipul de encoding. Probabil ca se poate seta si permanent pe undeva prin preferintele programului.
Vezi daca EdSharp nu are cumva si optiunea de a salva fisiere codate UTF-8 fara BOM, ca aceea ar fi cea mai buna solutie.
Sau foloseste un editor care ofera aceasta posibilitate.
Kov.Kriszti
Plutonier major
Mesaje: 218
Membru din: 16 Noi 2009, 14:54
Localitate: Romania

Mesaj de Kov.Kriszti »

Le-am salvat în format "latin1" dar în continuare session-ul refuză să pornească. DVS ce editor mi-a-ți recomanda. Eu am ales edsharp datorită functionalităților cum ar fi ștergerea rândului cu "ctrl+d", etc.
IonPop
Colonel
Mesaje: 2166
Membru din: 02 Oct 2010, 17:55

Mesaj de IonPop »

Este greu sa iti recomand un editor, pe de o parte fiindca editoarele au de obicei multe facilitati, si fiecare programator isi are propriile preferinte si nevoi, iar pe de alta parte fiindca nu am gasit pana acum un editor care sa ma satisfaca pe deplin.

Eu am o lista cu cateva editoare care se apropie de perfectiune (in functie de nevoile mele) si pe care le verific cam o data pe an ca sa vad daca s-au mai facut imbunatatiri in ele, incerc sa conving firmele producatoare sa adauge facilitatile lipsa etc.
EdSharp nu folosesc fiindca inca de cand a fost lansat a dat multe erori ori de cate ori l-am testat, nu imi place fiindca emite mesaje direct prin intermediul cititorului de ecran in loc sa le afiseze ca in editoarele standard si de acolo sa fie citite de Jaws, nu imi place fiindca are o multime de combinatii de taste care nu pot fi modificate, este dificil de rulat programul curent direct din editor, modul de cautare cu/fara regular expressions sau cu/fara potrivire minuscule/majuscule este limitat, si multe altele.
Si mie mi-ar placea ca editorul sa stearga intreaga linie curenta, si chiar m-am gandit ca asta nu ar fi chiar atat de greu de facut, insa de facut dupa cate stiu eu nu o face nici EdSharp. Ba mai mult, daca scriu o linie lunga, EdSharp o imparte in mai multe linii in mod automat. Nu adauga caractere de sfarsit de linie, ceea ce este bine, insa dupa un anumit caracter ne spune ca am trecut pe randul urmator, cand de fapt este doar vizual randul urmator. Or un rand incepe de la un sfarsit de linie si se termina la un alt sfarsit de linie, nu dupa un anumit numar de caractere cat este de lat ecranul la un moment dat.
Daca scri de exemplu o linie care are 300 de caractere si apesi Control+D cand cursorul este undeva in interiorul ei, ar trebui sa stearga toate cele 300 de caractere si eventual si caracterul de sfarsit de linie de dupa ea, dar EdSharp sterge doar o bucata din linie, ceea ce nu este deloc util, fiindca este foarte simplu de apasat home, shift+sageata in jos, delete, sau home, shift+end, delete, si ar avea acelasi efect. De sters insa intreaga linie este mai dificil fiindca trebuie dezactivat line wrapping ca sa se afiseze toata linia pe o singura linie vizuala, chiar daca nu se vede in intregime pe ecran, si doar apoi sa se aplice comenzile de mai sus. In TextPad ca sa activez/dezactivez line wrapping folosesc Control+Q, W, dar nu prea imi plac aceste comenzi si ar fi fost intr-adevar util daca s-ar fi putut face mai simplu.

O sa incerc sa iti dau cateva idei, dar nu ar fi de mirare daca niciuna nu ar raspunde preferintelor tale.
Eu folosesc ca editor de baza TextPad. Imi place fiindca este foarte accesibil si raspunde foarte rapid la comenzi si are foarte multe facilitati. Ma rog, de majoritatea nu am niciodata nevoie.
TextPad a suportat de multa vreme Regular Expressions, iar din versiunea 7 suporta Perl regular expressions care este cel mai bun motor pentru RE.
Se poate rula programul curent direct in editor si daca se doreste se pot specifica parametrii in momentul rularii. O chestie foarte utila pe care nu cred ca o mai au alte editoare, daca programul ruleaza mult timp si tipareste ceva, se afiseaza in editor liniile imediat ce sunt tiparite de program si nu trebuie sa astepte pana cand programul termina de rulat. O alta chestie utila este ca in momentul in care termina de rulat, daca programul se finalizeaza cu bine editorul emite un beep, iar daca programul da la un moment dat o eroare, da un alt fel de beep. Asa ca daca rulez un program care ruleaza mai mult timp, pana cand aud unul dintre beep-uri pot face altceva pe computer, nu trebuie sa tot verific daca a terminat de rulat. In plus, daca la un moment dat vreau sa opresc programul care ruleaza, pot apasa o combinatie de taste si programul se opreste, nu trebuie sa astept pana termina.
O facilitate utila este si ca se pot seta oricate bookmark-uri, ca in EdSharp, dar combinatiile de taste imi par a fi mai usor de folosit. Si in fond o importanta facilitate este ca in TextPad se pot seta combinatii de taste pentru oricare dintre optiunile din meniu, asa ca fiecare isi poate seta combinatii mai accesibile pentru facilitatile folosite mai des.
Imi place de asemenea ca cu o singura combinatie de taste se poate sari de la anumite caractere la caracterul lor pereche, sau se poate selecta tot ce apare intre aceste caractere tot cu o singura combinatie de taste. Caracterele pereche acceptate sunt (), [], {} si <>. Imi place in special ca se ofera si <> ca sa pot selecta rapid intreg continutul unui element HTML de exemplu.
TextPad permite modificarea tipului de codare si a sfarsitului de linie Unix/Mac/Windows in momentul in care se salveaza fisierul, ceea ce este util fiindca putem lucra la un anumit fisier existent, ii putem modifica de exemplu tipul de sfarsit de linie si il putem salva intr-un alt fisier fara sa fie nevoie sa facem setari in editor pentru fisierul existent.
Imi place si ca daca selectez un text pe o linie pot vedea in status bar cate caractere sunt selectate, dar daca selectez mai multe linii, imi spune cate linii sunt selectate. Asta ma ajuta fiindca pot selecta rapid cu o combinatie de taste continutul unei functii si pot vedea imediat daca acea functie are 7 linii sau 70, ca sa ma pot orienta mai bine si sa vad cam cu ce bucata de cod am de a face.

TextPad are insa o foarte mare problema pe care se pare ca producatorii nu o prea pot rezolva de multa vreme. Au adaugat de multi ani tot felul de facilitati, au adus multe imbunatatiri, dar asta care este sigur cea mai importanta a ramas tot nerezolvata. Si anume TextPad nu suporta Unicode decat partial.
Mai exact suporta doar acele caractere Unicode care au echivalent si intr-unul dintre tipurile de encoding pe 8 biti pe care le suporta. Cu alte cuvinte suporta de exemplu vechile caractere şŞţŢ cu sedila, dar nu suporta noile lor variante cu virgula, care apar doar in setul de caractere Unicode.
Daca aceasta problema ar fi rezolvata, atunci as putea spune ca TextPad este perfect, cel putin din punctul meu de vedere.

Un alt editor, la care se lucreaza mult mai intens decat TextPad si care are un succes comercial mult mai mare, probabil ca este cel mai bine vandut editor, este UltraEdit.
Acest editor suporta foarte bine Unicode, suporta si cautari cu regular expressions, permite si rularea programelor din editor, la fel ca TextPad permite afisarea rezultatului programului intr-o noua fereastra document, deci rezultatul este foarte accesibil, insa spre deosebire de TextPad, rezultatul este afisat doar dupa ce programul termina de rulat, iar unele programe ar putea rula si ore, zile, saptamani. In plus, o alta problema a UltraEdit este ca odata programul pornit, nu mai poate fi oprit.
Permite si el selectarea intre caractere pereche, adaugarea de bookmark-uri, salvarea cu sfarsit de linie Unix/Mac/Windows, are un dialog pentru find/replace accesibil. Afisarea numarului de linie in status bar se face doar cand liniile se afiseaza si in stanga campului de editare, ceea ce pentru orbi este cam nasol fiindca numarul liniilor este citit la fiecare mutare a cursorului de pe o linie pe alta.
Numarul de caractere selectate este afisat mai ciudat, si anume inmultit cu 2, ca si cum ar fi numarul de bytes selectat daca textul ar fi codat UTF-16, fiindca de exemplu si daca se selecteaza un simplu caracter "a" se afiseaza ca sunt 2 bytes selectati, desi "a" are un singur byte daca fisierul curent este codat UTF-8.
Dupa ce termina de rulat programul curent, UltraEdit nu face nicun fel de beep.
Le-am scris celor care au facut acest program si ultima data pareau ca chiar vor sa adauge facilitatile despre care le-am spus ca lipsesc si au spus ca ar fi intr-adevar utile. Cine stie insa cand le vor adauga sau daca le vor adauga. Oricum, suportul oferit de cei care fac UltraEdit este mult mai bun decat cel oferit de cei care fac TextPad. De fapt pentru TextPad aproape ca nu se ofera niciun fel de suport.
Ma rog, si pretul UltraEdit este mult mai mare decat cel al TextPad.

Am mai testat editorul EditPlus, care si el este destul de bun, insa in ordine din punctul de vedere al facilitatilor oferite este dupa TextPad si UltraEdit.

Un alt editor pe care l-am testat doar partial, care este si gratuit si care la prima vedere pare sa aiba toate facilitatile de care am nevoie (desi nu sunt chiar sigur), este Notepad++.
Din pacate acest editor nu este suficient de accesibil cu Jaws. Am inteles insa ca este accesibil cu NVDA, deci daca cumva folosesti NVDA ar putea fi cea mai buna solutie.
Daca selectezi de exemplu cateva litere dintr-un cuvant sau cateva cuvinte dintr-o linie in Notepad++, JAWS nu citeste nimic, iar asta nu e deloc OK.
Notepad++ se bazeaza pe widget-ul open source Scintilla care este folosit si in alte editoare cum este SciTe, si acel widget creaza problemele de accesibilitate, deci daca Jaws nu este imbunatatit sa poata suporta acel widget cum poate NVDA, atunci nu stiu daca cei care au creat Notepad++ ii pot aduce imbunatatiri. Habar n-am.

Este ciudat daca spui ca ai salvat fisierul ca Latin1 si ai <?php session_start() ... in prima linie dar totusi iti da acea eroare. Ar fi interesant de vazut cum arata acel fisier cu un editor care iti permite sa vezi codul hexazecimal. Cu TextPad se poate face si asa ceva. In acel caz ai vedea daca fisierul nu incepe totusi cu ceva caractere mai ciudate.

Dar apropos, nu este nevoie sa imi spui "dvs" :-)
Kov.Kriszti
Plutonier major
Mesaje: 218
Membru din: 16 Noi 2009, 14:54
Localitate: Romania

Mesaj de Kov.Kriszti »

Am descărcat editorul Notepad++ și până în acest moment sunt mulțumit. Am reușit să pornesc și session-ul convertind fișierele la UTF-8 fără bom. Dar aventura nu se închee aici pentru că cu această reușită codul php apare în sursa care o deschid în browser. Deasemenea o parte din cod apare inclusiv pe pagină în browser, cu funcții, comentarii etc.
Kov.Kriszti
Plutonier major
Mesaje: 218
Membru din: 16 Noi 2009, 14:54
Localitate: Romania

Mesaj de Kov.Kriszti »

Până la urmă a fost alarmă falsă. Faza era următoarea: în meniul codare există două obțiuni: "convertește la UTF-8 fără BOM" și "Codare UTF-8 fără BOM". Când mi s-a întâmplat eroarea era setată prima opțiune și se manifesta astfel: aveam într-un echo un tag de redirecționare iar după semnul > cred că interpreta ca și cum aș fi ieșit din secvența php și apărea codul așa direct pe pagină ca și cum ar fi fost între tagurile lui body text simplu. De asemenea a dispărut codul php și din sursa browserului. Deci per total totul e bine. Mulțumesc pentru sfaturi.
Kov.Kriszti
Plutonier major
Mesaje: 218
Membru din: 16 Noi 2009, 14:54
Localitate: Romania

Mesaj de Kov.Kriszti »

Salutare. Am încercat să fac un script care să adauge un rând într-un tabel MYSQL.
Am întâmpinat următoarea eroare:

Catchable fatal error: Object of class mysqli_result could not be converted to string

Iar pe rândul indicat de eroare este următorul cod:

mysqli_query($conexiune, "INSERT INTO nume_tabel (col1,col2,col3,col4,col5,col6) VALUES ('$var1','$var2','$var3','$var4','$var5','$var6')");

Îmi poate da cineva o explicaţie sau o rezolvare?
Scrie răspuns