ugrás a tartalomhoz

Egyszerű lapozó.

Zolcsika · 2011. Jan. 5. (Sze), 16.56
Üdv!

Van egy oldalam ahol while függvénnyel kiíratok elemeket.
Első kérdésem, hogyan tudnék kiíratni csak 12 dbot nem többet.
A lap aljára meg olyan egyszerű lapozót szeretnék, ami két nyílból áll balra és jobbra, ha a jobbra nyílra kattintanak akkor ugrik a következő 12 db létező ID számú bejegyzésre és azokat íratja ki. természetesen ha a bal oldalira kattintanak akkor vissza lépeget. Viszont kikötés is kellene bele, mégpedig hogy ha az ID egyenlő a legkisebbel akkor visszafelé ne tudjon lépni ha pedig a legnagyobbal akkor előrefelé ne tudjon lépni.

Valaki tudna nekem ebbe segíteni? előre is köszönöm

Üdv!
 
1

Első kérdésem, hogyan tudnék

kuka · 2011. Jan. 5. (Sze), 17.18
Első kérdésem, hogyan tudnék kiíratni csak 12 dbot nem többet.
Megkéred az adattárolót, hogy csak 12 darabot adjon át.

Dögivel lehet találni ilyent, csak keresni kell.
2

While

Poetro · 2011. Jan. 5. (Sze), 18.06
Van egy oldalam ahol while függvénnyel kiíratok elemeket.
Első kérdésem, hogyan tudnék kiíratni csak 12 dbot nem többet.
<?php
$counter = 0;
while ($counter < 12) {
  // megcsinálom, amit akarok
  // ...

  $counter++;
}
?>
És hozzátenném, hogy a while az nem függvény, hanem mondjuk while ciklus, kifejezés, kulcsszó, utasítás stb.
A lap aljára meg olyan egyszerű lapozót szeretnék, ami két nyílból áll balra és jobbra, ha a jobbra nyílra kattintanak akkor ugrik a következő 12 db létező ID számú bejegyzésre és azokat íratja ki.

Eltárolod hogy éppen melyik oldalon áll, alapértelmezetten mondjuk a 0-on, és GET változóban átadod, hogy melyik oldalra szeretne lépni.
<?php $page = isset($_GET['page']) ? max(intval($_GET['page']), 0) : 0; ?>
<?php if ($page > 0): ?>
<a href="?page=<?php print $page - 1; ?>">Előző</a>
<?php endif; ?>

Aktuális oldal: <?php print $page; ?>

<?php if ($page < $max - 1): ?>
<a href="?page=<?php print $page + 1; ?>">Következő</a>
<?php endif; ?>
3

Köszönöm szépen fáradozásod

Zolcsika · 2011. Jan. 5. (Sze), 18.47
Köszönöm szépen fáradozásod remélem működni fog, viszont nekem a while ciklus! az így írja ki az adatokat. Hogyan helyettesítsem be még pluszba a te kódod is h jó legyen?

<?php
include('dbconn.php');
$eredmeny = mysql_query("SELECT * FROM filmek WHERE moderate = 1 ORDER BY id DESC");
print "<table bordercolor=darkgrey cellspacing='0' width='100%' height='90%' border=1 bgcolor=lightgrey>";
$hanyszor = 0;
while($sor = mysql_fetch_array($eredmeny)){
if(!is_float($hanyszor / 4) && $hanyszor != 0){
print "<tr>";
}
?>
<td onMouseOver="style.backgroundColor='darkgray';" onMouseOut="style.backgroundColor='lightgrey';" align="center">
<div id="bubble_tooltip">
<div class="bubble_top"><span></span></div>
<div class="bubble_middle"><span id="bubble_tooltip_content"><?php print $sor['cim'] ?></span></div>
<div class="bubble_bottom"></div>
</div>
<a href="movie.php?id=<?php print $sor['id'] ?>" onMouseMove="showToolTip(event,'<?php print $sor['cim'] ?><br>Megtekintés: <?php print $sor['latogatas'] ?>');return false" onMouseOut="hideToolTip()"><img src="<?php print $sor['cover'] ?>" width="120" border="0"></a></td>


<?php
++$hanyszor;
}
print "</tr></table><br><br>";
mysql_close($con);
?>
4

Gondolkodj

