Помощник
|
Как проверить переменные на тип, если их много |
Banderas
|
Сообщение
#1
|
||
|
|
||
|
|||
matroskin8 |
30.12.2010, 13:20;
Ответить: matroskin8
Сообщение
#2
|
|
Если надо проверить числовой ли тип к нам пришел, то правильно делаешь - функцией is_numeric() и проверяем: если то, что пришло будет числом (или числовой строкой), то подходит такое, а иначе - до свидания
Функция count() работает, просто ты начинаешь счет не с первого элемента, а со второго ($i = 1), поэтому первый элемент массива и не проверяется. Так правильнее будет: [php]$tovar = array($pokr, $maslo, $svechi); for ($i=0;$i<count($tovar);$i++) { // count($tovar) так проверим все элементы массива if (is_numeric($tovar[$i])) { $flag=true; } else { $flag=false; exit('<p>Вы неправильно заполнили форму'); } }[/php] |
|
|
yury_mw |
30.12.2010, 13:23;
Ответить: yury_mw
Сообщение
#3
|
|
Banderas
Как проверить переменные на тип, если их много И какой вы хотите получить результат, если, например, покрышки ввели цифрой "12", а свечи фразой "нафих не надо"? ;) Если переменных много, то и результатов проверки будет столько же. И еще мне кажется, что в данном случае правильнее просто не разрешать вводить в соответствующее поле формы ничего кроме цифровых символов (0-9) или же сделать поле с селектом из цифровых вариантов. count($tovar) не работает, почему? Прекрасно работает, только следует иметь ввиду, что если массив определен как $tovar = array($pokr, $maslo, $svechi); то элементы массива будут нумероваться с 0 до 2, а count($tovar) вернет 3. |
|
|
sc2r2bey |
30.12.2010, 15:05;
Ответить: sc2r2bey
Сообщение
#4
|
|
а не проще через intval() пропустить, заодно и обезопасишь вводимые данные
[php]$numer = intval($_POST['numer']);[/php] ну а если это массив, то думаю тебе не надо объяснять как его перебрать. опят-таки надо понимать задачу целиком, для чего тебе эта проверка нужна? !!! а до кучи есть еще settype() count($tovar) так проверим все элементы массива нет так ты узнаешь количество элементов в массиве. [php]for ($i=0;$i<count($tovar);$i++)[/php] а вот этот цикл позволит перебрать все элементы массива. count($tovar) не работает, почему? а кто про отладку забыл, распечатай на экран содержимое массива, определены ли у тебя переменные $pokr, $maslo, $svechi, если нет, то массив будет пустой следовательно count() будет равняться 0 и цикл не будет работать. надо так: [php]$tovar = array($pokr=>1, $maslo=>'text', $svechi=>12);[/php] -------------------- программирую web и для we |
|
|
matroskin8 |
30.12.2010, 15:24;
Ответить: matroskin8
Сообщение
#5
|
|
count($tovar) так проверим все элементы массива нет так ты узнаешь количество элементов в массиве. А я и не знал что делает функция count() Смотрим внимательно мой пост и пост ТС. Комментарий я написал именно так, чтобы ТС понял в чем его ошибка - в том, что перебор идет не с первого элемента (не выдираем кусок цитаты, а цитируем всю строку ) А по поводу обезопасить данные... думаю, функция intval() здесь ни к чему, данные ведь передаются методом POST (не GET) и ТС их никуда не заносит (во всяком случае, об этом речи нет). Здесь просто надо проверить тип полученных данных, а НЕ ПРИВЕСТИ их к целочисленному значению, что и сделает предложенная функция. |
|
|
sc2r2bey |
30.12.2010, 15:32;
Ответить: sc2r2bey
Сообщение
#6
|
|
данные ведь передаются методом POST (не GET) и ТС их никуда не заносит (во всяком случае, об этом речи нет). как все запущено, можно ломать ваши самописные скрипты любые данные преступаемые из вне надо проверять и обрабатывать!!! а чтоб понять где ошибка надо помнить об отладке и писать грамотные комментарии к своим скриптам -------------------- программирую web и для we |
|
|
matroskin8 |
30.12.2010, 15:38;
Ответить: matroskin8
Сообщение
#7
|
|
(surfer) как все запущено, можно ломать ваши самописные скрипты smile.gif Аналогичная реплика от меня. (surfer) любые данные преступаемые из вне надо проверять и обрабатывать!!! А я с этим и не спорю... только любые данные, с которыми мы затем работаем. 1) Функцией is_numeric() мы как раз и проверяем поступившие данные. 2) Если данные соответствуют ожидаемому типу - ок, можем перейти к п.3, если это требуется, иначе мы с ними абсолютно ничего не делаем. 3) Если понадобится с ними что-то делать в дальнейшем, то мы их обработаем соответственно. Поблагодарили: (0) |
|
|
sc2r2bey |
30.12.2010, 15:43;
Ответить: sc2r2bey
Сообщение
#8
|
|
так можно, а насколько оптимально, столько телодвижений!
опять же повторю вопрос, для чего нужна такая проверка? сравни 2 конструкции дающей один и тот же результат, а еще загони в цикл. [php]// 1 вариант $test = "text"; $test = intval ($test); echo $test; // 2 вариант $test = "text"; $test = is_numeric ($test) ? intval ($test) : 0; echo $test;[/php] единственное я не понимаю зачем такая проверка нужна, объясните! -------------------- программирую web и для we Поблагодарили: (0) |
|
|
matroskin8 |
30.12.2010, 15:52;
Ответить: matroskin8
Сообщение
#9
|
|
|
|
|
Banderas
|
Сообщение
#10
|
|
ого, раздули тему))) Спасибо всем за советы. Пожалуй я обязан ответить на вопрос "зачем мне такая проверка?". Мне нужно проверить данные из формы (method=POST). Данные должны быть числом. Есть 3 поля для заполнения (type="text"). Если хотябы в одно поле введено типа "sdf2" то скрипт должен показывать сообщение об ошибке, если все верно - показывается информация о заказе.
Это все я делаю для себя, код нерациональный и даже немного извращенный. Но я вспоминаю по чуть-чуть, так что не пинайте...)) Кому интересно, вот весь код [php]<?php define('pPrice', 100); define('mPrice', 10); define('sPrice', 4); define('pdv', 0.2); $pokr = $_POST['pokr-ki']; $maslo = $_POST['maslo']; $svechi = $_POST['svechi']; $find = $_POST['howfind']; $tovar = array($pokr, $maslo, $svechi); for ($i=0;$i<count($tovar);$i++) { if (is_numeric($tovar[$i])) { $flag=true; } else { $flag=false; echo '<p>Вы неправильно заполнили форму'; break; } } if ($flag) { $totalPrice = $pokr*pPrice+$maslo*mPrice+$svechi*sPrice; if ($totalPrice == 0) { echo "Вы ничего не заказали"; } else { echo "<p>Заказ обработан в " . date("H:i:s A jS F Y"); echo "<p>покришки: $pokr на сумму " . $pokr*pPrice . "$"; echo "<br>масло: $maslo на сумму " . $maslo*mPrice . "$"; echo "<br>свечи: $svechi на сумму " . $svechi*sPrice . "$ <p>"; echo "Всего, учитывая ПДВ: $" . number_format($totalPrice*(1+pdv), 2) . "<br>"; switch($find) { case '01' : echo 'Поисковик'; break; case '02' : echo 'Друг'; break; case '03' : echo 'Каталоги'; break; case '04' : echo 'Случайно'; break; } } } echo <<<theEnd <form action="orderform.php" method=GET> <input type=submit value="Страница заказа"> </form> theEnd ?>[/php] |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Большие ставки для кликов в Я.Директ. Как удешевить? | 2 | rownong27 | 1125 | 26.3.2024, 14:13 автор: knezevolk |
|
Как вы бросили работу и перешли на заработок с сайтов? | 12 | uahomka | 2300 | 25.3.2024, 6:52 автор: Skyworker |
|
Как отозвать банковский платеж фрилансеру? | 28 | metvekot | 3922 | 25.3.2024, 6:34 автор: Skyworker |
|
Как вывести деньги в Украине с заблокированного Юмани ? | 23 | freeax | 3653 | 24.3.2024, 20:55 автор: Liudmila |
|
Через какой браузер и как можно найти в кэшэ браузера видео | 10 | Room | 1947 | 23.3.2024, 7:41 автор: Room |
Текстовая версия | Сейчас: 29.3.2024, 19:03 |