Invata PHP cu punctsivirgula.ro

I. Introducere
II. Notiuni de baza
III. Notiuni avansate
IV. Aplicatii
V. Extra
C O N T I N U T
Istoricul cautarilor

Istoricul cautarilor pe un site PHP    1 ! 

In cele ce urmeaza va fi realizata o aplicatie simpla care pastreaza istoricul cautarilor efectuate de utilizatori. Ideea poate fi extinsa la alte aplicatii similare, de exemplu pentru a pastra istoricul ultimelor pagini vizitate, al comentariilor recente efectuate, etc. In toate aceste situatii mecanismul de functionare este acelasi, difera doar ce anume este persistat.

Aplicatia este una simpla si consta intr-un singur fisier PHP. Are la baza formularele, intrucat necesita transmiterea unor date de la utilizatori catre serverul web. Pentru mai multe informatii despre formulare, accesati lectia Formulare in PHP.


Mecanismul de functionare

Pentru a persista datele pe parcursul navigarii (de la o afisare a paginii la alta) aceasta aplicatie foloseste mecanismul de sesiuni.

In PHP, variabilele sunt ne-persistente (stateless). Asta inseamna ca ele exista si au o valoare doar cat timp se proceseaza scriptul in care sunt definite. La terminarea executiei, valorile se pierd.

Astfel, la o noua procesare a aceluiasi script (spre exemplu la un refresh al paginii, cand codul-sursa se executa din nou) toate variabilele se reinitializeaza si nu "tin minte" valorile de dinainte. Asta inseamna ca o navigare printr-un site cu mai multe pagini PHP consta, de fapt, intr-o serie de executii independente ale scripturilor si, in mod normal, o pagina "nu stie" ce variabile s-au definit la executiile anterioare sau pe alte pagini accesate.

Acesta este comportamentul implicit. Exista totusi si un mecanism de a persista date de-a lungul navigarii de la o pagina la alta, iar acest mecanism poarta numele de sesiune. Pentru mai multe informatii despre sesiuni, accesati lectia Sesiuni in PHP.

In aplicatia noastra, la fiecare accesare a paginii se porneste mecanismul de sesiuni PHP. Atunci cand un utilizator face submit la formularul de cautare, datele transmise vor fi stocate in sesiune (in vectorul $_SESSION care este administrat in mod automat de catre interpretorul PHP). Astfel, la o accesare a paginii, vectorul $_SESSION va contine toate datele adaugate anterior.

In continuare sunt incluse partile mai importante ale aplicatiei.


Formularul de cautare

<form method="post" action="">
	Cuvant cheie <input type="text" name="keyword" value="" />
	<input type="submit" name="trimite" value="Cauta" />
	<input type="reset" value="Curata" />
</form>

Codul PHP de persistare a unei cautari

# pornesc o sesiune
session_start();
 
// ...
 
# preiau datele existente din sesiune
if( isset( $_SESSION['cautari'] ) ) {
	$istoric = $_SESSION['cautari']; // istoric exista
} else {
	$istoric = array(); // initializez un vector gol
}
 
# verific daca a fost facut submit la formular
if( isset($_POST) && !empty($_POST['keyword']) ) {
	// adaug termenul cautat
	array_push($istoric, $_POST['keyword']);
 
	// stochez totul inapoi pe sesiune
	$_SESSION['cautari'] = $istoric;
 
	// e posibil sa fac alte procesari aici
	// de exemplu sa afisez lista de rezultate
}

Codul PHP de afisare a istoricului cautarilor

# verific daca exista istoric salvat
if( empty( $istoric ) ) {
	echo 'Nu ati cautat nimic pana acum';
 
} else {
 
	# cum exista deja un istoric, il afisez
	echo '<ul>';
 
	# folosesc o structura repetitiva care parcurge vectorul si afiseaza datele lui
	foreach($istoric as $termen) {
		echo "<li>$termen</li>";
	}
 
	# afisez cate elemente exista
	echo '</ul><p>', 'Cautari efectuate: ', count( $istoric ), '</p>';
}

Aplicatia este disponibila pentru testare aici (click pentru a accesa). De asemenea, puteti descarca fisierul PHP si sa il incercati pe serverul vostru local: istoric.php

Andrei a spus Ajutor - 06.10.2014

As vrea sa imi dai adresa ta de email sau de facebook deoarece as vrea sa ma ajuti la ceva, sunt incepator si imi e greu sa ma acomodez, dar am niste intrebari si nu gasesc raspuna.. vreau sa fac o "pagina web de cam 60 de file"
si as vrea sa ma ajuti putin la primele 2 pagini deoarece nu stiu cum sa le fac (am niste idei despre cum ar arata dar nu stiu sa le pun in aplicare)


Adauga un comentariu la aceasta sectiune.