ugrás a tartalomhoz

PHP lapozó átalakítása

viz · 2008. Ápr. 7. (H), 21.24
Üdv.
Van egy lapozóm, ezt szeretném átalakítani, pontosabban a lapozó részét, úgy hogy ez ugye a jobb alsó sarokban kiírja hogy hány darab oldal van, és ezt egy lenyíló menüvel választhassam hogy hanyadik oldalra mennyen (<select><option value="1" selected>1</option><option value="2">2</option></select>), és ha a lenyíló menüben rákattintok az egyikre mondjuk a 2-es számúra akkor vigyen a 2. oldalra, ha a 3-asra akkor 3. oldal és így tovább... Nem igazán tudom hogy hogyan kellene átírni. Valaki átírná nekem?

itt a kódom:
<?php 

$db_host = 'localhost';                 // Adatbázis hoszt
$db_user = 'root';                  // Adatbázis felhasználónév
$db_pass = '32426b3e53';                // Adatbázis jelszó
$db_table = 'lapozo';              // Adatbázis név

mysql_connect($db_host,$db_user,$db_pass) or die(mysql_error());
mysql_select_db($db_table) or die(mysql_error());


//Változók definiálása
$egy_oldal_max = 20;

function foot_linkek($link, $tomb_szama, $oldalankenti_db, $kezdes, $act_oldal){
//Változó definiálása
$kimenet ="";
$szam = 0;

if( ($kezdes + $oldalankenti_db) > $tomb_szama){
$max = $tomb_szama;
}else{
$max = ($kezdes + $oldalankenti_db)-1;
}

$kimenet .= "<table class='oldal_szamozas' border='0' width='100%'>
                <tr>
                    <td valign='top'>Megjelenítve <b>".$kezdes."</b> től <b>".$max."</b> -ig (összesen&nbsp;<b>".$tomb_szama."</b>&nbsp;találatból)<td>
                    <td align='right'>";
        // Az alsó kinálati sáv kiíratása
        if ($tomb_szama > $oldalankenti_db) {
            $k = $tomb_szama;
            $kimenet .= "Talált oldalak: ";
             for ($k; $k > 0; $k=$k-$oldalankenti_db) {
             $szam=$szam+1;
            
                if($szam == $act_oldal){ $kimenet .="<b>".$szam."</b>&nbsp;";
                }else{
                $kimenet .= '<a href="'.$link.'oldal='.$szam.'" style="text-decoration: none;">'.$szam.' </a>';
            
                    }
                 }
             }
            $kimenet .= '</td></tr></table>';
            
            
return $kimenet;    
}

 
$sql = "SELECT COUNT(name) as db FROM name" or die(mysql_error());
$db =  mysql_fetch_assoc(mysql_query($sql)) or die(mysql_error()); //Csak akkor használjuk így ha max egy eredmény lehet!

if(isset($_GET["oldal"])){
$oldal = $_GET["oldal"];
}else{
$oldal = 1;
}
$limit = (($oldal*$egy_oldal_max)-$egy_oldal_max);

//Olvassuk ki a megjelenítendő szöveget
$sql = "SELECT * FROM name ORDER BY nev_leiras ASC LIMIT ".$limit.", ".$egy_oldal_max." ";

$talalatok = mysql_query($sql) or die("Hibás lekérdezés!");

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Oldal számozás</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>

<body>
<table border="0" style="background-color:#CCCCCC; padding:5px; border: 2px solid #234EF5; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; ">
    <tr>
        <td style="height:150px; width:480px; " valign="top"><?php 
            while($talalat = mysql_fetch_assoc($talalatok)){
            echo $talalat["name"]."<br/>";
            }
    ?></td>
    </tr>
    <tr>
        <td><?php echo  foot_linkek("index.php?", $db["db"],$egy_oldal_max, ($limit+1), $oldal );?></td>
    </tr>
