ugrás a tartalomhoz

Lapozás egyszerűen!

hunge · 2005. Nov. 27. (V), 18.42
Üdv néktek!

Elég sokat vesződtem a lapozás megvalósításával így úgy gondoltam, hogy rászánom azt az órát ameddig az tart hogy ide leírjam, más hozzám hasonló kezdők boldogulását megkönnyítendő. Amit leírok egy példa ami bemutatja az elgondolást. Mivel a script ami írtam közel 200 sor így átírom lerövíditve. Szóval Legyen egy zöldség táblánánk amiből táblázatba szeretnénk megjeleníteni a zöldéségeket természesetesen úgy, hogy a használó eldönthesse hogy milyen paraméter szeriniti sorba rendezést akar.Nohát akkor lássuk a kódot:

<?php
	$Nev=$_SESSION['user'];//felhasználó neve és jelszava
	$Kod=$_SESSION['Kod'];

	$hogyan=azon; //alap értelmezett rendezések hogy első futásnál
	$sor=asc;//is megjelenítse az itt megadottak szerint
	$tol=0;
			
	if ($_POST[megnez]=="igen"){ //a felhasználó már beküldte az ürlapot akkor az ő
	$hogyan=$_POST['Rendezo'];//álltal megadottak szerint rendezünk
   	$sor=$_POST['Sorozo'];
   	$tol=$_POST['OldalValaszt'];      
	} 
	
	function tablamegj(){
		global $Nev;
		global $Kod;	//a global utasítás azért kell mert nélküle nem érnénk el a hatókörön 
		global $hogyan; // kívüli változókat
		global $sor;
		global $tol;
 								
		$kapcs=Mysql_connect("localhost",$Nev,$Kod)or die(mysql_error());
 		mysql_select_db("zoldseges",$kapcs)or die(mysql_error());
 		$Zoldseglekerd= "Select * from Zoldseg order by $hogyan $sor Limit $tol,10";		

      		$Zoldsegeredm=mysql_query($Zoldseglekerd) or die(mysql_error()); //lekérdezzük a 
		//zöldségeket és az eredményt az eredmény változóba rakjuk 

		//a fejléc létrehozása
     		$temalista = " 			
	   	<div id='zoldseges css osztaly'> 
		<tr>		
		<th class= 'Tablazatfejlec'>Azonosító</th>
		<th class= 'Tablazatfejlec'>Zöldség név</th>
		<th class= 'Tablazatfejlec'>Zöldség ár</th>
		<th class= 'Tablazatfejlec'>Rendelkezése áll menny
		</th>
		";
		//a táblázat sorainak generálása az eredmény alapján		
		while ($tema_info = mysql_fetch_array($Zoldsegeredm)){
				$Zazon= $tema_info['Zazon'];
				$ZNev= $tema_info['ZNev'];
				$Zar= $tema_info['Zar'];
				$ZMeny= $tema_info['ZMeny'];
				
				$temalista .= "
				<tr>
				<td>$Zazon</td>
				<td>$ZNev</td>
				<td>$Zar</td>
				<td>$ZMeny</td>
				</tr>";
		}//while vége	
		$temalista .= "</table> </div>";
		return $temalista; //visza adjuk a témálista függvény eredményét a kész táblázatot
	 }//function tablamegj vége ?>

<?php
function lapozo(){
		$menu="Oldal Választó: <select name='OldalValaszt' size='3'>";		
		$nav=0;
		$minnav=0;
		global $Nev;
		global $Kod; //kapcsolodunk az adatbázishoz mint korábban de most más a lekérdezésünk
//mivel az elemek számát akarjuk megtudni 
		$kapcs=Mysql_connect("localhost",$Nev,$Kod)or die(mysql_error());
 		mysql_select_db("zoldseges",$kapcs)or die(mysql_error());
		$szam= "Select * from Zoldseg";
 		$szameredm=mysql_query($szam) or die(mysql_error());
 		$elemszam= mysql_num_rows($szameredm)or die(mysql_error());
		//a ciklus select elemet tölti fel a mysqltől kapott elemszamig 
		while ($nav<= $elemszam){
				$nav=$nav+10; 
// a léptetésre szolgál
				$navvalue=$nav-10; 
 // a select elem értéke ugyanis a limit ettől az értéktől a
// második számmal jelzett értékig működik. pl: limit 20 10
// akkor 20,21,22...30 lesz. Ezt használjuk ki a $tol-lal.
				$minnav=$nav-9; 
//megjeleníténél a kisebb elem
				if ($nav+1>$elemszam){ 
//ha a szám nagyobb lenne mint az elem szám akkor 
//ide be lép és a végső elem = az elemszámmal vagyis ha 56 elmünk
//van akkor nem 51-60 lesz a select ben hanem 51-56 
				$nav=$nav-9; 
				$minnav=$elemszam;$menu.="<option value=$nav>$nav - $minnav  </option>"; break;
				}
				$menu.="<option value=$navvalue>$minnav - $nav</option>";															
		}
$menu .="</select>";	
return $menu;
//lapozo fuggveny vege értékek viszadása.
}
?>
saját
.H
.T   (menű)
.M   (képek) 
.L   (stb)
.
.K
.ó
.d

