powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php) Не работает проверка переменных
22 сообщений из 22, страница 1 из 1
(php) Не работает проверка переменных
    #36432401
guest_112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень тупой вопрос )))
Через форму отправляю в скрипт данные о заказчике.
В скрипте проверяю заполнены ли обязательные поля.
Код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?
session_start();
if (isset($_GET["fio"]) && isset($_GET["phone"]) && isset($_GET["address"]))
{
//тут добавляем данные в базу
}
 else
{
$_SESSION['order_error'] = "Не заполнено одно из ключевых полей"; 
header('location:'.$_SERVER['HTTP_REFERER']);
}
?>
{
Но почему то нифига не работает ((( даже если все три переменные пустые данные всё равно добавляются в базу (((
p.s. "address" это не опечатка ))) так задуманно =)
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432413
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
форма каким методом отпарвляет даные? get, post?
Может тогда не $_GET а $_POST юзать нуна?
И добавить вместо
Код: plaintext
if (isset($_GET["fio"]) && isset($_GET["phone"]) && isset($_GET["address"]))
стрчоки:
Код: plaintext
1.
2.
3.
4.
5.
6.
$arr = array('fio','phone','address');
$accept = true;
for($i= 0 ,$n=sizeof($n);$i<$n;$i++){
$accept = $accept && (isset($_GET[$arr[$i]]) and trim($_GET[$arr[$i]])); // имено and а не &&
}
if ($accept)
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432445
guest_112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отправляется и принимается через GET.
Ренат, что то получается мудрённый вариант для элементарной задачи!
Что конструкция if в php не способна проверить 3 переменные в одной строчке ???
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432458
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык конструкция то работает правильно. Из формы приходят переменные. Они содержат пустую строку. Но приходят же. Вы проверяете на наличие - переменные есть. А на содержимое не проверяете.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432464
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно проверку сделать примерно такой:
Код: plaintext
 if (isset($_GET["fio"]) && trim($_GET["fio"]) && isset............ 
Но это только на наличие непустых переменных. И конечно не избавит от необходимости более детальной проверки, вроде минимального количества и допустимых символов в номере телефона.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432484
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
<?php 
if (isset($_GET['fio'], $_GET['phone'], $_GET['address']) and $_GET['fio'] and $_GET['phone'] and $_GET['address']) {
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432501
guest_112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
an0nym,vkle спасибо действительно заработало как надо =)
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432548
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_112an0nym,vkle спасибо действительно заработало как надо =)
Самое интересное я тоже самое написал в втором топике o_O
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432561
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат,

1. не то же самое,
2. неэффективное,
3. неудобное.

Уж если не хотите в отдельную функцию выносить - или пишите как мы, или хотя бы на подобии
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
foreach (array('fio', 'phone', 'address') as $element) {
  if (!isset($_GET[$element]) or !$_GET[$element]) {
    $accept = false;
    break;
  }
}
if (isset($accept)) {

}
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432580
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymРенат,

1. не то же самое,
2. неэффективное,
3. неудобное.

Уж если не хотите в отдельную функцию выносить - или пишите как мы, или хотя бы на подобии
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
foreach (array('fio', 'phone', 'address') as $element) {
  if (!isset($_GET[$element]) or !$_GET[$element]) {
    $accept = false;
    break;
  }
}
if (isset($accept)) {

}

Не эффиктивно? А эффективно пользоваться вобще фореачем? Вы реально считатете что юзать бреак читабельно и эффективно?
А если пользователь ввел пустую строку? ЧТо тода делать будите?
А если нужно будет на шаблон еще проверять? У меня тремя простыми действиями дописываеться это все.
Неудобно? Чтобы добавить новое поле у вас в скрипте нужно было дописывать isset(....) && $_GET[...] и ЭТО вы называете удобным?
а то что вы туат привели: это тот же мой код тока более коряво переписаный.
зы. где нить в начале определили вы $accept - и забыли. И щас ваш цикл начнет лазить по циклу, и допустим ни разу на $accept=false не наткнеться. И что тода - опана, а акепт то установлена - ошибочка значит!
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432590
Ниджат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<?
session_start();
unset($_GET["fio"]);
unset($_GET["phone"]);
unset(isset($_GET["address"]));

if (isset($_GET["fio"]) && isset($_GET["phone"]) && isset($_GET["address"]))
{
//тут добавляем данные в базу
}
else
{
$_SESSION['order_error'] = "Не заполнено одно из ключевых полей";
header('location:'.$_SERVER['HTTP_REFERER']);
}
?>

Если в таком варианте заработает, то значит твои переменные существуют, просто имеют NULL значение.
Замени строку
isset($_GET["fio"]) && isset($_GET["phone"]) && isset($_GET["address"])
на
$_GET["fio"] != '' and $_GET["fio"] = '' and $_GET["address"] = ''
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432591
Ниджат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, последнее

$_GET["fio"] != '' and $_GET["fio"] != '' and $_GET["address"] != ''
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432671
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ниджат<?
unset($_GET["fio"]);
unset($_GET["phone"]);
unset(isset($_GET["address"]));
if (isset($_GET["fio"]) && isset($_GET["phone"]) && isset($_GET["address"]))
{
//тут добавляем данные в базу
}

феерично... вы удаляете переменные а потом проверяете их существование?
я могу вам сразу сказать - что условие IF - в вашем варианте НИКОГДА не сработает.. )))