</table>
</body>
</html>
<?php
print($oldal);
?>
És a MySQL tábla:
CREATE TABLE `name` (
  `nev_leiras` varchar(1000) NOT NULL,
  `name` varchar(1000) NOT NULL,
  `nev` varchar(1000) NOT NULL,
  `language_id` int(255) NOT NULL auto_increment,
  PRIMARY KEY  (`language_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Esetleg ha van valakinek egyszerűbb, ami a fentebb említett dolgot tudja, akkor azt is elfogadom, a lényeg hogy MySQL-t használjon, ne SQL-t! Köszönöm!
 
1

Rossz helyre írtál

zila · 2008. Ápr. 8. (K), 13.06
A Munka/állás rovatba kellett volna írnod, ott találsz vállalkozó szellemű programozókat akik pénzért cserébe dolgoznak neked/helyetted.
2

---

viz · 2008. Ápr. 8. (K), 14.10
Elnézést, még csak most regisztráltam. :)
Tudnál nekem segíteni?
3

De persze mindíg van, aki segít.

Velias9 · 2008. Ápr. 8. (K), 17.01
Szerintem neked valami ilyesmi kéne:

<?php 

$db_host = 'localhost';
$db_user = 'root';
$db_pass = '32426b3e53';
$db_table = 'lapozo';

mysql_connect($db_host,$db_user,$db_pass) or die(mysql_error());
mysql_select_db($db_table) or die(mysql_error());

$egy_oldal_max = 20;


function foot_linkek($link, $tomb_szama, $oldalankenti_db, $kezdes, $act_oldal)
{
	$szam = 0;

	if (($kezdes + $oldalankenti_db) > $tomb_szama)
	{
		$max = $tomb_szama;
	}
	else
	{
		$max = ($kezdes + $oldalankenti_db) - 1;
	}

	if ($tomb_szama > $oldalankenti_db)
	{
		$i = $tomb_szama;
		$seged = "<select name=\"oldal\">\n";	
		for ($i; $i > 0; $i = ($i - $oldalankenti_db))
		{
			$szam = $szam + 1;
			if ($szam == $act_oldal)
			{
				$seged .= "\t\t\t\t<option value=\"" . $szam . "\" disabled=\"disabled\">" . $szam . "</option>\n";
			}
			else
			{
				$seged .= "\t\t\t\t<option value=\"" . $szam . "\">" . $szam . "</option>\n";
			}
		}
		$seged .= "\t\t\t</select>";
	}

	$kimenet = <<<EOF
<table class="oldal_szamozas" border="0" width="100%">
	<tr>
		<td valign="top">Megjelenítve <b>{$kezdes}</b> től <b>{$max}</b> -ig (összesen&nbsp;<b>{$tomb_szama}</b>&nbsp;találatból)<td>
		<td align="right">
			Tal&aacute;lt oldalak:
			<form name="mitomén" action="{$link}" method="get">
				{$seged}
				<input type="submit" value="Mehet" />
			</form>
		</td>
	</tr>
</table>
EOF;

	return $kimenet;
}


$sql = "SELECT COUNT(name) as db FROM name" or die(mysql_error());
$db = mysql_fetch_assoc(mysql_query($sql)) or die(mysql_error());

if (!empty($_GET["oldal"]))
{
	$oldal = $_GET["oldal"];
}
else
{
	$oldal = 1;
}
$limit = (($oldal * $egy_oldal_max) - $egy_oldal_max);


$sql = "SELECT * FROM name ORDER BY nev_leiras ASC LIMIT ".$limit.", ".$egy_oldal_max." ";

$talalatok = mysql_query($sql) or die("Hibás lekérdezés!");

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Oldal számozás</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
<table border="0" style="background-color: #CCCCCC; padding: 5px; border: 2px solid #234EF5; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">
	<tr>
		<td style="height:150px; width:480px; " valign="top">
			<?php 
			while ($talalat = mysql_fetch_assoc($talalatok))
			{
				print($talalat['name'] . "<br/>");
			}
			?>
		</td>
	</tr>
	<tr>
		<td>
			<?php
				print(foot_linkek("index.php?", $db["db"],$egy_oldal_max, ($limit+1), $oldal ));
			?>
		</td>
	</tr>
</table>
</body>
</html>
Ez úgy működik, hogy az aktuális oldalt nem lehet kiválasztani, csak a többit és egy 'submit' gomb megnyomásakor küldi el az adatokat.
Van olyan változat is, ahol a kattintás után azonnal elküldi, de én azt személy szerint nem szeretem, mert könnyen mellényúl az ember és lassú, vagy korlátolt netnél ez igencsak bosszantó lehet.
A 68. sorban az 'empty' megkettőződésével ne törődj!

Van azonban néhány jótanácsom:
1. Tényleg ne nagyon írj ilyeneket, hogy valaki csinálja meg, mert a zila-éhoz hasonló válaszokat kapsz.
2. Ha legközelebb egy neten is fennt lévő honlapban kéne hibát keresni, akkor szúrj be egy linket, hogy megnézhessék (láttam már emiatt hoszzú-hosszú vitákat).
3. A PHP-ban, ha egy 'string'-et dupla (vagy szimpla) idézőjelekkel határolsz és a 'string'-ben is van ilyen karakter, akkor tegyél elé egy fordított perjelet (AltGr + Q) és akkor karakterként és nem programutasításként értelmezi.
4. Ha hosszú (főleg HTML) 'string'-et gépelsz be, akkor használhatsz egy <<< operátort. Ennek az operátornak nem tudom, hogy mi a neve, de a lényeg az, hogy az utána lévő (akármilyen -> nálam 'EOF') szöveg jelzi a 'string' kezdetét és egy új sorba írt ugyan ilyen szöveg (nem lehet elötte semmi) jelzi a végét + a pontosvessző.
5. Ha az ilyen módon létrehozott 'string'-be szeretnél változót beilleszteni, akkor használt elötte egy '{'-t utánna pedig egy '}'-t. Ha jól tudom, akkor ilyen módon fügvényeket nem hívhatsz meg.
6. Ha a MySQL tábládból csak egy mezőre van szükség, akkor csak azt kérd le és ne az összeset, mert feleslegesen lassítod a 'script'-et.
7. Ha egy asszociatív (szövegget indexelt) tömbből kérsz le adatokat, akkor érdemes szimpla idézőjelekkel határolni a szöveget, mert akadhatnak belőle problémák, ha nem így teszel (nem biztos, hogy lesz, de nekem már volt).
8. Az 'isset' helyett ebben az esetben azért jobb a '!empty', mert ha hivatozik valahogy egy rossz linkre ('index.php?oldal='), akkor az '$oldal' értéke üres 'string' => az 'isset' 'true'-t ad vissza, mert a változó létezik. Ha azonban '!empty'-t használsz, akkor 'false'-t ad vissza és ebben ez esetben neked ez a jó!

Remélem megfelel.
4

nincs téma

viz · 2008. Ápr. 8. (K), 17.58
Értem, köszi, jó lesz szerintem, csak az a baj hogy hibát ír ki a 46. sörre: Parse error: syntax error, unexpected T_SL in C:\AppServ\www\lapozo.php on line 46
Ez nem tetszik neki: $kimenet = <<<EOF
Nem ismerem sajnos az EOF-t nem tudom mi lehet..
5

sörre :)

Gixx · 2008. Ápr. 8. (K), 20.40
{OFF}

a 46. sörre már én is hibákat írnék :D

{/OFF}
6

hehe

viz · 2008. Ápr. 8. (K), 20.50
Ezzel igazán sokat segítettél! :D
De...azthiszem most jó lett...az a része, most azu utolsó sorra ír hibát: Parse error: syntax error, unexpected $end in C:\AppServ\www\lapozo.php on line 110
    <?php   
      
   $db_host = 'localhost';  
   $db_user = 'root';  
  $db_pass = '32426b3e53';  
   $db_table = 'lapozo';  
      
   mysql_connect($db_host,$db_user,$db_pass) or die(mysql_error());  
   mysql_select_db($db_table) or die(mysql_error());  
     
  $egy_oldal_max = 20;  
    
   
   function foot_linkek($link, $tomb_szama, $oldalankenti_db, $kezdes, $act_oldal)  
  {  
      $szam = 0;  
    
      if (($kezdes + $oldalankenti_db) > $tomb_szama)  
      {  
          $max = $tomb_szama;  
      }  
      else  
     {  
         $max = ($kezdes + $oldalankenti_db) - 1;  
      }  
    
      if ($tomb_szama > $oldalankenti_db)  
     {  
         $i = $tomb_szama;  
           $seged = "<select name=\"oldal\">\n";   
         for ($i; $i > 0; $i = ($i - $oldalankenti_db))  
           {  
              $szam = $szam + 1;  
             if ($szam == $act_oldal)  
              {  
                   $seged .= "\t\t\t\t<option value=\"" . $szam . "\" disabled=\"disabled\">" . $szam . "</option>\n";  
             }  
            else  
             {  
                $seged .= "\t\t\t\t<option value=\"" . $szam . "\">" . $szam . "</option>\n";  
              }  
          }  
       $seged .= "\t\t\t</select>";  
      }  
     
      $kimenet = <<<EOF
   <table class="oldal_szamozas" border="0" width="100%">  
      <tr>  
           <td valign="top">Megjelenítve <b>{$kezdes}</b> től <b>{$max}</b> -ig (összesen&nbsp;<b>{$tomb_szama}</b>&nbsp;találatból)<td>  
          <td align="right">  
               Tal&aacute;lt oldalak:  
            <form name="mitomén" action="{$link}" method="get">  
                   {$seged}  
                   <input type="submit" value="Mehet" />  
              </form>  
           </td>  
       </tr>  
   </table>  
   EOF;  
    
       return $kimenet;  
   }  
  
 $sql = "SELECT COUNT(name) as db FROM name" or die(mysql_error());  
 $db = mysql_fetch_assoc(mysql_query($sql)) or die(mysql_error());  
    
   if (!emptyempty($_GET[oldal]))  
  {  
     $oldal = $_GET[oldal];  
 }  
 else  
{  
      $oldal = 1;  
 }  
   $limit = (($oldal * $egy_oldal_max) - $egy_oldal_max);  
    
    
   $sql = "SELECT * FROM name ORDER BY nev_leiras ASC LIMIT ".$limit.", ".$egy_oldal_max." ";  
     
   $talalatok = mysql_query($sql) or die("Hibás lekérdezés!");  
     
  ?>  
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
   <html>  
   <head>  
   <title>Oldal számozás</title>  
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">  
  </head>  
   <body>  
  <table border="0" style="background-color: #CCCCCC; padding: 5px; border: 2px solid #234EF5; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">  
       <tr>  
           <td style="height:150px; width:480px; " valign="top">  
               <?php   
               while ($talalat = mysql_fetch_assoc($talalatok))  
             {  
                print($talalat[name] . "<br/>");  
}  
?>  
</td>  
</tr>  
<tr>  
<td>  
<?php  
print(foot_linkek("index.php?", $db[db],$egy_oldal_max, ($limit+1), $oldal ));  
?>  
</td>  
</tr>  
 </table>  
</body>  
</html>  
7

Ez azért van...

Velias9 · 2008. Ápr. 10. (Cs), 15.11
..., mert ahogy már amlítettem a '<<<' után álló szöveg (ami majdnem bármi lehet) jelzi a string elejét és a lezárása egy
új sorban (ez amúgy OK) és
!!!elötte semmi mással!!! (szerintem van elötte egy 'space' vagy 'tab') ugyan az a szöveg egy ';'-vel a végén!

(Szerintem olvasd el még egyszer figyelmesen a jótanácsokat!)
8

"heredoc" szintaxis

HTibi · 2008. Ápr. 10. (Cs), 21.39
Itt utánna olvashatsz: php.net

Nem az EOF a lényeg, hanem a "<<<".
9

thx

NiGGa · 2008. Május. 19. (H), 00.15
kösz, hogy nekem nem kell beírnom ugyanezt!