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
Форумы портала PHP.SU :: Версия для печати :: Не работает isset... Почему?
Форумы портала PHP.SU » » Вопросы новичков » Не работает isset... Почему?

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

1. nikola_12 - 26 Июля, 2013 - 00:01:03 - перейти к сообщению
Всем привет! Почему не работает 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 пустая, то на выходе всё-равно "Продукция успешно добавлена".
2. teddy - 26 Июля, 2013 - 00:05:25 - перейти к сообщению
nikola_12
Потому что в данном случае существующая переменная возвращает true в условии
3. nikola_12 - 26 Июля, 2013 - 00:06:40 - перейти к сообщению
Ну в базу то она попадает пустой!
4. teddy - 26 Июля, 2013 - 00:08:52 - перейти к сообщению
покажите тот участок кода где объявлена данная переменная
5. nikola_12 - 26 Июля, 2013 - 00:12:46 - перейти к сообщению
teddy пишет:
покажите тот участок кода где объявлена данная переменная


Данные идут из формы
$miniature = $_POST['miniature'];
6. teddy - 26 Июля, 2013 - 00:15:04 - перейти к сообщению
Какие данные?
nikola_12 пишет:
$miniature = $_POST['miniature'];

Разницу чувствуете?
nikola_12 пишет:
if (isset($production_title))
7. Okula - 26 Июля, 2013 - 00:17:21 - перейти к сообщению
nikola_12, ты неправильно понимаешь принцип работы функции isset(). Она не сработает только если переменная не будет объявлена. В любом другом случае условие будет true.
В твоём случае нужно использовать функцию empty() с оператором отрецания !.
8. nikola_12 - 26 Июля, 2013 - 00:18:36 - перейти к сообщению
$production_title= $_POST['production_title'];
просто по аналогии все переменные прописаны...
(Добавление)
Okula пишет:
nikola_12, ты неправильно понимаешь принцип работы функции isset(). Она не сработает только если переменная не будет объявлена. В любом другом случае условие будет true.
В твоём случае нужно использовать функцию empty() с оператором отрецания !.


Спасибо! Работает!
9. teddy - 26 Июля, 2013 - 00:23:54 - перейти к сообщению
nikola_12
1.
PHP:
скопировать код в буфер обмена
  1. $production_title= trim($_POST['production_title']);


2.

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

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

Если измените условие, тогда при наличии пустой строки будет false
10. Prizma - 26 Июля, 2013 - 00:50:05 - перейти к сообщению
nikola_12 пишет:
if (isset($production_title))

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

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

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


страна советов, блин
12. Okula - 26 Июля, 2013 - 01:18:42 - перейти к сообщению
caballero, глупость написал. Всё решается с помощью функции empty() и оператора отрицания !.
13. DeepVarvar - 26 Июля, 2013 - 01:41:14 - перейти к сообщению
Okula пишет:
Она не сработает только если переменная не будет объявлена
Говорит что переменной нету, когда она на самом деле равна null.
Okula пишет:
empty()
Говорит что пусто, когда значение равно нулю.
caballero пишет:
поле всегда присылает пустую строку потому isset срабатывает

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

if(strlen($production_title) ==0)


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

Тут в отличии от предложенных приведение типа и хоть какая-то защита есть от взлома.
14. caballero - 26 Июля, 2013 - 01:46:06 - перейти к сообщению
Цитата:
caballero, глупость написал. Всё решается с помощью функции empty() и оператора отрицания !.

да ну, еще ни разу не подводило. Независимо от того пустая строка там отсутствие значения, null или еще чего.
15. teddy - 26 Июля, 2013 - 02:13:22 - перейти к сообщению
DeepVarvar пишет:
if ($production_title = trim((string) $_POST['production_title']))

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

П.С: Спрашиваю из спортивного интереса

 

Powered by ExBB FM 1.0 RC1