В файл с переменными занес следующий список переменных:
// Инициализируем переменные в метод POST
$balls = $_POST['balls'];
$boots = $_POST['boots'];
// Объявляем переменные числом
$balls = (int)$balls;
$boots = (int)$boots;
// Присваиваем переменной регулярное выражение на целые числа
$check_integers = "#[^0-9]+#";
В файл контроллер вношу проверку на ввод пользователем, числа в форму:
if(!empty($_POST['ok']))
{
if(preg_match($check_integers,$balls || $check_integers,$boots))
echo 'В полях \'<strong>Мячи и бутсы</strong>\', допускается ввод только целых чисел. ';
else
$date_result = "<p>Ваш заказ принят в ".date('H:i, jS F Y')."</p>";
$order_result = '<p>Закано: </p>' .$balls .' - покрышек<br>'
.$boots .' - бутылок масла<br>';
}
Не выводит сообщение об ошибке если я ввожу не число или не целое число. Попрошу не кидать в меня камни, после длительной теории, постепенно перехожу к практике, вопросы могут быть и я уверен будут, глупыми :)
Почему не выводит то? :/
Спустя 5 минут, 52 секунды (7.07.2011 - 02:13) waldicom написал(а):
Цитата (aveBen @ 7.07.2011 - 00:08) |
if(preg_match($check_integers,$balls || $check_integers,$boots)) |
Так точно нет. Может так:
if(preg_match($check_integers,$balls) || preg_match($check_integers,$boots))
Спустя 5 минут, 43 секунды (7.07.2011 - 02:19) aveBen написал(а):
Цитата (waldicom @ 6.07.2011 - 23:13) |
Может так:if(preg_match($check_integers,$balls) || preg_match($check_integers,$boots)) |
Неа..
Забыл добавить, в файле скин show.tpl вывожу инфо из переменных так:
<?php echo $date_result; ?>
<?php echo $order_result; ?>
После формы. Ввожу к примеру буквы и в выводе он их не отображает но и ошибку не выдает...
Спустя 11 минут, 53 секунды (7.07.2011 - 02:31) tatti написал(а):
$balls = isset($_POST['balls']) ? (int)$_POST['balls'] : Null;
$boots = isset($_POST['boots']) ? (int)$_POST['boots'] : Null;
if(is_int($balls) && is_int($boots))
{
$date_result = '<p>Ваш заказ принят в '. date('H:i, jS F Y') .'</p>';
$order_result = '<p>Закано: </p>' .$balls .' - покрышек<br />' .$boots .' - бутылок масла<br />';
} else {
echo "В полях \"<strong>Мячи и бутсы</strong>\", допускается ввод только целых чисел.";
}
Спустя 17 минут, 55 секунд (7.07.2011 - 02:49) aveBen написал(а):
Цитата (tatti @ 6.07.2011 - 23:31) |
$balls = isset($_POST['balls']) ? (int)$_POST['balls'] : Null; if(is_int($balls) && is_int($boots)) |
Не вышло.. :\ Но за помощь + очень многое мне напомнил
Спустя 11 минут, 53 секунды (7.07.2011 - 03:01) tatti написал(а):
aveBen
поменяй
работает.
либо эти переменные не передаются туда где тебе надо
либо POST не передаётся как надо
поменяй
$date_result =и
$order_result =на echo
работает.
либо эти переменные не передаются туда где тебе надо
либо POST не передаётся как надо
Спустя 21 час, 54 минуты, 30 секунд (8.07.2011 - 00:55) aveBen написал(а):
Цитата (tatti @ 7.07.2011 - 00:01) |
aveBen поменяй<pre class="sh_sourceCode" rel="php"><span class="sh_variable">$date_result</span> <span class="sh_symbol">=</span> </pre>и<pre class="sh_sourceCode" rel="php"><span class="sh_variable">$order_result</span> <span class="sh_symbol">=</span> </pre>на echo работает. либо эти переменные не передаются туда где тебе надо либо POST не передаётся как надо |
В итоге так и не заработало. Пришлось чуток переписать код, вот что вышло:
if(!empty($_POST['ok']))
{
if (!preg_match("|^[\d]*$|", $_POST['balls']))
{
$error_balls = '<strong>Ошибка:</strong> в полях \"<strong>Мячи</strong>\", допускается ввод
только целых чисел от 1 до 999. Например 255. Пожалуйста, повторите Ваш заказ установив целое число в поле.
Если не хотите заказывать данную продукцию, оставьте поле пустым.';
}
elseif (!preg_match("|^[\d]*$|", $_POST['boots']))
{
$error_boots = '<strong>Ошибка:</strong> в полях \"<strong>Бутсы</strong>\", допускается ввод
только целых чисел от 1 до 999. Например 255. Пожалуйста, повторите Ваш заказ установив целое число в поле.
Если не хотите заказывать данную продукцию, оставьте поле пустым.';
}
elseif (!preg_match("|^[\d]*$|", $_POST['shirts']))
{
$error_shirts = '<strong>Ошибка:</strong> в полях \"<strong>Футболки</strong>\", допускается ввод
только целых чисел от 1 до 999. Например 255. Пожалуйста, повторите Ваш заказ установив целое число в поле.
Если не хотите заказывать данную продукцию, оставьте поле пустым.';
}
else
$date_result = '<p>Ваш заказ принят в '. date('H:i, jS F Y') .'</p>';
$order_result = '<p>Закано: </p>' .$balls .' - Мячей<br />' .$boots .' - Пар бутс<br />' .$shirts .' - футболок<br />';
}
Работает.
Вопрос 1. Так как if - elseif работает до первого успешного или не успешного условия, он мне выводит по одной ошибке. Если я допустим введу в первом поле цифру а во втором и третьем строку, он мне выведет ошибку в поле номер два. Как вывести сразу обе ошибки? Не обязательно кидать готовый код, перенаправьте пожалуйста на мануал или просто скажите что нужно сделать а я постараюсь, это исполнить. Сделав однажды сам, запомню надолго :)
Вопрос 2. Правильно ли написан данный код, со стороны безопасности, со стороны грамотного построения кода ну и стиля кодирования. Удобно ли Вам его читать?
Спасибо за ответы и помощь!
Спустя 11 часов, 12 минут, 16 секунд (8.07.2011 - 12:08) aveBen написал(а):
Еще один вопрос, я так понимаю, делать проверку на заполнение поля не обязательно, в любом случае там будет 0... Верно?
Спустя 9 часов, 24 минуты, 17 секунд (8.07.2011 - 21:32) aveBen написал(а):
Мужики, Ваше мнение для меня очень важно знать, если не лень, отпишитесь пожалуйста хотя бы по вопросам:
1) Стиля кодирования
2) Грамотности написания данной части кода
1) Стиля кодирования
2) Грамотности написания данной части кода
Спустя 32 минуты, 54 секунды (8.07.2011 - 22:05) kristall написал(а):
elseif'ы одного уровня лучше располагать не лесенкой, а на одном уровне. Лесенка -- признак вложенности, тут вложенности нет.
У elseif'ов срабатывает только одно условие. Если надо, чтобы сработали все проверки, делай каждую отдельным if'ом. А еще кошернее -- собрать все в массив и прокрутить его foreach'ем.
Если переменных больше 3-5, или их число будет изменяться в будущем, такой подход вообще единственно правильный.
У elseif'ов срабатывает только одно условие. Если надо, чтобы сработали все проверки, делай каждую отдельным if'ом. А еще кошернее -- собрать все в массив и прокрутить его foreach'ем.
$var_arr = array('balls' => array("|^[\d]*$|", "Error text"),
'boots' => array("...", "..."),
'shirts' => array("...", "..."));
foreach ($var_arr as $var => $data){
if (!preg_match($data[0], $_POST[$var])){// как бы preg_match("|^[\d]*$|", $_POST['balls']); и т.д.
$errors[] = $data[1]; // = "Error text", и т.д.
}
}
Если переменных больше 3-5, или их число будет изменяться в будущем, такой подход вообще единственно правильный.
Спустя 3 часа, 33 минуты, 41 секунда (9.07.2011 - 01:38) aveBen написал(а):
Цитата (kristall @ 8.07.2011 - 19:05) |
elseif'ы одного уровня лучше располагать не лесенкой, а на одном уровне. Лесенка -- признак вложенности, тут вложенности нет. У elseif'ов срабатывает только одно условие. Если надо, чтобы сработали все проверки, делай каждую отдельным if'ом. А еще кошернее -- собрать все в массив и прокрутить его foreach'ем. .... Если переменных больше 3-5, или их число будет изменяться в будущем, такой подход вообще единственно правильный. |
Спасибо, принял замечания. Единственное что хочу отметить, что я пока в процессе простого изучения.
Что такое массив, как его обрабатывать я примерно знаю, но в плотную планирую познакомиться чуть позже с этим, пока же хочу сделать форму заказа с сохранением данных в файл, после этого в БД.
Я думаю со временем и практикой все придет.
Еще раз спасибо! А то я уже подумал, все увидели мои каракули, почесали затылок и сказали вот блин, Попов 2 объявился