и вообще, в чем проблема то? проверить 3 переменные на то что они пришли и непустые?
Код: plaintext
1.
2.
3.
4.
5.
6.
$_GET["fio"]       = trim($_GET["fio"]);
$_GET["phone"]  = trim($_GET["phone"]);
$_GET["address"]= trim($_GET["address"]);
if (!empty($_GET["fio"]) && !empty($_GET["phone"]) && !empty($_GET["address"])) {
 //тут добавляем данные в базу
}
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432909
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u,

привед 3 нотиса.
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432955
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренатan0nymРенат,

1. не то же самое,
2. неэффективное,
3. неудобное.

Уж если не хотите в отдельную функцию выносить - или пишите как мы, или хотя бы на подобии
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
foreach (array('fio', 'phone', 'address') as $element) {
  if (!isset($_GET[$element]) or !$_GET[$element]) {
    $accept = false;
    break;
  }
}
if (isset($accept)) {

}

Не эффиктивно? А эффективно пользоваться вобще фореачем? Вы реально считатете что юзать бреак читабельно и эффективно?
А если пользователь ввел пустую строку? ЧТо тода делать будите?
А если нужно будет на шаблон еще проверять? У меня тремя простыми действиями дописываеться это все.
Неудобно? Чтобы добавить новое поле у вас в скрипте нужно было дописывать isset(....) && $_GET[...] и ЭТО вы называете удобным?
а то что вы туат привели: это тот же мой код тока более коряво переписаный.
зы. где нить в начале определили вы $accept - и забыли. И щас ваш цикл начнет лазить по циклу, и допустим ни разу на $accept=false не наткнеться. И что тода - опана, а акепт то установлена - ошибочка значит!
Еще раз. Ваш код неэффективен.
Он неэффективен как по сравнению с isset($var1, $var2, $var3) and $var1 and $var2 and $var3 (или trim($var1) and trim($var2) and trim($var3)), так и с моим вариантом цикла как минимум потому, что цикл не остановится, найдя первое неудовлетворяющее значение.

foreachем пользоваться не менее эффективно, чем for. Возможно, даже более - но разница явно очень мизерная.

Предубеждения насчет break... почитайте побольше на эту тему. Не будете больше так безапеляционно заявлять о читабельности и эффективности. Хорошо, я могу переписать с while без break. Читаться будет хуже, но производительность будет та же.

А если пользователь ввел строку ' \NUL ' (нуль-байт имею в виду), что тогда будете делать? А если для разных переменных нужна разная валидация. Тут уже должна быть нормальная функция (/класс), инкапсулирующие этот функционал. Если вы такие проверки для каждой переменной в каждом скрипте будете писать отдельно - быстро устанете. Мы разбираем простейший случай.

Неудобно, потому что обычно нет-нет, да есть какое-нибудь одно поле, требующее доп. поведение, например проверка, что телефон из цифр. В вашем случае (и в моей переписи вашего цикла) потребуется if внутри цикла, который выполнится столько же раз, сколько и цикл, тогда как можно было обойтись вообще без него.

То что тут приведено было мной - это ваш код, только переписанный оптимально и читабельно. Могу переписать оптимально и не читабельно, но без break.

зы. Наверное, единственное, насчет чего соглашусь, так это насчет того, что $accept следует все таки определить до цикла.
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36432986
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nym
Еще раз. Ваш код неэффективен.
Он неэффективен как по сравнению с isset($var1, $var2, $var3) and $var1 and $var2 and $var3 (или trim($var1) and trim($var2) and trim($var3)), так и с моим вариантом цикла как минимум потому, что цикл не остановится, найдя первое неудовлетворяющее значение.

foreachем пользоваться не менее эффективно, чем for. Возможно, даже более - но разница явно очень мизерная.

Предубеждения насчет break... почитайте побольше на эту тему. Не будете больше так безапеляционно заявлять о читабельности и эффективности. Хорошо, я могу переписать с while без break. Читаться будет хуже, но производительность будет та же.

А если пользователь ввел строку ' \NUL ' (нуль-байт имею в виду), что тогда будете делать? А если для разных переменных нужна разная валидация. Тут уже должна быть нормальная функция (/класс), инкапсулирующие этот функционал. Если вы такие проверки для каждой переменной в каждом скрипте будете писать отдельно - быстро устанете. Мы разбираем простейший случай.

Неудобно, потому что обычно нет-нет, да есть какое-нибудь одно поле, требующее доп. поведение, например проверка, что телефон из цифр. В вашем случае (и в моей переписи вашего цикла) потребуется if внутри цикла, который выполнится столько же раз, сколько и цикл, тогда как можно было обойтись вообще без него.

То что тут приведено было мной - это ваш код, только переписанный оптимально и читабельно. Могу переписать оптимально и не читабельно, но без break.

