Mongodb, как получить результат через php? Id = 1 [duplicate]

Ответ заключается в использовании переменной $_SERVER . Например, $_SERVER["REMOTE_ADDR"] вернет IP-адрес клиента.

3
задан maxxon15 30 August 2012 в 10:51
поделиться

9 ответов

Использование фильтров:

if (null !== ($page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE))) {
    // $page is now an integer
}

Это также проверяет, появляется ли переменная в строке запроса одновременно. Если вы хотите различать отсутствующие и недействительные, вы должны оставить последний аргумент filter_input():

$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
// $page can be null (not present), false (present but not valid) or a valid integer
15
ответ дан Ja͢ck 18 August 2018 в 21:19
поделиться
  • 1
    Мне тоже нравится это решение, у меня есть upvote :) – Sjaak Trekhaak 30 August 2012 в 11:00
  • 2
    Работает! Спасибо чувак! :) Кстати, это могло быть достигнуто и функцией filter_var(). Правильно? – maxxon15 30 August 2012 в 11:39
  • 3
    @ maxxon15 Я предпочитаю использовать filter_input(), если знаю, что параметр должен исходить от INPUT_GET - в противном случае я использую filter_var() :) – Ja͢ck 30 August 2012 в 11:52
  • 4
    Это очищает прецедент. :) Спасибо за помощь здесь noobie! – maxxon15 30 August 2012 в 11:59

Использование is_int вряд ли поможет. Все входящие параметры (включая $ _GET и $ _POST) анализируются как строки PHP. Функция is_int проверяет тип данных, а не значение. ctype_digit проверяет только цифры:

if(isset($_GET['page']) && ctype_digit($_GET['page']){
   $page = (int)$_GET['page'];
   echo "Page Number: ".$page;
}
0
ответ дан Berry Langerak 18 August 2018 в 21:19
поделиться
if (isset($_GET['page']) && (($get_page_filtered = filter_var($_GET['page'], FILTER_VALIDATE_INT)) !== FALSE) {
  $get_page_int = $get_page_filtered;
}

@see https://stackoverflow.com/a/41868665/6758130

0
ответ дан Community 18 August 2018 в 21:19
поделиться

Я оставил несколько комментариев здесь и там. Благодаря слабой типизации функции типа empty и isset имеют тенденцию быть ненадежными. Самый быстрый способ проверить, является ли параметр int или нет IMO, будет следующим:

if (array_key_exists('page',$_GET) && ($_GET['page'] == (int) $_GET['page']))

Приведение к int, а затем сравнение соответствующих значений вернет true только тогда, когда $_GET['page'] - действительный int. Если вы хотите использовать строгое сравнение типов по какой-либо причине (некоторые делают), вы можете выполнить двойное нажатие:

if (array_key_exists('page',$_GET) && ($_GET['page'] === (string)((int) $_GET['page'])))

Но в этом конкретном случае я не могу понять, почему вы хотели бы сделать это

1
ответ дан Elias Van Ootegem 18 August 2018 в 21:19
поделиться
  • 1
    Почему нет? Не рекомендуется ли проверять достоверность переданных данных? Btw, я уже использовал FILTER_VALIDATE_INT, как показано в этом комментарии: stackoverflow.com/a/12194343/432720 – maxxon15 30 August 2012 в 11:46
  • 2
    Я не совсем понимаю, что вы подразумеваете под , почему бы и нет? . Когда я сказал , я не понимаю, почему вы хотите сделать это , я имел в виду двойное нажатие: литье в int и обратно в строку снова, IMO, одна операция слишком много в этот пример – Elias Van Ootegem 30 August 2012 в 12:29
  • 3
    Оооо! Я думал, что вы хотите, чтобы кастинг на (int) или даже выбор этого варианта был бы лишним! : P Nevermind. Но да ... согласен. Это было бы слишком много. – maxxon15 30 August 2012 в 12:36
  • 4
    @ maxxon15: Если, конечно, $_GET['page'] не может быть пустой строкой (''), в этом случае ('' == (int)'') === true, а '' == (string)((int)'') === false ... sheesh, free typing, должен любить это: s – Elias Van Ootegem 30 August 2012 в 12:42

Вы также можете проверить с помощью

isNAN($_GET['something']);//is_numeric($_GET['something'])

, он возвращает логическое значение (true, flase) .... если его true, то это не целое число, если false его целое число.

0
ответ дан Gautam3164 18 August 2018 в 21:19
поделиться
  • 1
    Возвращает true и для float: так page=12.7548754 будет действительным? – Elias Van Ootegem 30 August 2012 в 11:38
  • 2
    Мой дорогой брат, есть ли номер страницы с поплавковым номером ... ???, и вы указали номера страниц как «страница» Обряд .. ?? – Gautam3164 30 August 2012 в 11:43
  • 3
    Это переменная GET, ничто не мешает пользователю возиться с параметрами url и передавать float. Это, я думаю, почему op хочет проверить, является ли значение параметра int, а не строкой или float – Elias Van Ootegem 30 August 2012 в 12:32
  • 4
    У меня также есть те же сомнения, что и Элиас – Gautam3164 30 August 2012 в 12:34
if(!empty($_GET['page']) and is_numeric($_GET['page'])){
       $page = (int)$_GET['page'];
       echo "Page Number: ".$page;
}

is_numeric , вероятно, вам нужно.

0
ответ дан GeoffreyB 18 August 2018 в 21:19
поделиться

Используйте filter_var() с фильтром FILTER_VALIDATE_INT на нем и проверьте возвращаемое значение.

4
ответ дан Ignacio Vazquez-Abrams 18 August 2018 в 21:19
поделиться

Используйте is_numeric () .

is_int() не будет работать, потому что параметры GET всегда являются строками.

1
ответ дан Leonel Machava 18 August 2018 в 21:19
поделиться

это способ проверки параметра, если он целочисленный или нет.

if (is_int((int) $_GET['user_id']) && (int) $_GET['user_id'] != 0) {
    $user_id = $_GET['user_id'];
}
1
ответ дан Radim Köhler 18 August 2018 в 21:19
поделиться
Другие вопросы по тегам:

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