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:
  1. <?php   
  2.   
  3. $db_host = 'localhost';                 // Adatbázis hoszt  
  4. $db_user = 'root';                  // Adatbázis felhasználónév  
  5. $db_pass = '32426b3e53';                // Adatbázis jelszó  
  6. $db_table = 'lapozo';              // Adatbázis név  
  7.   
  8. mysql_connect($db_host,$db_user,$db_passor die(mysql_error());  
  9. mysql_select_db($db_tableor die(mysql_error());  
  10.   
  11.   
  12. //Változók definiálása  
  13. $egy_oldal_max = 20;  
  14.   
  15. function foot_linkek($link$tomb_szama$oldalankenti_db$kezdes$act_oldal){  
  16. //Változó definiálása  
  17. $kimenet ="";  
  18. $szam = 0;  
  19.   
  20. if( ($kezdes + $oldalankenti_db) > $tomb_szama){  
  21. $max = $tomb_szama;  
  22. }else{  
  23. $max = ($kezdes + $oldalankenti_db)-1;  
  24. }  
  25.   
  26. $kimenet .= "<table class='oldal_szamozas' border='0' width='100%'>  
  27.                 <tr>  
  28.                     <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>  
  29.                     <td align='right'>";  
  30.         // Az alsó kinálati sáv kiíratása  
  31.         if ($tomb_szama > $oldalankenti_db) {  
  32.             $k = $tomb_szama;  
  33.             $kimenet .= "Talált oldalak: ";  
  34.              for ($k$k > 0; $k=$k-$oldalankenti_db) {  
  35.              $szam=$szam+1;  
  36.               
  37.                 if($szam == $act_oldal){ $kimenet .="<b>".$szam."</b>&nbsp;";  
  38.                 }else{  
  39.                 $kimenet .= '<a href="'.$link.'oldal='.$szam.'" style="text-decoration: none;">'.$szam.' </a>';  
  40.               
  41.                     }  
  42.                  }  
  43.              }  
  44.             $kimenet .= '</td></tr></table>';  
  45.               
  46.               
  47. return $kimenet;      
  48. }  
  49.   
  50.    
  51. $sql = "SELECT COUNT(name) as db FROM name" or die(mysql_error());  
  52. $db =  mysql_fetch_assoc(mysql_query($sql)) or die(mysql_error()); //Csak akkor használjuk így ha max egy eredmény lehet!  
  53.   
  54. if(isset($_GET["oldal"])){  
  55. $oldal = $_GET["oldal"];  
  56. }else{  
  57. $oldal = 1;  
  58. }  
  59. $limit = (($oldal*$egy_oldal_max)-$egy_oldal_max);  
  60.   
  61. //Olvassuk ki a megjelenítendő szöveget  
  62. $sql = "SELECT * FROM name ORDER BY nev_leiras ASC LIMIT ".$limit.", ".$egy_oldal_max." ";  
  63.   
  64. $talalatok = mysql_query($sqlor die("Hibás lekérdezés!");  
  65.   
  66. ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  67. <html>  
  68. <head>  
  69. <title>Oldal számozás</title>  
  70. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">  
  71. </head>  
  72.   
  73. <body>  
  74. <table border="0" style="background-color:#CCCCCC; padding:5px; border: 2px solid #234EF5; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; ">  
  75.     <tr>  
  76.         <td style="height:150px; width:480px; " valign="top"><?php   
  77.             while($talalat = mysql_fetch_assoc($talalatok)){  
  78.             echo $talalat["name"]."<br/>";  
  79.             }  
  80.     ?></td>  
  81.     </tr>  
  82.     <tr>  
  83.         <td><?php echo  foot_linkek("index.php?"$db["db"],$egy_oldal_max, ($limit+1), $oldal );?></td>  
  84.     </tr>  
  85. </table>  
  86. </body>  
  87. </html>  
  88. <?php  
  89. print($oldal);  
  90. ?>  
És a MySQL tábla:
  1. CREATE TABLE `name` (  
  2.   `nev_leiras` varchar(1000) NOT NULL,  
  3.   `namevarchar(1000) NOT NULL,  
  4.   `nev` varchar(1000) NOT NULL,  
  5.   `language_id` int(255) NOT NULL auto_increment,  
  6.   PRIMARY KEY  (`language_id`)  
  7. ) 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:
  1. <?php   
  2.   
  3. $db_host = 'localhost';  
  4. $db_user = 'root';  
  5. $db_pass = '32426b3e53';  
  6. $db_table = 'lapozo';  
  7.   
  8. mysql_connect($db_host,$db_user,$db_passor die(mysql_error());  
  9. mysql_select_db($db_tableor die(mysql_error());  
  10.   
  11. $egy_oldal_max = 20;  
  12.   
  13.   
  14. function foot_linkek($link$tomb_szama$oldalankenti_db$kezdes$act_oldal)  
  15. {  
  16.     $szam = 0;  
  17.   
  18.     if (($kezdes + $oldalankenti_db) > $tomb_szama)  
  19.     {  
  20.         $max = $tomb_szama;  
  21.     }  
  22.     else  
  23.     {  
  24.         $max = ($kezdes + $oldalankenti_db) - 1;  
  25.     }  
  26.   
  27.     if ($tomb_szama > $oldalankenti_db)  
  28.     {  
  29.         $i = $tomb_szama;  
  30.         $seged = "<select name=\"oldal\">\n";   
  31.         for ($i$i > 0; $i = ($i - $oldalankenti_db))  
  32.         {  
  33.             $szam = $szam + 1;  
  34.             if ($szam == $act_oldal)  
  35.             {  
  36.                 $seged .= "\t\t\t\t<option value=\"" . $szam . "\" disabled=\"disabled\">" . $szam . "</option>\n";  
  37.             }  
  38.             else  
  39.             {  
  40.                 $seged .= "\t\t\t\t<option value=\"" . $szam . "\">" . $szam . "</option>\n";  
  41.             }  
  42.         }  
  43.         $seged .= "\t\t\t</select>";  
  44.     }  
  45.   
  46.     $kimenet = <<<EOF  
  47. <table class="oldal_szamozas" border="0" width="100%">  
  48.     <tr>  
  49.         <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>  
  50.         <td align="right">  
  51.             Tal&aacute;lt oldalak:  
  52.             <form name="mitomén" action="{$link}" method="get">  
  53.                 {$seged}  
  54.                 <input type="submit" value="Mehet" />  
  55.             </form>  
  56.         </td>  
  57.     </tr>  
  58. </table>  
  59. EOF;  
  60.   
  61.     return $kimenet;  
  62. }  
  63.   
  64.   
  65. $sql = "SELECT COUNT(name) as db FROM name" or die(mysql_error());  
  66. $db = mysql_fetch_assoc(mysql_query($sql)) or die(mysql_error());  
  67.   
  68. if (!emptyempty($_GET["oldal"]))  
  69. {  
  70.     $oldal = $_GET["oldal"];  
  71. }  
  72. else  
  73. {  
  74.     $oldal = 1;  
  75. }  
  76. $limit = (($oldal * $egy_oldal_max) - $egy_oldal_max);  
  77.   
  78.   
  79. $sql = "SELECT * FROM name ORDER BY nev_leiras ASC LIMIT ".$limit.", ".$egy_oldal_max." ";  
  80.   
  81. $talalatok = mysql_query($sqlor die("Hibás lekérdezés!");  
  82.   
  83. ?>  
  84. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  85. <html>  
  86. <head>  
  87. <title>Oldal számozás</title>  
  88. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">  
  89. </head>  
  90. <body>  
  91. <table border="0" style="background-color: #CCCCCC; padding: 5px; border: 2px solid #234EF5; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">  
  92.     <tr>  
  93.         <td style="height:150px; width:480px; " valign="top">  
  94.             <?php   
  95.             while ($talalat = mysql_fetch_assoc($talalatok))  
  96.             {  
  97.                 print($talalat['name'] . "<br/>");  
  98.             }  
  99.             ?>  
  100.         </td>  
  101.     </tr>  
  102.     <tr>  
  103.         <td>  
  104.             <?php  
  105.                 print(foot_linkek("index.php?"$db["db"],$egy_oldal_max, ($limit+1), $oldal ));  
  106.             ?>  
  107.         </td>  
  108.     </tr>  
  109. </table>  
  110. </body>  
  111. </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
  1.     <?php     
  2.         
  3.    $db_host = 'localhost';    
  4.    $db_user = 'root';    
  5.   $db_pass = '32426b3e53';    
  6.    $db_table = 'lapozo';    
  7.         
  8.    mysql_connect($db_host,$db_user,$db_passor die(mysql_error());    
  9.    mysql_select_db($db_tableor die(mysql_error());    
  10.        
  11.   $egy_oldal_max = 20;    
  12.       
  13.      
  14.    function foot_linkek($link$tomb_szama$oldalankenti_db$kezdes$act_oldal)    
  15.   {    
  16.       $szam = 0;    
  17.       
  18.       if (($kezdes + $oldalankenti_db) > $tomb_szama)    
  19.       {    
  20.           $max = $tomb_szama;    
  21.       }    
  22.       else    
  23.      {    
  24.          $max = ($kezdes + $oldalankenti_db) - 1;    
  25.       }    
  26.       
  27.       if ($tomb_szama > $oldalankenti_db)    
  28.      {    
  29.          $i = $tomb_szama;    
  30.            $seged = "<select name=\"oldal\">\n";     
  31.          for ($i$i > 0; $i = ($i - $oldalankenti_db))    
  32.            {    
  33.               $szam = $szam + 1;    
  34.              if ($szam == $act_oldal)    
  35.               {    
  36.                    $seged .= "\t\t\t\t<option value=\"" . $szam . "\" disabled=\"disabled\">" . $szam . "</option>\n";    
  37.              }    
  38.             else    
  39.              {    
  40.                 $seged .= "\t\t\t\t<option value=\"" . $szam . "\">" . $szam . "</option>\n";    
  41.               }    
  42.           }    
  43.        $seged .= "\t\t\t</select>";    
  44.       }    
  45.        
  46.       $kimenet = <<<EOF  
  47.    <table class="oldal_szamozas" border="0" width="100%">    
  48.       <tr>    
  49.            <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>    
  50.           <td align="right">    
  51.                Tal&aacute;lt oldalak:    
  52.             <form name="mitomén" action="{$link}" method="get">    
  53.                    {$seged}    
  54.                    <input type="submit" value="Mehet" />    
  55.               </form>    
  56.            </td>    
  57.        </tr>    
  58.    </table>    
  59.    EOF;    
  60.       
  61.        return $kimenet;    
  62.    }    
  63.     
  64.  $sql = "SELECT COUNT(name) as db FROM name" or die(mysql_error());    
  65.  $db = mysql_fetch_assoc(mysql_query($sql)) or die(mysql_error());    
  66.       
  67.    if (!emptyempty($_GET[oldal]))    
  68.   {    
  69.      $oldal = $_GET[oldal];    
  70.  }    
  71.  else    
  72. {    
  73.       $oldal = 1;    
  74.  }    
  75.    $limit = (($oldal * $egy_oldal_max) - $egy_oldal_max);    
  76.       
  77.       
  78.    $sql = "SELECT * FROM name ORDER BY nev_leiras ASC LIMIT ".$limit.", ".$egy_oldal_max." ";    
  79.        
  80.    $talalatok = mysql_query($sqlor die("Hibás lekérdezés!");    
  81.        
  82.   ?>    
  83.    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">    
  84.    <html>    
  85.    <head>    
  86.    <title>Oldal számozás</title>    
  87.    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">    
  88.   </head>    
  89.    <body>    
  90.   <table border="0" style="background-color: #CCCCCC; padding: 5px; border: 2px solid #234EF5; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">    
  91.        <tr>    
  92.            <td style="height:150px; width:480px; " valign="top">    
  93.                <?php     
  94.                while ($talalat = mysql_fetch_assoc($talalatok))    
  95.              {    
  96.                 print($talalat[name] . "<br/>");    
  97. }    
  98. ?>    
  99. </td>    
  100. </tr>    
  101. <tr>    
  102. <td>    
  103. <?php    
  104. print(foot_linkek("index.php?"$db[db],$egy_oldal_max, ($limit+1), $oldal ));    
  105. ?>    
  106. </td>    
  107. </tr>    
  108.  </table>    
  109. </body>    
  110. </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!