Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не работает isset... Почему?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
nikola_12
Отправлено: 26 Июля, 2013 - 00:01:03
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Всем привет! Почему не работает isset? то есть:
PHP:
скопировать код в буфер обмена
  1.  
  2.         if (isset($production_title))
  3.         {
  4.         $result = mysql_query ("INSERT INTO `data` (`cat`, `production_title`, `miniature`, `full_description`, `big_img`, `big_img_2`, `big_img_3`) VALUES ('$cat', '$production_title', '$miniature', '$full_description', '$big_img', '$big_img_2', '$big_img_3');");
  5.           if ($result == 'true') {echo "<div id='admin_success'>Продукция успешно добавлена!</div>";}
  6.           else {echo "<div id='admin_error'>Продукция не добавлена!</div>";}
  7.           }    
  8.         else
  9.           {
  10.             echo "<div id='admin_error'>Вы ввели не всю информацию, поэтому продукция не может быть добавлена.</div>";
  11.           }
  12.  


Даже если переменная production_title пустая, то на выходе всё-равно "Продукция успешно добавлена".
 
 Top
teddy
Отправлено: 26 Июля, 2013 - 00:05:25
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




nikola_12
Потому что в данном случае существующая переменная возвращает true в условии

(Отредактировано автором: 26 Июля, 2013 - 00:08:41)

 
 Top
nikola_12
Отправлено: 26 Июля, 2013 - 00:06:40
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Ну в базу то она попадает пустой!

(Отредактировано автором: 26 Июля, 2013 - 00:07:24)

 
 Top
teddy
Отправлено: 26 Июля, 2013 - 00:08:52
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




покажите тот участок кода где объявлена данная переменная
 
 Top
nikola_12
Отправлено: 26 Июля, 2013 - 00:12:46
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




teddy пишет:
покажите тот участок кода где объявлена данная переменная


Данные идут из формы
$miniature = $_POST['miniature'];
 
 Top
teddy
Отправлено: 26 Июля, 2013 - 00:15:04
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Какие данные?
nikola_12 пишет:
$miniature = $_POST['miniature'];

Разницу чувствуете?
nikola_12 пишет:
if (isset($production_title))
 
 Top
Okula
Отправлено: 26 Июля, 2013 - 00:17:21
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




nikola_12, ты неправильно понимаешь принцип работы функции isset(). Она не сработает только если переменная не будет объявлена. В любом другом случае условие будет true.
В твоём случае нужно использовать функцию empty() с оператором отрецания !.
 
 Top
nikola_12
Отправлено: 26 Июля, 2013 - 00:18:36
Post Id


Гость


Покинул форум
Сообщений всего: 80
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




$production_title= $_POST['production_title'];
просто по аналогии все переменные прописаны...
(Добавление)
Okula пишет:
nikola_12, ты неправильно понимаешь принцип работы функции isset(). Она не сработает только если переменная не будет объявлена. В любом другом случае условие будет true.
В твоём случае нужно использовать функцию empty() с оператором отрецания !.


Спасибо! Работает!
 
 Top
teddy
Отправлено: 26 Июля, 2013 - 00:23:54
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




nikola_12
1.
PHP:
скопировать код в буфер обмена
  1. $production_title= trim($_POST['production_title']);


2.

Замените if (isset($production_title)) на if(!empty($production_title))

Я думаю у вас отправляется пустая строка, поэтому в условии и true

Если измените условие, тогда при наличии пустой строки будет false
 
 Top
Prizma
Отправлено: 26 Июля, 2013 - 00:50:05
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




nikola_12 пишет:
if (isset($production_title))

замени на
nikola_12 пишет:
if (empty($production_title))

isset - проверяет существует ли переменная т.е. если ты ее где то объявил а потом не использовал unset() то она будет существовать, а empty проверяет не пусто ли содержимое
 
My status
 Top
caballero
Отправлено: 26 Июля, 2013 - 01:04:39
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




поле всегда присылает пустую строку потому isset срабатывает

универсальный вариант:


страна советов, блин


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Okula
Отправлено: 26 Июля, 2013 - 01:18:42
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




caballero, глупость написал. Всё решается с помощью функции empty() и оператора отрицания !.
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Июля, 2013 - 01:41:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Okula пишет:
Она не сработает только если переменная не будет объявлена
Говорит что переменной нету, когда она на самом деле равна null.
Okula пишет:
empty()
Говорит что пусто, когда значение равно нулю.
caballero пишет:
поле всегда присылает пустую строку потому isset срабатывает

универсальный вариант:
PHP:

if(strlen($production_title) ==0)


страна советов, блин
Самый верный вариант из предложенных, но есть еще вернее:
PHP:
скопировать код в буфер обмена
  1. if ($production_title = trim((string) $_POST['production_title'])) { ...

Тут в отличии от предложенных приведение типа и хоть какая-то защита есть от взлома.
 
 Top
caballero
Отправлено: 26 Июля, 2013 - 01:46:06
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
caballero, глупость написал. Всё решается с помощью функции empty() и оператора отрицания !.

да ну, еще ни разу не подводило. Независимо от того пустая строка там отсутствие значения, null или еще чего.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
teddy
Отправлено: 26 Июля, 2013 - 02:13:22
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




DeepVarvar пишет:
if ($production_title = trim((string) $_POST['production_title']))

А можно узнать почему в данном примере ты привел $_POST к строковому типу? Ведь $_POST и так всегда возвращает строковый тип данных, даже если было отправлено числовое значение.

П.С: Спрашиваю из спортивного интереса
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB