Как проверить, установлен ли $ _GET ['id'] и не пуст ли он с помощью php

Вот код php

if(isset($_GET['id'])) {
    //do something
} else {
    redirect('index.php'); //redirect is a function
}

Теперь, если идентификатор установлен (например: index.php? Id = 12) тогда действие выполняется, но если идентификатор не установлен (например, index.php? Id =), это показывает ошибку, как ее преодолеть ... ??

Как определить, что id является целым числом, а это не так? пусто, а затем выполните определенное действие ....

Отредактировано

Спасибо всем за ответы, но я все еще получаю эту ошибку ...

if(isset($_GET['id'])) { // I implemented all these codes but still....
    $user= User::find_by_id($_GET['id']);
   // Database Classes Fetches user info from database
}
else {
    redirect('index.php'); //redirect function
}

Если идентификатор равен 1 или больше 1, скрипт выполняется прекрасно. (index.php? id = 1)

Но id я установил id как отмечающий, что я получаю ошибку i..e index.php? id =

Код должен автоматически перенаправлять пользователя на страницу index.php вместо показывая ошибку .....

ОШИБКА: сбой запроса к базе данных: в синтаксисе SQL есть ошибка; адресное пространство процесса (изнутри самого процесса, посредством mprotect ()). Под «каждой страницей» я имею в виду каждую страницу ...

Мне интересно, есть ли способ защитить каждую запись в Linux? адресное пространство процесса (изнутри самого процесса, посредством mprotect () ). Под «каждой страницей» я имею в виду каждую страницу адресное пространство процесса, которое может быть записано обычным программа работает в пользовательском режиме - так, текст программы, константы, глобалы и куча - но я был бы счастлив только с константами, глобалы и куча. Я не хочу защищать от записи стек - это кажется плохой идеей.

Одна проблема в том, что я не знаю, с чего начать защиту от записи Память. Глядя на / proc / pid / maps , где показаны разделы памяти в использовании для данного PID, они всегда, кажется, начинаются с адреса 0x08048000 , с текстом программы. (В Linux, насколько я могу судить, память процесса выложена с текстом программы на снизу, затем константы выше этого, затем глобалы, затем куча, затем пустое пространство разного размера в зависимости от размера кучи или стек, а затем стек, растущий вниз от верхней части памяти в виртуальный адрес 0xffffffff .) Есть способ узнать, где находится верх куча (вызывая sbrk (0) , которая просто возвращает указатель на текущий «перерыв», т. е. вершина кучи), но на самом деле не способ скажите, где начинается куча.

Если я попытаюсь защитить все страницы от 0x08048000 до перерыва, я в итоге получаю mprotect: Невозможно выделить память ошибка. Я не знаю, почему mprotect будет в любом случае выделять память - и Google не очень помогает. Есть идеи?

Кстати, причина, по которой я хочу это сделать, заключается в том, что я хочу создать список всех страниц, которые записываются во время запуска программы, и способ, которым я могу придумать, это защитить все страницы от записи, пусть любая попытка записи вызовет ошибку записи, затем осуществите запись обработчик ошибок, который добавит страницу в список, а затем удалит запись защита. Я думаю, что я знаю, как реализовать обработчик, если бы я только мог выяснить, какие страницы защищать и как это сделать.

Спасибо!

5
задан Lindsey Kuper 11 August 2010 в 17:25
поделиться