@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;
}

}
  • Вопрос задан
  • 99 просмотров
Решения вопроса 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 например.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы