За последние 24 часа нас посетили 59209 программистов и 1817 роботов. Сейчас ищут 939 программистов ...

В пагинаторе генерируются "пустые ссылки"

Тема в разделе "PHP для новичков", создана пользователем Alexnewaro, 8 фев 2015.

  1. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Код работает на выборку и разделение на положенное количество результатов на страницу, но генерирует "пустые ссылки" в пагинаторе, которые никуда не ведут.
    Открывается, к примеру, /customsearch.php&page=2, но там пусто, выборка по откорректированным LIMIT не происходит, видимо.

    Подскажите, пожалуйста, в чем косяк.

    Код полный, вместе с формой и выводом.

    Код (Text):
    1. <div class="hotelsearchform">
    2.             <form name="form" id="form" method="post" action="">
    3.             <div class="search4hoteltype">
    4.             <input type="checkbox" name="type[]" value="25">&nbsp;&nbsp;Отель<br>
    5.             <input type="checkbox" name="type[]" value="26">&nbsp;&nbsp;Мини-гостиница<br>
    6.             <input type="checkbox" name="type[]" value="28">&nbsp;&nbsp;Санаторий<br>
    7.             <input type="checkbox" name="type[]" value="27">&nbsp;&nbsp;Пансионат<br>
    8.             </div>
    9.             <div class="search4hotelrating">
    10.             <input type="checkbox" name="rating[]" value="15,17">&nbsp;&nbsp;2*<br>
    11.             <input type="checkbox" name="rating[]" value="19">&nbsp;&nbsp;3*<br>
    12.             <input type="checkbox" name="rating[]" value="21">&nbsp;&nbsp;4*<br>
    13.             <input type="checkbox" name="rating[]" value="23">&nbsp;&nbsp;5*<br>
    14.             </div>
    15.             <div class="search4hotelplace">
    16.             <input type="checkbox" name="place[]" value="5">&nbsp;&nbsp;Центр<br>
    17.             <input type="checkbox" name="place[]" value="6">&nbsp;&nbsp;Хоста<br>
    18.             <input type="checkbox" name="place[]" value="7">&nbsp;&nbsp;Адлер<br>
    19.             <input type="checkbox" name="place[]" value="42">&nbsp;&nbsp;Имеретинка<br>
    20.             <input type="checkbox" name="place[]" value="8">&nbsp;&nbsp;Красная Поляна<br>
    21.             <input type="checkbox" name="place[]" value="10">&nbsp;&nbsp;Дагомыс<br>
    22.             <input type="checkbox" name="place[]" value="9">&nbsp;&nbsp;Лазаревское<br>
    23.             </div>
    24.         <div class="search4hotelbuttons">
    25.             <input name="submit" value="ПОКАЗАТЬ ВЫБРАННОЕ" type="submit">
    26.             </div>
    27.             </form>
    28.     </div><!-- hotelsearchform -->
    29.      
    30.      
    31.     <?
    32.     function connectDB (){
    33.     define('DB_HOST', '---');
    34.     define('DB_USER', '---');
    35.     define('DB_PASS', '---');
    36.     define('DB_NAME', '---');
    37.      
    38.     $dbconn = mysql_connect(DB_HOST, DB_USER, DB_PASS)
    39.      or die("Ошибка соединения с базой данных! " . mysql_error());
    40.     mysql_select_db(DB_NAME);
    41.     mysql_query('SET NAMES utf8');
    42.     return $dbconn;
    43.     }
    44.      
    45.     function closeDB($dbconn){
    46.     mysql_close($dbconn);
    47.     }
    48.      
    49.     if(isset($_REQUEST['submit']))
    50.     {      
    51.     $connect = connectDB();
    52.     if( count($_POST['type']) > 0 )
    53.     {      
    54.     $type = implode(',',$_POST['type']);
    55.     $str.= ' AND type IN('.$type.')';
    56.     }
    57.     if( count($_POST['place']) > 0 )
    58.     {      
    59.     $place = implode(',',$_POST['place']);
    60.     $str.= ' AND place IN('.$place.')';
    61.     }
    62.     if( count($_POST['rating']) > 0 )
    63.     {      
    64.     $rating = implode(',',$_POST['rating']);
    65.     $str.= ' AND rating IN('.$rating.')';
    66.     }
    67.      
    68.     $rat[15] = '<img src="/templates/img/s1.png" border="0">';
    69.     $rat[17] = '<img src="/templates/img/s2.png" border="0">';
    70.     $rat[19] = '<img src="/templates/img/s3.png" border="0">';
    71.     $rat[21] = '<img src="/templates/img/s4.png" border="0">';
    72.     $rat[23] = '<img src="/templates/img/s5.png" border="0">';
    73.      
    74.      
    75.     function resSQL($s){
    76.     $r=mysql_query($s);
    77.     if ($row=mysql_fetch_row($r))
    78.     return $row[0];
    79.     else
    80.     return false;
    81.     }
    82.      
    83.      
    84.     $mpp=5;
    85.      
    86.     if (isset($_GET['page']))
    87.     {       $page=intval($_GET['page']);
    88.             if ($page<=0)
    89.                     return;
    90.     }else
    91.             $page=1;
    92.      
    93.     $q=mysql_query('select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 '.$str.' limit '.(($page-1)*$mpp).','.$mpp);
    94.     $fr=resSQL('SELECT FOUND_ROWS()');
    95.      
    96.     echo '<div class="allresult">';
    97.     while($r=mysql_fetch_assoc($q))
    98.     {
    99.             echo '<div class="eachresult">
    100.                                     <div class="hotelnamewhiteline">
    101.                                             <div class="hotelrating">'.$rat[$r['rating']].'</div>
    102.                                             <div class="hotelname"><a href="/'.$r['key'].'.html" target="_parent">&nbsp;&nbsp;"'.$r['name'].'"&nbsp;&nbsp;</a></div>
    103.                                     </div>
    104.                                     <div class="hoteladdress">'.$r['address'].'</div>
    105.                                     <div class="hoteldescription"><a href="/'.$r['key'].'.html" target="_parent">'.$r['desc'].'</a></div>
    106.                                    
    107.                                    
    108.                       </div>';
    109.                    
    110.     }
    111.      echo '</div>';
    112.      
    113.     $pc=ceil($fr/$mpp);
    114.     if ($pc>1)
    115.     {
    116.            
    117.             $raz='';
    118.             for($n=1;$n<=$pc;$n++)
    119.             {
    120.                     echo $raz;
    121.                     if ($page==$n)
    122.                            
    123.                             echo $n;
    124.                     else
    125.                     {
    126.                             echo '<A HREF="'.$S_SERVER['PHP_SELF'].'';
    127.                             if ($n>1)
    128.                            
    129.                                     echo '?page=',$n;
    130.                             echo '">',$n,'</A>';
    131.                     }
    132.                    
    133.                     $raz=' | ';
    134.             }
    135.     }
    136.            
    137.     }
    138.      closeDB ($connect);
    139.      
    140.     ?>
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    смотри запрос
     
  3. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    третий день 'смотрю запрос', дружище :-(
    это четвертый форум, где прошу совета...
    уже яйки в мошонку опускаются...
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    покажи запрос
     
  5. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    вообще логично предположить, что виноват запрос, который не срабатывает на отдельно взятых страницах, так как на следующих страницах выводится только форма, остальное и не думает срабатывать, притом, что ГЕТ передается...
    но не могу понять где косяк. синтаксис погонял и так и сяк...

    Код (Text):
    1. $q=mysql_query('select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 '.$str.' limit '.(($page-1)*$mpp).','.$mpp);
    2. $fr=resSQL('SELECT FOUND_ROWS()');
    где str - данные из формы, остальное старт и общее количество

    Добавлено спустя 58 секунд:
    зря вписался в "единозапросие", надо было двумя делать (
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это не запрос
     
  7. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Лучший в мире запрос - пожалуйста :)
    А если серьезно - то я туплю что вы имеете в виду. Я привык к "запрос в базу".
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    запрос это то что получается, когда выполнится тот код, который ты привёл. Какой запрос получается при запросе второй страницы когда она пустая?
     
  9. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Я его не могу от'echo'ить никак, уже думал об этом. Через mysql_error тоже никак не выходит. видимо я совсем гоблин

    Добавлено спустя 4 минуты 44 секунды:
    он мне на
    Код (Text):
    1. echo $q=mysql_query( 'select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 '.$str.' LIMIT '.(($page-1)*$mpp).','.$mpp);
    выдает: Resource id #4

    и отправляет курить бамбук дальше
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    так

    посмотреть запрос надо бы
    для этого надо посмотреть запрос так, как он уходит в бд в таком случае
    т.е. надо сделать что-то типа
    Код (PHP):
    1. $query = 'select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 ' . $str . ' LIMIT ' . (($page - 1) * $mpp) . ',' . $mpp;
    2. echo 'Вот он запрос-то: ' . $query . ' А тут уже кончился.';
    3. echo $q = mysql_query($query);
    Добавлено спустя 1 минуту 1 секунду:
    Я пошёл спяжится в кроватне. Может ещё загляну после перекура. Запрос надо впихнуть куда-нить типа phpmyadmin или adminer или чем вы там базу ковыряете. Там наверняка будет понятно где косяк.
     
  11. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Спасибо огромное за наводку. Очень рассчитываю на вашу помощь, давно слежу за вашими ответами на этом форуме :)
    Приятных снов, до завтра!

    Добавлено спустя 1 минуту 30 секунд:
    Код (Text):
    1. Вот он запрос-то: select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 AND rating IN(23) LIMIT 0,3 А тут уже кончился.Resource id #4
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ну ты пихни в пма-то
     
  13. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Выдает инфу, все как положено. Инфа, ограниченная количеством 3 :)

    Добавлено спустя 2 минуты 28 секунд:
    То бишь запрос отрабатывает отлично. Видимо косяк в том, что он не отрабатывает на дополнительных страницах, видимо некорректно он определен для других страниц, вот тут и копаю третий день ((
     
  14. Alexnewaro

    Alexnewaro Активный пользователь

    С нами с:
    8 фев 2015
    Сообщения:
    109
    Симпатии:
    1
    Заработало...
    Перевел на GET, добавил в ссылки на страницы GETы, полученные из формы - и заработало (код внизу).

    Не можете ли подсказать, как сменить расширение страницы c HTML на PHP (конкретной одной)?
    И еще - безопасен ли код в плане проникновения и всяческого зловредства со стороны?

    Огромное спасибо за ваши наводки! Они очень помогли

    Код (Text):
    1. <div class="hotelsearchform">
    2.     <form name="form" id="form" method="GET" action="">
    3.     <div class="search4hoteltype">
    4.             <input type="checkbox" name="type[]" value="25">&nbsp;&nbsp;Отель<br>
    5.             <input type="checkbox" name="type[]" value="26">&nbsp;&nbsp;Мини-гостиница<br>
    6.             <input type="checkbox" name="type[]" value="28">&nbsp;&nbsp;Санаторий<br>
    7.             <input type="checkbox" name="type[]" value="27">&nbsp;&nbsp;Пансионат<br>
    8.     </div>
    9.         <div class="search4hotelrating">
    10.             <input type="checkbox" name="rating[]" value="15,17">&nbsp;&nbsp;2*<br>
    11.             <input type="checkbox" name="rating[]" value="19">&nbsp;&nbsp;3*<br>
    12.             <input type="checkbox" name="rating[]" value="21">&nbsp;&nbsp;4*<br>
    13.             <input type="checkbox" name="rating[]" value="23">&nbsp;&nbsp;5*<br>
    14.     </div>
    15.        <div class="search4hotelplace">
    16.             <input type="checkbox" name="place[]" value="5">&nbsp;&nbsp;Центр<br>
    17.             <input type="checkbox" name="place[]" value="6">&nbsp;&nbsp;Хоста<br>
    18.             <input type="checkbox" name="place[]" value="7">&nbsp;&nbsp;Адлер<br>
    19.             <input type="checkbox" name="place[]" value="42">&nbsp;&nbsp;Имеретинка<br>
    20.             <input type="checkbox" name="place[]" value="8">&nbsp;&nbsp;Красная Поляна<br>
    21.             <input type="checkbox" name="place[]" value="10">&nbsp;&nbsp;Дагомыс<br>
    22.             <input type="checkbox" name="place[]" value="9">&nbsp;&nbsp;Лазаревское<br>
    23.     </div>
    24.     <div class="search4hotelbuttons">
    25.             <input name="submit" value="ПОКАЗАТЬ ВЫБРАННОЕ" type="submit">
    26.     </div>
    27.     </form>
    28. </div><!-- hotelsearchform -->
    29.  
    30.  
    31. <?
    32. function connectDB (){
    33. define('DB_HOST', '---');
    34. define('DB_USER', '---');
    35. define('DB_PASS', '---');
    36. define('DB_NAME', '---');
    37.  
    38. $dbconn = mysql_connect(DB_HOST, DB_USER, DB_PASS)
    39.   or die("Ошибка соединения с базой данных! " . mysql_error());
    40. mysql_select_db(DB_NAME);
    41. mysql_query('SET NAMES utf8');
    42. return $dbconn;
    43. }
    44.  
    45.  
    46.  
    47. if(isset($_REQUEST['submit']))
    48. {    
    49. $connect = connectDB();
    50. if( count($_GET['type']) > 0 )
    51. {    
    52. $type = implode(',',$_GET['type']);
    53. $str.= ' AND type IN('.$type.')';
    54. }
    55. if( count($_GET['place']) > 0 )
    56. {    
    57. $place = implode(',',$_GET['place']);
    58. $str.= ' AND place IN('.$place.')';
    59. }
    60. if( count($_GET['rating']) > 0 )
    61. {    
    62. $rating = implode(',',$_GET['rating']);
    63. $str.= ' AND rating IN('.$rating.')';
    64. }
    65.  
    66. $rat[15] = '<img src="/templates/img/s1.png" border="0">';
    67. $rat[17] = '<img src="/templates/img/s2.png" border="0">';
    68. $rat[19] = '<img src="/templates/img/s3.png" border="0">';
    69. $rat[21] = '<img src="/templates/img/s4.png" border="0">';
    70. $rat[23] = '<img src="/templates/img/s5.png" border="0">';
    71.  
    72.  
    73.  
    74. function resSQL($s){
    75. $r=mysql_query($s);
    76. if ($row=mysql_fetch_row($r))
    77.  return $row[0];
    78. else
    79.  return false;
    80. }
    81.  
    82.  
    83. $mpp=6;  
    84.  
    85.  
    86. if (empty($_GET['page']) || ($_GET['page'] <= 0)) {
    87. $page = 1;
    88. } else {
    89. $page = (int) $_GET['page'];
    90. }
    91.  
    92. $q=mysql_query('select SQL_CALC_FOUND_ROWS `name`, `rating`, `key`, `address`, `desc` FROM `sled_hotels` WHERE town=4 '.$str.' limit '.(($page-1)*$mpp).','.$mpp);
    93. $fr=resSQL('SELECT FOUND_ROWS()');
    94.  
    95. echo '<div class="allresult">';
    96. while($r=mysql_fetch_assoc($q))
    97. {
    98.     echo '<div class="eachresult">
    99.                   <div class="hotelnamewhiteline">
    100.                     <div class="hotelrating">'.$rat[$r['rating']].'</div>
    101.                     <div class="hotelname"><a href="/'.$r['key'].'.html" target="_parent">&nbsp;&nbsp;"'.$r['name'].'"&nbsp;&nbsp;</a></div>
    102.                 </div>
    103.                 <div class="hoteladdress">'.$r['address'].'</div>
    104.                 <div class="hoteldescription"><a href="/'.$r['key'].'.html" target="_parent">'.$r['desc'].'</a></div>
    105.                
    106.           </div>';
    107.        
    108. }
    109.   echo '</div>';
    110.  
    111. if( $type > 0 )
    112. {
    113.     $typelink = '&type[]='.$type;
    114. } else { $typelink = null;}
    115.  
    116. if( $rating > 0 )
    117. {
    118.     $ratinglink = '&rating[]='.$rating;
    119. }else { $ratinglink = null;}
    120.  
    121. if( $place > 0 )
    122. {
    123.     $placelink = '&place[]='.$place;
    124. }else { $placelink = null;}
    125.  
    126. $pc=ceil($fr/$mpp);
    127. if ($pc>1)
    128. {
    129.  
    130.     $raz='';
    131.     for($n=1;$n<=$pc;$n++)
    132.     {
    133.         echo $raz;
    134.         if ($page==$n)
    135.        
    136.             echo $n;
    137.         else
    138.         {
    139.             echo '<A HREF="'.$_SERVER['PHP_SELF'].'';
    140.             if ($n>0)
    141.        
    142.                 echo '?page=',$n,$typelink,$placelink,$ratinglink.'&submit=ПОКАЗАТЬ+ВЫБРАННОЕ';
    143.             echo '">',$n,'</A>';
    144.         }
    145.      
    146.         $raz=' | ';
    147.     }
    148. }
    149.  
    150. }
    151.  
    152. ?>
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Нужно эскейпить, чтобы было безопасно. Читайте про экранирование. А по поводу расширения - надо конфиг сайта править. Читайте про ЧПУ.