Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > проверка"== 0" не работает для нечисловых значений


Автор: DRUG_ADDICT 16.12.2007, 11:58

M
skyboy
Что кнопкой "код" сам воспользовался - молодец. Но без матов обходись.

Код

$tovar = $_POST['tovar'];
$strona = $_POST['strona'];
$oblost = $_POST['oblost'];
$gorod = $_POST['gorod'];
$fio = $_POST['fio'];
$indecs = $_POST['indecs'];
$email = $_POST['email'];
$adress = $_POST['adress'];
$dopolnitelno = $_POST['dopolnitelno'];

if ($tovar == 0 or $strona == 0 or $oblost == 0 or $gorod == 0 or $fio == 0 or $indecs == 0 or $email == 0 or $adress == 0){

echo "<strong><center><font color=red><span class=\"style2\">Все поля кроме поля \"дополнительно\" (дополнительно заполняем по желанию), должны быть заполнены!</span></font></center></strong><br /><center><span class=\"style2\"><a href=\"javascript:history.back();\">Назад</a></span></center>";

echo "$strona";
echo "$oblost";
echo "$gorod";
echo "$fio";
echo "$indecs";
echo "$email";
echo "$adress";
echo "$dopolnitelno";

} else { 

echo "<strong><center><font color=red><span class=\"style2\">Через не которое время к вам на email (которое вы указали($email)) придет письмо, для подтверждения заказа!</span></font></center></strong><br />";

echo "<center><span class=\"style2\">Вы $fio, заказали сериал: $tovar, на адрес $strona, $oblost, $gorod, (индекс: $indecs), $adress<br />$dopolnitelno</span></center>";

}

Ну собсно вот! [вырезано] когда форму заполняю и каждое поля это цифры тоесть: 113981498714971402740153 и т.д. то все нормально эти цифры передаются и все такое... 
а когда заполняю форму нормально и в полях пишу: например в поле Строна: "Россия" или поле: Город: "МОСКОВ" и т.д. то значения НЕ передаются или что там короче выходит ето:

Код

echo "<strong><center><font color=red><span class=\"style2\">Все поля кроме поля \"дополнительно\" (дополнительно заполняем по желанию), должны быть заполнены!</span></font></center></strong><br /><center><span class=\"style2\"><a href=\"javascript:history.back();\">Назад</a></span></center>";


может трабла в этом:

Код

if ($tovar == 0 or $strona == 0 or $oblost == 0 or $gorod == 0 or $fio == 0 or $indecs == 0 or $email == 0 or $adress == 0){

типа НУЛИ типа ТОКА цифры ?! хмм.... а как тогда указать то тут в IF типа "$tovar" пустое значение или там есть что то smile)) 

это проверка на заполнение полей. 


Автор: skyboy 16.12.2007, 13:28
Цитата(DRUG_ADDICT @  16.12.2007,  10:58 Найти цитируемый пост)
а как тогда указать то тут в IF типа "$tovar" пустое значение

http://php.net/empty - проверяет переданный параметр на "не пустоту".
если переменная иммет значение:
  • "" (пустая строка)
  • 0 (0 как целое число)
  • "0" (0 как строка)
  • NULL
  • FALSE
  • array() (пустой массив)
  • var $var; (переменная объявлена, но её не присвоенно значение)
то функция возвращает true. Иначе - false.

Автор: Feldmarschall 16.12.2007, 13:33
Вообще, тут уместно, наверное, дать ссылку на http://www.php.net/manual/ru/language.types.type-juggling.php

Автор: misterio 16.12.2007, 14:53
Вместо OR попробуй использовать " || "

Автор: DRUG_ADDICT 16.12.2007, 15:09
Цитата(skyboy @  16.12.2007,  13:28 Найти цитируемый пост)
empty - проверяет переданный параметр на "не пустоту".
если переменная иммет значение:

    * "" (пустая строка)
    * 0 (0 как целое число)
    * "0" (0 как строка)
    * NULL
    * FALSE
    * array() (пустой массив)
    * var $var; (переменная объявлена, но её не присвоенно значение)

