Задать вопрос
@xGreen_Max

Не работает проверка на число в массиве/GET?

Данные из html формы умножаются друг на друга,
а именно два элемента массива $_GET.
Затем результат умножения выводится отдельной переменной $equals на последней итерации.

Но у меня не работает условие(if), проверка элементов массива на тип число.
Я добавил проверку на число is_integer, чтобы скрипт(умножение) срабатывал,
когда пользователь введет два целочисленных значения в html форму.
Как это пофиксить? Условие не работает =(

<form method ="GET">   
Форма:                                                                                     
<div> 1 число:    <input type="text" name="num1" />    </div>     
<div> 2 число   : <input type= "text" name="num2" /> </div>  
<input type="submit" value="Отправить">
</form>

<br>
<br>


$request = $_GET;

$names = ["num1"=> "1-число:",  "num2"=> "2-число:"];
$default =  ["num1"=> "По умолчанию",  "num2"=> "По умолчанию"];

$equals = 0;
$counter = 0;


foreach($names as $key => $items){


if(isset($request[$key]) && is_integer($request[$key]) ){    // почему не работает это условие?
$equals  = $request["num1"] * $request["num2"];                             
$default[$key] =  htmlentities($request[$key]);                                                                                                                            
}                                                                                    


echo "$names[$key] $default[$key]  <br>";

if(++$counter == count($names)){  // сработает на последней итерации цикла
echo "Равно: ".$equals;
}

}
  • Вопрос задан
  • 106 просмотров
Подписаться 1 Простой 10 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Совсем не то.

$names = ["num1"=> "1-число:",  "num2"=> "2-число:"];
$default =  ["num1"=> "По умолчанию",  "num2"=> "По умолчанию"];
$equals = 0;

foreach($names as $key => $items){
    if(isset($_GET[$key]) && is_number($_GET[$key]) ){
        $default[$key] =  $_GET[$key];
    }
    echo "$items ".htmlentities($default[$key])."<br>\n";
}

$equals  = $default["num1"] * $default["num2"];
echo "Равно: ".$equals."<br>\n";
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rPman
$_GET возвращают только строки и массивы, а is_integer проверяет тип переменной, а не ее значение.

Чтобы проверить по значению, есть is_numeric, для строк "1" или " -0.123" оно будет true но "1-ая" уже false
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1) Полям желательно дать тип number, тогда есть некоторая вероятность что в нее будут попадать цифровые значения.
2) $request = $_GET; абсолютно лишнее телодвижение.
3) is_integer вернет всегда фалс, так как переменные в $_GET всегда строки. Используйте intval() для приведения к целому, или floatval() для флоат соответственно, после этого можно проверять на empty например.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