Check post values php

Проверьте, пусто ли значение $ _POST

Я не могу заставить $username быть «Анонимным»? Это либо пустое, либо значение $_POST[‘userName’] .

isset() вернет true, если переменная была инициализирована. Если у вас есть поле формы с его значением name заданным для userName , когда эта форма отправлена, значение всегда будет «установлено», хотя в нем могут не быть никаких данных.

Вместо этого trim() строку и проверьте ее длину

Если форма была успешно отправлена, всегда нужно установить $_POST[‘userName’] , хотя она может содержать пустую строку, отличную от не заданной. Вместо этого проверьте, empty() ли он empty()

if(isset($_POST['submit'])) < if(empty($_POST['userName']))< $username = 'Anonymous'; >else $username = $_POST['userName']; > 

Чтобы проверить, присутствует ли свойство, независимо от значения, используйте:

if (array_key_exists('userName', $_POST)) <> 

Чтобы проверить, установлено ли свойство (свойство присутствует, а значение не равно null или false ), используйте:

Чтобы проверить, установлено ли свойство и не пусто (не пустая строка, 0 (целое число), 0.0 (float), ‘0’ (string), null , false или [] (пустой массив)), используйте:

Вопрос. Проверьте, пусто ли значение $ _POST.

Перевод: проверьте, имеет ли значение ключевой элемент / индекс массива значение, связанное с ним.

Ответ: Зависит от вашего внимания безопасности. Зависит от допустимого ввода.

1. Some people say use empty(). 

Из руководства PHP: «[Empty] определяет, считается ли переменная пустой. Переменная считается пустой, если она не существует или ее значение равно FALSE». Таким образом, считается пустым.

"" (an empty string) 0 (0 as an integer) 0.0 (0 as a float) "0" (0 as a string) NULL FALSE array() (an empty array) $var; (a variable declared, but without a value) 

Если ни одно из этих значений не будет действительным для вашего элемента управления вводом, тогда будет работать empty() . Проблема здесь в том, что empty() может быть слишком широким, чтобы его можно было использовать последовательно (так же, по той же причине, на разных входных представлениях управления до $_POST или $_GET ). Хорошим использованием метода empty() является проверка того, что весь массив пуст (не имеет элементов).

2. Some people say use isset(). 

isset() (языковая конструкция) не может работать со всеми массивами, как в isset($myArray) . Он может работать только с переменными и элементами массива (через индекс / ключ): isset($var) и isset($_POST[‘username’]) . Языковая конструкция isset() делает две вещи. Сначала он проверяет, имеет ли переменная или индекс / ключ массива значение, связанное с ним. Во-вторых, он проверяет, чтобы значение не было равно значению NULL PHP.

Короче говоря, наиболее точную проверку можно выполнить лучше всего с isset() , так как некоторые элементы управления вводом не регистрируются в $ _POST, когда они не выбраны или не выбраны. Я никогда не знал формы, которая предоставила значение PHP NULL. Ничего из этого не делаю, поэтому я использую isset() чтобы проверить, нет ли ключа $_POST , связанного с ним (и это не NULL). isset() – гораздо более строгий тест пустоты (в смысле вашего вопроса), чем empty() .

3. Some people say just do if($var), if($myArray), or if($myArray['userName']) to determine emptiness. 

Вы можете проверить все, что оценивает true или false в выражении if. Пустые массивы оцениваются как false, поэтому переменные не заданы. Переменные, содержащие значение NULL PHP, также оцениваются как false. К сожалению, в этом случае, как и в случае с empty() , многие другие вещи также вычисляют false: 1. пустая строка », ноль (0), zero.zero (0.0), строка 0 ‘, логическое значение false и некоторые пустые объекты XML.

В заключение используйте isset() и рассмотрите возможность комбинирования его с другими тестами. Пример:

Может не работать из-за сверхглобальной вязкости, но без проблем будет работать и для других массивов.

if(is_array($_POST) && !empty($_POST)) < //Now test for your successful controls in $_POST with isset() > 

Следовательно, зачем искать значение, связанное с ключом, прежде чем вы точно знаете, что $_POST представляет массив и имеет какие-либо значения, хранящиеся в нем вообще (что-то много людей не учитывают)? Помните, что люди могут отправлять данные в вашу форму без использования веб-браузера. В один прекрасный день вы можете перейти к тестированию, что $_POST имеет только разрешенные ключи, но этот разговор на другой день.

Руководство по PHP: таблицы сравнения типов тестирования

if(isset($_POST['submit'])) < if(!(isset($_POST['userName'])))< $username = 'Anonymous'; >else $username = $_POST['userName']; > 
if(!empty($_POST['userName'])) < $username = $_POST['userName']; >if(empty($_POST['userName']))

я бы использовал простой один ряд сравнения для этих случаев использования

$username = trim($_POST['userName'])?:'Anonymous'; 

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

это параноидальная версия:

$username = trim(isset($_POST['userName'])?$_POST['userName']:'')?:'Anonymous'; 

Это реализует проверку, если установлена ​​переменная $_POST . перед доступом к нему.

isset проверяет, установлен ли ключ, который вы проверяете в хэш (или ассоциативный массив). Значение в этом контексте означает только то, знает ли оно значение. Ничто не является ценностью. Таким образом, он определяется как пустая строка.

По этой причине, если у вас есть поле ввода с именем userName, независимо от того, заполнит ли он это, это будет верно. То, что вы действительно хотите сделать, это проверить, равнозначно ли userName пустой строке »