то функция возвращает true. Иначе - false.


пробовал: 
Цитата(misterio @  16.12.2007,  14:53 Найти цитируемый пост)
Вместо OR попробуй использовать " || " 

т.к. делал получалось что то типа этого:

Код

if (empty($TURBINA1) && empty($TURBINA2) or empty($TURBINA3) || empty($TURBINA4)) 

дает синтаксическую ошибку

Кстати за это:
Цитата(skyboy @  16.12.2007,  13:28 Найти цитируемый пост)

    * "" (пустая строка)
    * 0 (0 как целое число)
    * "0" (0 как строка)
    * NULL
    * FALSE
    * array() (пустой массив)
    * var $var; (переменная объявлена, но её не присвоенно значение)


Как мне сделать? Так?
Код

if ($tovar == "" or $strona == "" or $oblost == "" or $gorod == "" or $fio == "" or $indecs == "" or $email == "" or $adress == ""){


Автор: HotHead 16.12.2007, 15:24
DRUG_ADDICT, можете тупо поставить везде отрицание. Т.е.
Код

if (!$tovar or !$strona or !$oblost or !$gorod or !$fio or !$indecs or !$email or !$adress)


Хотя красивее и предпочтительней разобраться с empty.

Автор: Feldmarschall 16.12.2007, 15:47
misterio, дурацкий совет.
Не пиши того, в чем не разбираешься.

DRUG_ADDICT, ошибку у тебя выводит потому, что ты заполнил не все нужные поля.

Вообще, твоя манера письма отбивает всякую охоту с тобой разговаривать.


 ! 
PARROT
Уважаемый Feldmarschall, пожалуйста, будьте так добры, смените ВАШ ТОН РАЗГОВОРА. И Везде пожалуйста!

Автор: DRUG_ADDICT 16.12.2007, 18:47
HotHead СПАСИБО!!!

Проблема решена. Тему можно закрывать. 


Автор: Feldmarschall 16.12.2007, 19:02
Да, это я тупанул. От чересчур большого усердия.

HotHead, после $tovar = $_POST['tovar'];, empty уже не имеет смысла. Особенно, если не углубляться в материи на тему считается ли заполенным поле, если в него ввели ноль и он является допустимым значением =)

И пожелание большинству участников этой темы - разобраться, всё-таки, почему работает !$tovar, $tovar=="", empty($tovar) и не работает $tovar==0


Автор: DRUG_ADDICT 16.12.2007, 20:07
Цитата(Feldmarschall @  16.12.2007,  19:02 Найти цитируемый пост)
И пожелание большинству участников этой темы - разобраться, всё-таки, почему работает !$tovar, $tovar=="", empty($tovar) и не работает $tovar==0

Да какбы $tovar==0 то работает тока просто опер IF ждет от переменой целочисленное число/значение а получает буквы и не че понять не может smile) если в моя форма заполнялась только числами я думаю это условие работало бы на УРА! smile 


 ! 
PARROT
Дорогой друг! Пожалуйста, пользуйтесь русским языком в своих постах как можно больше! Слэнг оставьте для подворотни. Спасибо. 



Автор: Feldmarschall 16.12.2007, 20:14
Нет, это неправильное объяснение. Оператор IF мало того, что ничего не ждет, так он ещё и не умеет вообще работать ни с какими переменными, кроме булевых. В данном случае имеет смысл говорить об операторе ==
который тоже ничего не ждет, но зато преобразовывает. Что во что - написано по ссылке, которую я давал выше.
Хотя, пожалуй, стоило дать вот эту: http://www.php.net/manual/ru/types.comparisons.php
Она понагляднее будет. Хотя объяснения все равно - в предыдущей.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)