Poetro · 2011. Jan. 5. (Sze), 19.04
Gondolkodtál rajta legalább 10 percet? Hallottál már az és operátorról (&& illetve and)?
5

operátor.

Zolcsika · 2011. Jan. 5. (Sze), 19.43
gondolkodtam valamennyit próbálgattam párféle képpen egyberakni a kódoddal de nem sikerült. Viszont most utánanézek annak amit írtál, és elhiheted, hogy ha tudtam volna h léteznek operátorok (aminek mindjárt utánanézek) bizonyára azzal kezdtem volna... de még van mit tanulnom. nah majd jelentkezem :)
6

Elég ha...

neogee · 2011. Jan. 5. (Sze), 20.14
Elég, ha a feltételekről hallottál már a programozással kapcsolatban. :)
Mert akkor tudnád hogy lérezik egyszerű és összetett feltétel. És ha hallottál már a while ciklusról ami egy (elől)TESZTELŐS CIKLUS, akkor hallanod kellett a feltételekről is, hiszen a tesztelős ciklusokat a feltétel teljesülése illetve nem teljesülése irányítja, mivel ügye azt teszteli...
Egyébkén ebben a kontextusban a $row = mysql_.... is egy feltétel ami mindaddig igaz lesz, amíg a lekérdezés eredményeként kapott sorok el nem fogynak. Ugyanis az értékadás logikai értéke mindig igaz.
7

haladás

Zolcsika · 2011. Jan. 5. (Sze), 20.25
Nah csak alakul... jelenleg ott tartok h sikerült 12 elemet kiíratnom.
<?php
include('dbconn.php');
$eredmeny = mysql_query("SELECT * FROM filmek WHERE moderate = 1 ORDER BY id DESC");
print "<table bordercolor=darkgrey cellspacing='0' width='100%' height='90%' border=1 bgcolor=lightgrey>";
$counter = 0;
$hanyszor = 0;
while($counter < 12&&$sor = mysql_fetch_array($eredmeny)){
if(!is_float($hanyszor / 4) && $hanyszor != 0){
print "<tr>";
}
?>
<td onMouseOver="style.backgroundColor='darkgray';" onMouseOut="style.backgroundColor='lightgrey';" align="center">
<div id="bubble_tooltip">
<div class="bubble_top"><span></span></div>
<div class="bubble_middle"><span id="bubble_tooltip_content"><?php print $sor['cim'] ?></span></div>
<div class="bubble_bottom"></div>
</div>
<a href="movie.php?id=<?php print $sor['id'] ?>" onMouseMove="showToolTip(event,'<?php print $sor['cim'] ?><br>Megtekintés: <?php print $sor['latogatas'] ?>');return false" onMouseOut="hideToolTip()"><img src="<?php print $sor['cover'] ?>" width="120" border="0"></a></td>


<?php
++$counter;
++$hanyszor;
}
print "</tr></table><br><br>"; ?>
<?php $page = isset($_GET['page']) ? max(intval($_GET['page']), 0) : 0; ?>  
<?php if ($page > 0): ?>  
<a href="?page=<?php print $page - 1; ?>">Előző</a>  
<?php endif; ?>  
 
Aktuális oldal: <?php print $page; ?>  
 
<?php if ($page < $max - 1): ?>  
<a href="?page=<?php print $page + 1; ?>">Következő</a>  
<?php endif; ?>
<?php
mysql_close($con);
?>


</body>
</html>


Viszont az oldal alján Csak annyit ír ki, hogy Aktuális oldal: 0
Hova tűnik a következő meg az előző szó? Nem jeleníti meg. most mit nézek be?
8

$max

Poetro · 2011. Jan. 5. (Sze), 20.39
Gondolom a $max értékét nem töltötted ki. Így mivel nincs maximális oldalszám, így nem tudni, meg kell-e jeleníteni a következő oldalra mutató linket. Persze amíg nem vezetsz be LIMIT-et a query-be addig az egésznek nincs értelme.
9

dupla

Poetro · 2011. Jan. 5. (Sze), 20.40
dupla
10

oldalak

Zolcsika · 2011. Jan. 5. (Sze), 21.06
tehát a $max értéke az a maximális oldalszámot jelenti ami esetemben gondolom az összes rekord/12.

