Показать сообщение отдельно
  #1 (permalink)  
Старый 04.02.2017, 01:14
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

отсутствие default в switch
Я сделал калькулятор

<?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, я не знаю.
Ответить с цитированием