За последние 24 часа нас посетили 17606 программистов и 1968 роботов. Сейчас ищет 991 программист ...

Несуществующие url при чпу

Тема в разделе "PHP для новичков", создана пользователем User123, 17 янв 2019.

  1. User123

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

    С нами с:
    23 янв 2015
    Сообщения:
    47
    Симпатии:
    2
    Сейчас есть такая страница: site.ru/cat/1
    если в строке ввести site.ru/cat/1sdfdfg
    то страница cat/1 откроется под таким адресом

    как можно выдать 404 ошибку если адрес не совпадает с id

    вот код страницы
    PHP:
    1. include "db.php";
    2. $db = connectdb();
    3. $id = intval($_GET['id']);
    4.  
    5. $result = $db->query("SELECT id, date FROM table WHERE id = $id");
    6.  
    7. while ($row = mysqli_fetch_assoc($result)){      
    8. $gt = $row['date'];
    9. }  
    10.  
    11. echo $gt;
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.862
    Симпатии:
    752
    Адрес:
    Татарстан
    ну так поставь условие - если нет результата - то 404
     
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @User123, просто id надо получать/проверять несколько иначе
    Небольшой демонстрационный примерчик:
    PHP:
    1. $arr = ['1sdffas', '1', '1.1'];
    2. foreach($arr as $value) {
    3.     $boo = intval($value);
    4.     $foo = $boo == $value;
    5.     var_dump($value, $boo, $foo);
    6. }
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.848
    Симпатии:
    654
    @User123, проверьте GET-параметр на соответствие нат. числу. Или хотя бы сравните длины $_GET['id'] и strval(intval($_GET['id'])). Также можно искать по $_GET['id'] с должной защитой (экранированием и т.п.), правда в запросе будет та же падлянка, поэтому длины нужно будет все равно сравнить.
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.848
    Симпатии:
    654
    Вот из простого каркаса:
    PHP:
    1.             if ($res=mysqli_query($link,'SELECT ... WHERE `id`="'.$p1.'"'))
    2.             {
    3.               $r1=mysqli_fetch_assoc($res);
    4.               mysqli_free_result($res);
    5.               if ($r1&&strlen($p1)==strlen($r1['id'])) $page=&$r1;
    6.               else error(404);
    7.             }
    8.             else error(503);
    Все работает: http://gency.ru/comment/75 (припишите, например, test и увидите).
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.848
    Симпатии:
    654
    @webtask, я в пред. посте специально про это написал ;)