Я сделал калькулятор
<?php error_reporting(-1);
ini_set('display_errors', 'On');
header('Content-Type: text/html; charset=utf-8');
?>
<form action="" method="POST" style="border: 1px solid red; width: 400px; float: left;">
<div style="width: 300px;">Введите число 1 <input type="text" name="number1"></div>
<div style="width: 300px;">Введите число 2 <input type="text" name="number2"></div>
<div class="operator" style="padding: 10px 0;">
Выберите знак оператора<br>
<label>плюс <input type="radio" name="op" value="+"></label> |
<label>минус <input type="radio" name="op" value="-"></label> |
<label>умножить <input type="radio" name="op" value="*"></label> |
<label>разделить <input type="radio" name="op" value="/"></label> |
</div>
<input type="submit" name="submit" value="Получить результат">
</form>
<div class="result" style="width: 200px; height: 100px; border: 1px solid red; float: left;">
<span style="display: block; padding: 10px 0;">Результат</span>
<?php
function calc($num1,$num2,$action = '+'){
if(is_numeric($num1) && is_numeric($num2)){
switch($action){
case '+':
return $num1 . ' + '. $num2 . ' = ' . ($num1 + $num2);
break;
case '-':
return $num1 . ' - '. $num2 . ' = ' . ($num1 - $num2);
break;
case '*':
return $num1 . ' * '. $num2 . ' = ' . ($num1 * $num2);
break;
case '/':
if($num2 == 0){
return 'На 0 делить нельзя';
}
else{
return $num1 . ' / '. $num2 . ' = ' . ($num1 / $num2);
}
break;
}
}
else{
return 'Введите число';
}
}
if(isset($_POST['number1'], $_POST['number2'])){
if(isset($_POST['op'])){
echo calc($_POST['number1'], $_POST['number2'], $_POST['op']);
}
else{
echo calc($_POST['number1'], $_POST['number2']);
}
}
?>
</div>
И мне говорят, то, что не указал default из-за этого есть уязвимости для хакеров.
Цитирую: Допустим я отправлю action="aaa" и произойдет логическая ошибка, так как у тебя отсутствует default. default стоит добавлять, чтобы предусмотреть разное поведение. Твой вопрос: зачем хакеры подделывают формы? Ну для того, чтобы взламывать сайты. Как раз default бы это исправил
А что можно написать в default, я не знаю.
////////////////////////////////
Ещё мне пишут
В данном случае отсутствие default приводит к тому, что функция ничего не возвращает, то есть возвращает NULL. И ты делаешь echo NULL, а это нехорошо.
//////////////////////////////////////////
Ну так если передавать action="blabla" у тебя необработанная ситуация!
тут вот какая ситуация, когда ты пишешь код, то всегда ты должен контроллировать варианты, что возвращает функция. Либо это текст ошибки, либо число, либо NULL, NULL возвращается когда передаёшь blabla.
1) Когда ты обрабатываешь событие передачи 'blabla' ты понимаешь, что любой человек включая тебя может отредактировать любую форму и отправить желаемые данные 2) Обрабатывая подобное поведение ты себя сразу учишь грамотно писать код, когда у тебя под контролем есть все варианты поведения скрипта.
/////////////////////////
Но я не понимаю, как она может возвращать NULL, если результат выводится?
Я всё равно не понял, как сделать правильно.
Ну вот в конце напишу
default: return "Некорректный ввод";
И что дальше?
Вообще, как я вижу, ничего страшного не случится. Я хоть и не мастер php, но все же. Однако существуют стандарты оформления кода (PSR-0, PSR-1, PSR-2, PSR-3, PSR-4) - почитайте. Они есть и на русском. Так вот, касательно switch указано следующее:
Пример:
switch (...)
{
case 1:
...
// УПРАВЛЕНИЕ ПЕРЕДАЁТСЯ ВНИЗ
case 2:
{
$v = get_week_number();
...
}
break;
default:
}
Источник https://www.opennet.ru/docs/RUS/php_code_standart/format.switch.html Но лучше гуглить именно PSR-0, PSR-1, PSR-2, PSR-3, PSR-4.
Таким образом, полагаю, что в каких-то случаях это от чего-то защитит (хоть и сложно придумать такую ситуацию в конкретном случае). Понимаю, что хочется вообще полностью всё понять и иметь полное представление.
Гораздо большую опасность представляет приём переменных из формы без защиты от SQL инъекций (но это тоже не для этого случая).
Вам при неизвестном действии нужно возвращать num1, т.е с логики калькулятора вводное значение так и осталось неизменным. При default - return $num1;
Как определить нажатие и запустить функцию но при этом использовать одну функцию для множество повторяющихся формСейчас поймете о чем я
Когда я использую в ckeditor кнопку раскрыть на весь экран то у меня страница становится белой и только справа вверху есть пара ссылок и все, для...
Есть функция она работает с сервисами, но в другом месте мне нужно вывести конкретный сервисего айди _configs
Добрый день,допустим я имею стандартный каркас google Maps javascript API3