<form action='<?php echo $_SERVER[PHP_SELF]?>' method='post'>
		Rendezés:
		<select name='Rendezo' size='2'>
		<option value='ZNev'selected="selected">Zöldség név szerint</option>		
		<option value='Zazon'>Azonosító szerint</option>
		<option value='Zar'>Zöldség ár szerint</option>
		//stb	
		</select> 

		Sorrend:
		<select name='Sorozo' size='2'>
		<option value='asc' selected="selected">normál sorrend</option>
		<option value='desc'>fordított sorrend</option>
		</select>
			
		<?php print lapozo();?>		
		<input  type='submit' name='ok' value='Rajta!' size='20'>
		<input type='hidden' name='megnez' value='igen'> 
		
		</form>		
<?php
if ($sor==asc){$modja=Normál;}
if ($sor==desc){$modja=Fordított;}

print "<i>A rendezés típusa:</i> <strong>$hogyan</strong> <i>Módja:</i> <strong>$modja </strong> ";	 
print tablamegj();
?>
Ez a kód egy "rövidített" változat sajátomból a könnyebb érthetőség véget,nem néztem át pláne nem futattam , ezért elképzelhető, hogy került bele hiba de az elv működik! Megaztán amúgy se a konkrét paramétereket használnátok fel (hanem az elvet), kivéve persze aki zöldséges bolt adatbázis tervez készíteni... :-)

Korlátok: A 3. php álltal generált paramétert kézzel kell kiválasztani.Ott jelenformába nem működik a selected (vagy ha még is beírjátok akkor minidig az utolsó elötti 10es elemszámot választja ki) De ez egy "if első 10 érték, akkor selected beszurása", feltétellel kiküszöbölhető.Hasonlóan az ifszám nagyobb mint összelem feltételhez.
Továbbá Kiegészíthető a lapozás mértékének változtatásával.
De erre most nem jutot időm.


Hát ennyi. Remélem lesz akinek segítek vele.


Kérdés az expertekhez: hogy tudok értéket átadni 2 függvény között? Arra gondolok hogy a táblamegj függvénybe már kapcsolódok az adatbázishoz mivel ott kérem le a neveket, akkor ugyanott megírhatnám a darabszám lekérdezést is feltéve ha tudnám hogy az ott kapott darabszámot hogy érem el a 2. függvénybe.(akkor nem kéne 2* kapcsolódni az adatbázishoz) Tud valaki ebbe segíteni?
 
1

Nem kell ketszer csatlakozni...

Grandmaster · 2005. Nov. 27. (V), 22.01
Miert kellene ketszer csatlakozni?

Idezet a manualbol:
"Ha a kapcsolatazonosító nincs megadva, akkor az utólsó mysql_connect()-el megnyitott kapcsolatot használja. Ha nem talál semmilyen kapcsolatot, megpróbál létrehozni egyet úgy, mintha a mysql_connect() paraméterek nélkül lett volna meghívva. Ha esetleg semmilyen kapcsolatot nem talál és nem is sikerül létrehoznia, akkor egy E_WARNING szintű figyelmeztetés generálódik."

A kapcsolatazonosito a query fuggveny masodik parametere.

Egyebkent ez a lapozo kod tobb sebbol is verzik. Pl: globalis valtozok tomkelege, "SELECT COUNT(*) AS darab FROM Zoldseg" sokkal jobb lekerdezes, etc.
2

Javítsuk!

hunge · 2005. Nov. 28. (H), 09.24
Ebbe biztos voltam, ugyanis csak párhete kezdtem el phpzni (programozni) és ezt a kódot is _kezdőként_ 1.5 napig írtam, namost én úgy gondoltam, hogy ez nem egy szép de viszont működő kód és leírom ide hátha idevetődik egy (hozzám hasonló) kezdő akkor ne kelljen neki ezzel molyolnia hanem csak átír pár mezőt és van egy nagyon alap de működő kódja. Namost a profik nyilván valami jobb megoldás jutna eszükbe és teljesen biztos vagyok hogy jobban is írnák meg de ez a hozzászólás nem nekik szól!

Különben Nem várok el se tapsikolást se semmi hasonlót, tisztán jó szándékból írtam, nem kevés időt rászánva , de azt szeretném, hogy ha hiba van benne (már pedig van, lásd első soromat) akkor nem egy üres "több sebből vérzik" frázissal válaszolod meg hanem akkor javitsuk ki együtt! pl: ne használj globális változót hanem használd ezt "...kód..." stb. Hasonlóan a lekérdezésjavításához...

u.i: a manual ezen részét még nem olvastam köszönöm hogy felhívtad rá a figyelmemet.

Köszönöm
Üdvözlettel Hunge
3

Nem allt szandekomban

Grandmaster · 2005. Nov. 28. (H), 11.23
Elnezest Hunge, nem azert szoltam, mert mindenaron kotozkodni szerettem volna, csupan arra felhivni a figyelmet, hogy erdemes meg atnezni a kodot. Kijavitassal meg szerintem ne itt foglalkozzunk, ha kerdesed van keress meg az elerhetosegeim valamelyiken! Szivesen segitek.

Ui: a programozas alapjai I. tanarom mindig azt mondta, hogy az nem eleg, ha egy programkod mukodik, helyesnek is lenni kell. :)
4

Kérés elfogadva.

hunge · 2005. Nov. 28. (H), 13.01
Én pedig köszönöm a segítségedet!

Ha szükségem lesz rá élni fogok vele.

-könyen lehet hogy hamarosan írok mivel van egy feletébb bosszantó és "szűnni nem akaró" mkdir() függv problémám. De egyenlőre még szenvedek vele magam-

Üdv hunge