dalv_happy
@dalv_happy

Как вы обрабатываете GET запросы?

Допустим на странице index.php, может быть максимум два запроса либо index.php?category=1 или index.php?category=1&id=1.
Как я реализую:
Сначала делаю проверку, потом вывожу. Но что-то мне подсказывает, что это неверное спасение от SQL инъекций.
include 'config.php';
    
    function checked($cat, $id) {
        if (!is_numeric($cat)) {
            header( 'Refresh: 0; url=/404.html' );
            exit(0);
        }
        
        $query = mysql_query('SELECT COUNT(*) FROM category WHERE id='.$cat.'');        
        $pol = mysql_fetch_array($query);
        if ($pol[0] == 0) {
            header( 'Refresh: 0; url=/404.html' );
            exit(0);
        }
        
        if ($id > 0) {
            if (!is_numeric($id)) {
                header( 'Refresh: 0; url=/404.html' );
                exit(0);
            }
            
            $query = mysql_query('SELECT COUNT(*) FROM materials WHERE id='.$id.' AND id_category='.$cat.'');       
            $pol = mysql_fetch_array($query);
            if ($pol[0] == 0) {
                header( 'Refresh: 0; url=/404.html' );
                exit(0);
            }
        }
    }
    
    if (empty($_GET['category']) && empty($_GET['id'])) {
        //Вывод всех категорий
    } else if (isset($_GET['category']) && empty($_GET['id'])) {
        checked($_GET['category'], 0);
        //Вывод конкретной категории
        
    } else if (isset($_GET['category']) && isset($_GET['id'])) {
        checked($_GET['category'], $_GET['id']);
        //Вывод конкретного материала
    }
  • Вопрос задан
  • 407 просмотров
Пригласить эксперта
Ответы на вопрос 1
Denormalization
@Denormalization
Ужс..
Это даже не индусокод...

Используй type cast (int) + mysqli + prepared statements.

Убери эту лапшу из if'ов.
Просто используй:
$category_id = (int)arr_get($_GET, 'category', 1);
$id = (int)arr_get($_GET, 'id', 0);

function arr_get(array $array, $key, $default = null) {
    return isset($array[$key]) ? $array[$key] : $default;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы