Lapozó PHP-val


A minap ráfutottam arra, hogy a szokásos számos lapozó helyett (1-10 || 11-20 … stb ) ABC-s kell a megrendelőnek. Az adatbázisában szereplő személyeket akarja listázni úgy, hogy mindig a nevük elso harom betűjet látod Pl: Aba Samueltol Budai Attilaig ezt: Aba – Bud.

A lapozó scriptnek viszont nem csak a személytörzsön, hanem minden névvel ellátott adatbázison futnia kell, így egy SQL változót is kapott, hogy minden kritériumnak megfelelő táblán futtatni lehessen.

Először csatlalkozunk az adatbázishoz:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 define ('SQL_SERVER','localhost');
 define ('SQL_USER','root');
 define ('SQL_PASS','root');
 define ('SQL_DATABASE', 'database');
 
connect ();
 
function connect () {
	$connection  = mysql_connect (SQL_SERVER,SQL_USER,SQL_PASS) or die("Nem tudok kapcsolódni az adatbázishoz!<br>".mysql_error());
 
	define ("CONNECTION", $connection);
	mysql_select_db(SQL_DATABASE, CONNECTION ) or die ( "Nem lehet megnyitni az adatbázist: ".mysql_error() );
	@mysql_query('SET CHARACTER SET latin2'); //<--- különben nem fogja szeretni a 4.x+ mysql az õû-t
 
}

Aztán egy SQL futtató segédfüggvényt írunk:

1
2
3
4
5
function runQuery($query) {  // query futtato
 
	$result = mysql_query ($query, CONNECTION) or die ("Nem sikerült a lekérdezés:<br><b>$query<br><br>".mysql_error());
	return $result;
}

Majd jöhet a lapozó maga:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function lapozo($min,$sql,$url){ //lapozo fuggveny
	$limit=10;	//hanyasaval keszitse az oldalakat
	$query=$sql." limit ".$min.", ".$limit;
	$query2=$sql;
	$result=runQuery($query2);
	$array=runQuery($query);
	$szamresult=runQuery($query2);
	$szam=mysql_num_rows($szamresult);	//osszes darabszam
	$i=0;
	while($row=mysql_fetch_array($result)){	//tombbe attoltjuk a nevek elso 3 betűjét
		$lap_array[$i]=substr($row["name"],0,3);
		$i++;
	}
	$db=floor($szam/$limit);	//hany lap lesz
		//BALRA LAPOZO
		print '<center>';
		print '<a href="'.$url.'"><img src="img/btn_page_home.gif" border="0"></a>&nbsp;&nbsp;';
		if($min==0){
			print '<a href="#"><img src="img/btn_page_left.gif" border="0"></a>&nbsp;&nbsp';
		}else{
			print '<a href="'.$url.'?min='.($min-$limit).'"><img src="img/btn_page_left.gif" border="0"></a>&nbsp;&nbsp';
		}
		$i=0;
		//KIMENET
		if(($szam%$limit)==0){
			while($i<$db){
				print '<a href="'.$url.'?min='.($i*$limit).'">'.$lap_array[($i*$limit)].'-'.$lap_array[(($i*$limit)+($limit-1))].'</a>&nbsp;||&nbsp;';
				$i++;
			}
		}else{
			while($i<=$db){
				print '<a href="'.$url.'?min='.($i*$limit).'">'.$lap_array[($i*$limit)].'-'.$lap_array[(($i*$limit)+($limit-1))].'</a>&nbsp;||&nbsp;';
				$i++;
			}
		}
		//JOBBRA LAPOZO
		if($min==($db*10)){
			print '&nbsp;&nbsp;<a href="#"><img src="img/btn_page_right.gif" border="0"></a>';
		}else{
			print '&nbsp;&nbsp;<a href="'.$url.'?min='.($min+$limit).'"><img src="img/btn_page_right.gif" border="0"></a>';
		}
		if(($szam%$limit)==0){
			print '&nbsp;&nbsp;<a href="'.$url.'?min='.(($db-1)*$limit).'"><img src="img/btn_page_end.gif" border="0"></a>';
		}else{
			print '&nbsp;&nbsp;<a href="'.$url.'?min='.($db*$limit).'"><img src="img/btn_page_end.gif" border="0"></a>';
		}
		print '</center>';
	return $array;
}

Ezt elmenthetjük egy function.php fileba, hogy később csak meghívni kelljen a lapozo.php-ban. Létrehozunk egy lapozo.php-t, amibe csak pár sor kerul, vagy ezt a pár sort másold be oda, ahol használni akarod a te oldaladban:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
	require_once("function.php");
	if (!$_GET['min']) $min = 0; else $min = $_GET['min'];
	$sql="select * from user order by name";
	$url=$_SERVER['PHP_SELF'];
	$result = lapozo($min,$sql,$url);
	//Tomb listazasa
	while($row=mysql_fetch_array($result)){
		print $row["name"]."<br>";
	}
?>

Meghívjuk az oldalba a function.php-t, vizsgáljuk hogy paraméterben jött-e minimum, ha nem, 0-t állítunk be. Az $sql változóba adunk egy select utasítást, ügyeljünk a szintaktikára. Az $url önmagára hivatkozik, de persze át is írhatod magadnak.

Végül meghívjuk a függvényt és eredményét egy result tömbbe pakoljuk. Később a tömböt egy egyszerű bejárással kiiratjuk.
Az oldalon középen egy lapozót kapunk, míg alatta az eredményhalmazt. Használjátok egészséggel.

A leíráshoz tartozó kódok és példa letölthető: lapozo.zip (3kb)