зы. Наверное, единственное, насчет чего соглашусь, так это насчет того, что $accept следует все таки определить до цикла.
1. а вы всегда выводите только сообщение об первой ошибке забыв на остальные?
2. вы реально считате что цикл по ассоциированому массиву, да еще и предварительным его копированием быстрее чем цикл по нумерованому по порядку оригенальному массиву?
3. Если пользователь ввел нуль то ет неверно и trim(\NUL) не даст скрипту выполнить дальше.
4. хорошо, и как можно без цикла и ифа определить в заданой группе присылаемых ппараметров удовлетворяют они шаблону или нет?
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36433006
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymr u,

привед 3 нотиса.
да вы правы... тогда isset() Добавить придется вчеравно...

а вообще, лучче написать микро-валидатор и забыть все эти бесконечные IF и ISSET и EMPTY().... как страшный сон..

либо юзать готовые из фреймворков.
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36433022
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренат1. а вы всегда выводите только сообщение об первой ошибке забыв на остальные?
2. вы реально считате что цикл по ассоциированому массиву, да еще и предварительным его копированием быстрее чем цикл по нумерованому по порядку оригенальному массиву?
3. Если пользователь ввел нуль то ет неверно и trim(\NUL) не даст скрипту выполнить дальше.
4. хорошо, и как можно без цикла и ифа определить в заданой группе присылаемых ппараметров удовлетворяют они шаблону или нет?
1. А ваш код позволяет без модификации? С минимальной модификацией и мой моментально позволит.
2. Почитайте про хранение переменных в PHP. Копироваться массив не будет. И да, я считаю, что итерация по хэш-карте во внутреннем порядке следования элементов в оной, как минимум не медленнее, чем последовательное выдергивание из неё элементов в произвольном порядке (ибо PHP не будет ни с того ни с сего узнавать, что порядок дерганья 0-1-2 является внутренним порядком массива).
3. Хорошо, согласен. \1 (chr(1)), а не \0?
4. if (isset($var1, $var2, $var3) and trim($var1) and trim($var2) and preg_match('/pattern/', $var3)) - в этом случае не будет оверхеда от исполнение в каждой итерации цикла проверки на то, является ли этот элемент исключительным и надо ли его соответственно обработать.
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36433025
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uan0nymr u,

привед 3 нотиса.
да вы правы... тогда isset() Добавить придется вчеравно...

а вообще, лучче написать микро-валидатор и забыть все эти бесконечные IF и ISSET и EMPTY().... как страшный сон..

либо юзать готовые из фреймворков.
Именно.
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36433045
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r u
Код: plaintext
1.
2.
3.
4.
5.
6.
$_GET["fio"]       = trim($_GET["fio"]);
$_GET["phone"]  = trim($_GET["phone"]);
$_GET["address"]= trim($_GET["address"]);
if (!empty($_GET["fio"]) && !empty($_GET["phone"]) && !empty($_GET["address"])) {
 //тут добавляем данные в базу
}

И, ИМХО, не следует прикасаться к GPC и менять в них данные. Они должны быть доступны в первоначальном виде в любой части скрипта, потому что помимо вашего модуля, они могут понадобиться другому модулю.
...
Рейтинг: 0 / 0
(php) Не работает проверка переменных
    #36433247
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример нано-валидатора )
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
// $data - массив с данными поля которые нужно проверить
// $rules - массив с описанием валидного формата данных
function isValidInput($data, $rules) {
	$errors = array();
	foreach($rules as $k=>$v) {
		if (!isset($data[$k])) $errors[$k][] = 'not isset';
		else {
			$rule=array(); // rules for current Item
			$tmp=explode(' ', trim($v) );
			foreach($tmp as $v2) {
				$tmp2 = explode('=', $v2);
				$rule[$tmp2[ 0 ]] = sizeof($tmp2)> 1  ? $tmp2[ 1 ] :  1 ;
			}
			// validate!
			if (isset($rule['require']) && empty($data[$k])) $errors[$k][] = 'empty error';
			if (isset($rule['min'])     && strlen($data[$k])<$rule['min']) $errors[$k][] = 'min length error';
			if (isset($rule['max'])     && strlen($data[$k])>$rule['max']) $errors[$k][] = 'max length error';
			if (isset($rule['regex'])   && !preg_match('%'.$rule['regex'].'%', $data[$k])) $errors[$k][] = 'regex error';
		}
	}
	return $errors;
}

// описания для полей
$rules = array(
	'fio'    =>'require min=3 max=50',
	'phone'  =>'require regex=^\d+$ max=6',
	'address'=>'max=10'
);

// проверяем массив $_GET на валидность пришедших данных
$invalids = isValidInput($_GET, $rules);
if (sizeof($invalids)== 0 ) {
	// Можно вставлять в БД
}
else {
	// Print errors
	echo '<pre>';
	print_r($invalids);
}

...
Рейтинг: 0 / 0
Период между сообщениями больше года.
(php) Не работает проверка переменных
    #37999082
Nikamka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здесь пример кода для проверки переменной на целое число, у меня заработало )))
Проверка переменной на целое число
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (php) Не работает проверка переменных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]