nah közbe ezt meg is tettem.
$x = 'SELECT COUNT(*) FROM filmek';
$result = mysql_query($x) or die(mysql_error());
$total_rows = mysql_fetch_row($result);
$max = $total_rows[0]/12;


Most már működik alul a dolog (van 25 rekordom és 2ig enged lépni 0val együtt)
Akkor már ez is megvan.
Viszont a LIMIT-es dolgot a queryben azt nem értem jó értem a lekérésbe tegyek limitet. De ezt most nem vágom h hol kéne. Mégegy kis fényt kérek kösz :D

szerk.: Jah igen a lényeg az az hogy hiába lépek, ugyanazt a 12 rekordot adja vissza.
11

RTM

Poetro · 2011. Jan. 5. (Sze), 21.14
Olvasd el a LIMIT dokumentációját az illető adatbázis-kezelő rendszerben.
12

nemtduom

Zolcsika · 2011. Jan. 5. (Sze), 21.36
ok én feladom... olvassam el. elolvastam lof.szt nem értek belőle... vagyis a LIMIT az még oké megtudom adni h pl 20-22ig írja ki a rekordokat. De már most kb azt se értem ami eddig megvan. ha a page=1 el akkor h érjem el h 13-24ig írja ki a rekordokat? ez az amit nem fel nem bírok fogni... nem vagyok biztos benne h nekem való ez a php-s dolog.
13

Gondolkodni

janoszen · 2011. Jan. 5. (Sze), 22.05
Ami hiányzik, az az algoritmikus gondolkodás. Nézzük tehát:

Van mondjuk 200 sorod egy adatbázisban, ezeket 20-asával akarod kirajzolni. Egyszerűen kiszámolható, hogy ez összesen 10 oldal lesz.

Ha mondjuk a 3. oldal eredményeit akarom megkapni, akkor ugye a 40. sortól a 60. sorig akarod kiolvasni az eredményeket. Ez pontosan az oldalszám minusz egy szer 20 így néz ki az alsó limit:

$talalatperoldal = 20;
$alsolimit = ((int)$oldal-1) * $talalatperoldal);
//$alsolimit = 40
Innentől kezdve egyszerű a képlet:

$query = 'SELECT * FROM tabla LIMIT ' . $alsolimit . ',10';
Ez nagyjából hasonlítható a középiskolás szöveges matek példákhoz. Lehet, hülyén hangzik, de érdemes elszöszölni velük, javítják az ilyen irányú gondolkodási készséget.
14

Ez a lapozósdi valójában nem

neogee · 2011. Jan. 5. (Sze), 22.57
Ez a lapozósdi valójában nem elsősorban kódolási kérdés...
Ez algoritmikus kérdés. Ha tudnád, hogy a lapozásnak milyen a menete, és milyen műveleteket kell elvégezni, akkor onnantól a megvalósítás már pofonegyszerű, mert csak számolni kell. Az hogy ehhez tartozik e limit a queryben vagy sem, az gyakorlatilag mindegy. A dolog lényege, hogy adott egy elemsorozat, amiből egy intervallumra vagy csak kíváncsi. Azt a matematikai számítást kellett volna kigondolnod, amivel ennek az intervallumnak az első illetve az utolsó elemének indexét kapod meg. Ha ez a képlet megvan, akkor tulajdonképpen már csak technikai kérdés, hogy ezekkel a számokkal mit csinálsz. Adott esetben egy sql lekérdezésbe teszed bele mint határérték, vagy éppen egy ciklusba teszed bele és egy tömb elemein lépkedsz.

Amit nem tudunk, mi sem és semmilyen könyv és senki az ég világon megtanítani, az a feladat végiggondolása, és lebontása kisebb egységekre. :) És ha ezt nem tudod elsajátítani, vagy nincsen hozzá készséged, akkor ezen el kell gondolkodni. :)
15

Talan ez a kod segit, igaz

Tanul0 · 2011. Jan. 6. (Cs), 18.13
Talan ez a kod segit, igaz tobb mint amit te szeretnel. Kikommenteztem azokat a részeket amik fontosak. Ha megerted, megerted ha nem akkor meg van mit tanulnod.

A lapozo fuggvenyed:

// Lapozó függvényed.
function lapozo($link, $lap, $lapok,$l_rendez,$l_tipus){
	if($l_rendez=='' || $l_tipus==''){
		$l_rendez='';
	}else{
		$l_rendez='?rendezes='.$l_rendez.'&tipus='.$l_tipus;
	}
	$lap_link = '';
	$lap_link .='<ul class="oldalszam">';
	if($lap!=1) $lap_link .= "<li><a href=\"".$link."1\">&laquo;</a></li><li><a href=\"".$link.($lap-1).$l_rendez."\">« Előző</a></li>";
	if($lap>=6) $lap_link .= "<li><a href=\"".$link.($lap-5).$l_rendez."\">...</a></li>";
	if($lap+4>=$lapok) $lapx=$lapok;
	else $lapx=$lap+4;
	for($i=$lap-4 ; $i<=$lapx ; $i++){
		if($i<=0) $i=1;
		if($i==$lap) $lap_link .= "<li><a href='".$link."".$i.$l_rendez."' class='eppenmost'><b>$i</b></a></li>";
		else $lap_link .= "<li><a href=\"".$link.$i."\">$i</a></li>";
	}
	if(($lapok-$lap)>=5) $lap_link .= "<li><a href=\"".$link.($lap+5).$l_rendez."\">...</a></li>";
	if($lap!=$lapok) $lap_link .= "<li><a href=\"".$link.($lap+1).$l_rendez."\">Következő »</a></li><li><a href=\"".$link.$lapok.$l_rendez."\">&raquo;</a></li>";
	$lap_link .="</ul>";
	$lap_link .= "";
	return $lap_link;
}
A while ciklus feltele pedig a kovetkezo kepp nez ki

//Vizsgalando feltetelek elokszeitese
	$sql=mysql_query("SELECT * FROM tablad"); //Itt kell átírni a sajátodra a "tablad" részt
	$szamol = mysql_num_rows($sql);
	$cururl=$_SERVER['REQUEST_URI']; //Jelenlegi oldal
	$curpage=$_GET['lap']; //Lapszám
	if($szamol!==0){
	//Rendezés valamelyik mező szerint
		if($_GET['rendezes']=="DESC" || $_GET['rendezes']==""){
			$rendezes="DESC";
			if(isset($curpage) && !empty($curpage))
				$rendezo='<div class="rendezogomb"><p><a href="'.$cururl.'?lap='.$curpage.'&rendezes=ASC">Novekvo</a></p></div>';
			else
				$rendezo='<div class="rendezogomb"><p><a href="'.$cururl.'?rendezes=ASC">Novekvo</a></p></div>';
		}else{
			$rendezes='ASC';
			if(isset($curpage) && !empty($curpage))
				$rendezo='<div class="rendezogomb"><p><a href="'.$cururl.'?lap='.$curpage.'&rendezes=DESC">Csokkeno</a></p></div>';
			else
				$rendezo='<div class="rendezogomb"><p><a href="'.$cururl.'?rendezes=DESC">Csokkeno</a></p></div>';
		}
	}else $rendezo="";
	$lapok=1;
	$lap = $curpage;
	if(!isset($lap)) $lap = 1;
	$max=10; // itt allitod be az oldalankenti maximumot
	for ($n=$max; $n<=$szamol; $n+=$max){
		if($szamol>$n) $lapok++;
	}
	if($lapok>1) $lap_link = lapozo($cururl."?lap=", $lap, $lapok, $_GET['rendezes'], $_GET['tipus']);
	if ($lap == "1"){
		$sql = mysql_query("SELECT * FROM tablad ORDER BY rendezes_eszerint $rendezes LIMIT 0,$max"); //itt is írd át a sajátodra a "tablad" részt
		$n=1;
	}else{
		$start=$lap*$max-$max;
		$sql = mysql_query("SELECT * FROM tablad ORDER BY rendezes_eszerint $rendezes LIMIT $start,$max"); //itt is írd át a sajátodra a "tablad" részt
		$n = $hszszamol-($lap-1)*$max;
	}
	//A lapok kiírása felülre
	echo $lap_link;
	//Vizsgálat while ciklussal
	while($row=mysql_fetch_array($sql)){
		//Adatok lekérdezése 
		$peldamezo=$row['peldamezo'];
		
		echo $peldamezo
	}
	//A lapok kiírása alulra is
	echo $lap_link;
	
Ui: a kód szinező az empty-t valamiért duplázza ha jól emlékszem majd ne felejtsd el kitörölni.

Remélem segítettem.
Üdv!