A leírást készítette és beküldte (szerző): Gelidan

Kapcsolódó bejegyzések:
  • A cikk a mambo 4.0.x ideje alatt készült, a mostani 4.5.x-es sorozatban lehetnek ehhez képest eltérő megoldások és módszerek. A mambo-ban default telepít …

  • Ezt a kis kódrészletet azért osztom meg, mert sok javascriptes megoldást láttam már a dátum kiíratására. Alapból nekem nem tetszett, ahogy a php kiírja a date fü …

  • Na ez egy elég komoly tutorial, php és MySQL kell az elkészítéséhez! Első lépésként csináljunk egy MySQL táblát!CREATE TABLE `shoutbox` ( `id` INT(1 …

  • Az alábbi leírásban található tutorial alapján nemsokára Te is naplózhatod az oldaladon, hogy 1-1 laphoz ki, honnan stb.. fért hozzá. A megoldás folyamán szükség …

  • Ez a leírás igyekszik bemutatni a PHP és a MySQL viszonyát a kapcsolódástól egészen az első lekérdezésig. A leírás készítésekor úgy veszem, hogy van egy webszer …

A cikket beküldte: Harder (http://blog.harder.hu)

11 hozzászólás

  1. Scr34m says:

    Pár észrevétel ha tutorialról van szó:
    – a $min értéket jó lenne ellenőrizni mert így bizony bármilyen érték bekerülhet
    – if (!$_GET[‘min’]) $min = 0; else $min = $_GET[‘min’]; ez így nem elégséges ehelyett legalább is_numeric() ellenőrzés vagy intval() kellene
    – print utasításban $min egyszerűen user interface-re kiküldve további problémát okohzhat.
    – $query=$sql.” limit “.$min.”, “.$limit; ez pedig egyenesen az XSS melegágya

  2. Hápi says:

    Nekem az sql-el kapcsolatban lenne egy eszrevetelem, celszerubb lenne egy config filet csinalni neki, igy valahogy:

    $szerver = ‘localhost';
    $felhasznalo = ‘root';
    $jelszo = ”;
    $adatbazis = ‘teszt';
    $kapcsolat = mysql_conect($szerver, $felhasznalo, $jelszo);
    mysql_select_db($kapcsolat, $adatbazis);
    or die include ‘404.php';
    azert jobb igy szerintem, mert jobban tudja hasznalni egy nem hozza erto egyen, egyebkent koszi a tutorialt.

  3. gelidan says:

    Koszi az eszreveteleket, nalam egy config fileban van a connect parameter, egy function fileban vannak a fuggvenyek es egy harmadik maga a lapozo :x)

    Az XSS-es temahoz meg igaz, koszi az infot.

  4. csikcsongor says:

    Nem ertek a php hez.
    De szeretnem az
    xls, excel -t szotaramat internetre rakni.

    A legegyszerubb megoldas erdekel, hogy egy kereso, minden sor elejen
    talalhato szora keressen ra. fuggetlenul a tabok szamatol. Eredmenykent az adott sort,
    illetve sorokat dobja ki, amiben a keresett szot megtalalta. Milyen formatumba muszaj atrakni
    az xls – t ? Valaki irjon legyszi egy php -t hozza es html filet hozza.

    Koszi.
    mailcimem a honlapomon a guestbook nal

  5. Harder says:

    Ha fizeted a programozás árát, lehet hogy lesz rá jelentkező. Sok sikert hozzá.

  6. gorgo says:

    Helló Csongor!

    Nagyon szivesen megcsinálom neked ingyen ezt az egyszerű kis scriptet, ha felkerülhet a nevem mint készítő a honlapra. Ha érdekel az ajánlatom dobj egy emailt a gorgo08[kukuc]gmaicom-ra.

  7. csikcsongor says:

    gmail. com ?
    koszi ! 2 helyrol is kuldtem emailt neked, varom a valaszt ! Koszi !

  8. csikcsongor says:

    Hello barki !
    Hasonlo feltetellel, (ingyen) varom, hogy valaki segitsen, koszi !

  9. csikcsongor says:

    milyen formatumba muszaj atkonvertalni az xls, excel filet ahhoz hogy internetes kereso tipusu szotart keszithessek ? csak a keresett szovegreszekhez tartozo sorokat kellene kiadnia egy oldalon a “szotar” nak. Koszi !

  10. asziszt83 says:

    Szia

    Le tudnád írni, hogy min kell módosítani, hogy számozásos legyen a lapozó,

    Köszi!!

  11. Ádám says:

    Az lenne a problémám ha mysql adat táblám sorai egyel több mint a limit szorzatai akkor ezt a hibát irja ki.

    Notice: Undefined offset: 143 in D:\CUC\EasyPHP-5.4.0RC4\www\function.php on line 80
    80. sor: print '<a href="' . $url . '?page=' . ($i * $limit) . '" rel="nofollow">' . $lap_array[($i * $limit)] . '-' .$lap_array[(($i * $limit) + ($limit - 1))]. '</a>';

    és az utolso lapfülnél csak a kezdödö nevét irja az ucsot nem. Kódilag mit kéne modositani? Remélem minél hamarabb tudtok nekem segiteni. Válaszotokat elöre köszönöm.

Szólj hozzá
a Lapozó PHP-val c. bejegyzéshez

- Engedélyezett HTML elemek: <a> <em> <strong> <ul> <ol> <li>
- Forráskód beküldéséhez tedd a kódot ezek közé: <pre lang="php" line="1">Kódrészlet helye itt</pre>