Источник

Как проверить получаемые данные через POST?

Как узнать, какие данные были получены через POST ?
И были получены они или нет?

Чем Вы обычно пользуетесь для тестового приема и анализа POST данных ?

Простой 1 комментарий

FanatPHP

Mesuti

FanatPHP

мой стандартный класс логирования

Mesuti

Mesuti

FanatPHP

Господи, вот откуда берутся настолько незамутненные балбесы? И, главное, кто их работать с финансами пускает?
У тебя тесты не на пустом месте висят. Это тестовые платежи. Значит заказы под эти платежи уже должны быть в базе. И тестировать надо не не сферический запрос в вакууме, а полностью транзакцию.
И тебе и надо её фиксировать. А не «echo», блин, и «print»

Пустили обезьяну программированть

FanatPHP, какие там нахрен финансы. какая нибудь робокасса иль тому подобная хрень, и челевеку просто интерестно что в ответ приходит

FanatPHP

сергей захарченко, ты такой же бабуин что ли?
Что приходит в запросе (а не «в ответ») написано буквами в спецификации. Что приходит, и как узнать что это банк прислал, а не вася пупкин. И смотреть надо в неё, а не print_r($_POST);.

FanatPHP, ты сколько дней в разработке? в 90% спецификаций полная чушь, либо описания устаревшие, либо апи недавно поменялось, а бывает что и просто не все написали))) это слишком обычная проблема апишек. так что всегда надо смотреть что тебе присылают. да и такие данные как ip дата и время запросов, id процесса. тебе ни одна апишка не подскажет. и хватит уже строить из себя умника)))

Источник

Как проверить наличие переменной в POST?

Изначально я делал так что переменные объявлялись только после проверки.
В чем проблема и почему так происходит?

Простой 15 комментариев

$(document).ready(function() < $( ".send_form" ).click(function(event) < $.ajax(< method: "POST", url: "send_data.php", data: $('#form_msg').serialize(), dataType: 'html', success: function(data)< $('.success_send').html(data); $("#form_msg").trigger('reset'); >>) return false; >); >);

Вряд ли это возможно.
Для того чтобы помочь решить проблему приведите код который отправляет форму (html+js) и PHP-код в котором не работает isset и empty

PHP код указан в тексте вопроса. Это все что есть.

FanatPHP

FanatPHP, мне тоже интересно. Постоянно в вопросах один и тот же код где $_POST напрямую фигачат в mysqli_query без намёка на prepared statements и какое-либо экранирование или проверку пользовательских данных.

Денис Юламанов, расскжите, по какой книге/курсу/видео изучаете PHP?
Где учат писать такой код как в вопросе?

Для интереса открыл книгу Котеров РНР5 которую читал ещё в 2005 году, и даже там есть раздел про безопасность mysql запросов и про экранирование и про подготовленные запросы.

я не углублялся. Раз интересуетесь.

За какого либо человека можете не переживать, все эти вопросы в целях своего обучения. Пострадавших нету. И адский пхп код находится только на моей локалке, и прямая передача поста в запрос БД предшествует, скажем так, СМЕРТъ только моей БД.

5e638f11aa4d5263957689.png

990тыс просмотров у видео. Разрешаю поплакать)

Денис Юламанов, я не переживаю за вас, так как это нормально на этапе обучения писать что-то такое для новичка.
Печалит только что «профессионалы» с ютуба учат новичков такому.

Денис Юламанов, нет, я подхожу к таким вещам философски. Чем больше людей которые пишут не качественный код, тем выше моя ценность как специалиста.
Припекает скорее от горе-профессионалов, которые обучают людей плохим вещам.

FanatPHP

$fistname = $_POST['firstname']; !empty($firstname)

А проверка через isset() + empty()

$firstname = isset($_POST['firstname']) ? $_POST['firstname'] : ''; if(!empty($firstname)) < /// >

FanatPHP

$fistname = $_POST['firstname']; !empty($firstname)

А проверка через isset()
$firstname = $_POST[‘firstname’] ?? »;

$firstname = isset($_POST['firstname']) ? $_POST['firstname'] : '';

Что значит эта строка? Что делает «?» ??

FanatPHP, у него просто опечатка, отсюда все проблемы.
я ему привёл пример без использовани null coalescing operator (??) так как не факт что автор использует РНР7
но судя по комментарию даже isset с тринарным оператором ему не понятен

$firstname = isset($_POST['firstname']) ? $_POST['firstname'] : '';
if(isset($_POST['firstname'])) < $firstname = $_POST['firstname']; >else

FanatPHP

Опечатка у него не единственная проблема.
И тем более не извиняет кривой код в твоем ответе. Перейди по ссылке и подумай, что в твоем коде неправильно.

Денис Юламанов, обновил ответ с использованием isset и empty
проблема в опечатке точно была, так как проверяешь $firstname а переменная с данными $fistname

slo_nik

FanatPHP

Возможно, тебе будет интересно узнать, что опечатка в переменнй $fistname — это наименьшая проблема в твоем коде. В нем кривая каждая строчка, за исключением, пожалуй, первых четырех. Хотя нет, они тоже неправилные. Вместо них должен быть инклюд.

А проверять наличие переменной не нужно. Переменная в посте всегда есть. Если надо проверить на пустоту, то это делается совсем другими функциями.

Источник

Читайте также:  Показать элемент при клике css
Оцените статью