X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
> Как проверить переменные на тип, если их много
Banderas
Banderas
Topic Starter сообщение 30.12.2010, 10:46; Ответить: Banderas
Сообщение #1


Решил попрактиковаться в РНР, заскучал уже =) Пишу по книге и своими силами магазинчик.


Из форм передаю количество заказанных единиц каждого товара. Хочу проверить введины ли цифры. Знаю что есть переменная is_numeric() но она для одной переменной, мне бы как-то записать все переменные в одну функцию.


Вышел из ситуации вот в такой способ

[php]$tovar = array($pokr, $maslo, $svechi);

for ($i=1;$i<3;$i++) { // count($tovar) не работает, почему?

if (is_numeric($tovar[$i])) {

$flag=true;

} else {

$flag=false;

echo '<p>Вы неправильно заполнили форму';

break;

}

}[/php]


но все-таки надеюсь что есть функция is_numeric() на подобе isset()
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
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
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
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
matroskin8
сообщение 30.12.2010, 15:24; Ответить: matroskin8
Сообщение #5


(surfer @ 30.12.2010, 13:05) *
count($tovar) так проверим все элементы массива

нет так ты узнаешь количество элементов в массиве.

А я и не знал что делает функция count() ;) Смотрим внимательно мой пост и пост ТС. Комментарий я написал именно так, чтобы ТС понял в чем его ошибка - в том, что перебор идет не с первого элемента (не выдираем кусок цитаты, а цитируем всю строку ;) ) ;)
А по поводу обезопасить данные... думаю, функция intval() здесь ни к чему, данные ведь передаются методом POST (не GET) и ТС их никуда не заносит (во всяком случае, об этом речи нет). Здесь просто надо проверить тип полученных данных, а НЕ ПРИВЕСТИ их к целочисленному значению, что и сделает предложенная функция.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 30.12.2010, 15:32; Ответить: sc2r2bey
Сообщение #6


(matroskin8 @ 30.12.2010, 14:24) *
данные ведь передаются методом POST (не GET) и ТС их никуда не заносит (во всяком случае, об этом речи нет).

как все запущено, можно ломать ваши самописные скрипты ;)

любые данные преступаемые из вне надо проверять и обрабатывать!!!

а чтоб понять где ошибка надо помнить об отладке
и писать грамотные комментарии к своим скриптам


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
matroskin8
сообщение 30.12.2010, 15:38; Ответить: matroskin8
Сообщение #7


(surfer)
как все запущено, можно ломать ваши самописные скрипты smile.gif

Аналогичная реплика от меня.
(surfer)
любые данные преступаемые из вне надо проверять и обрабатывать!!!

А я с этим и не спорю... только любые данные, с которыми мы затем работаем.
1) Функцией is_numeric() мы как раз и проверяем поступившие данные.
2) Если данные соответствуют ожидаемому типу - ок, можем перейти к п.3, если это требуется, иначе мы с ними абсолютно ничего не делаем.
3) Если понадобится с ними что-то делать в дальнейшем, то мы их обработаем соответственно.


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
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
matroskin8
сообщение 30.12.2010, 15:52; Ответить: matroskin8
Сообщение #9


(surfer @ 30.12.2010, 13:43) *
опять же повторю вопрос, для чего нужна такая проверка?

Это уже вопрос к ТС. Задача стояла простая - проверить является ли полученное числом.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 30.12.2010, 16:08; Ответить: 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]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Большие ставки для кликов в Я.Директ. Как удешевить?
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


 



RSS Текстовая версия Сейчас: 29.3.2024, 19:03
Дизайн