Выводит на экран в любом случае "Введите коректное число1" Код на PHP :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ПХП ООП</title>
</head>
<body>
<form action="index.php" method="POST">
<input type="text" name="chil">
<button type="submit" name="do_sum"><p>Решить</p></button>
</form>
<?php
trait Prim {
public $numse = 15;
public function SumLinePrim($numse)
{
return $this->numse * $this->get();
}
}
abstract class HtmlError
{
public static function Error()
{
if(! is_int());
}
}
class Glava extends Exception
{
use Prim;
public $resheno;
function __construct($resheno)
{
$this->resheno = $resheno;
}
public function get()
{
return $this->resheno;
}
public function getOtvet()
{
if(is_string($this->get($this->resheno))) {
return print "Введите коректное число";
} else {
return $this->get() + $this->SumLinePrim($this->numse);
}
}
}
$data = $_POST;
$errors = array();
if(isset($data['do_sum'])) {
$doc7 = new Glava($data['chil']);
print "{$doc7->getOtvet()}";
}
?>
Значение переданное POST запросом из формы
$data['chil']
всегда будет строкой, что бы вы не ввели, соответственно
is_string($this->get())
всегда будет true
и всегда будет срабатывать
if(is_string($this->get($this->resheno))) {
return print "Введите коректное число";
}
Предполагаю (нет возможности быстро проверить), что данные приходящие в $data['chil']
всегда являются строкой ('5'
- строка, 5
- число, и $data['chil']
содержит '5'
), поэтому условие is_string($this->get($this->resheno))
всегда True
(кстати, метод get
у Вас не принимает аргументов, можно написать is_string($this->get())
или is_string($this->resheno)
).
Можно преобразовать строку в число, но перед этим нужно проверить, можно ли строку преобразовать в число или нет, простой пример:
$a = '654654.6465'; // $a - строка с числом ('654654.6465')
echo('Type $a: ');
var_dump($a);
// is_numeric проверяет, можно ли строку преобразовать в число или нет.
echo("Можно преобразовать в число?: " . (int)is_numeric($a) . "\n");
$a = (float)$a; // Преобразовываем; $a - число (654654.6465)
echo('Type $a: ');
var_dump($a);
echo("\n\n");
$a = 'string'; // $a - просто строка
echo('Type $a: ');
var_dump($a);
// Т.к. $a нелься преобразовать в числу, is_numeric возвращает false
echo("Можно преобразовать в число?: " . (int)is_numeric($a) . "\n");
$a = (float)$a; // Теперь $a содержит 0, что тоже число, и это может привести
// к ОШИБКАМ в программе, поэтому перед преобразованием ВСЕГДА
// НУЖНО проверять строку ф-ией is_numeric
echo('Type $a: ');
var_dump($a);
Вывод:
Type $a: string(11) "654654.6465"
Можно преобразовать в число?: 1
Type $a: float(654654.6465)
Type $a: string(6) "string"
Можно преобразовать в число?: 0
Type $a: float(0)
Документация: https://secure.php.net/manual/ru/function.is-numeric.php
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я начал изучать фреймворк Laravel 58 и столкнулся с проблемой
У меня есть серверная часть написанная на php, мне нужно её максимально защитить от XSS и подобных атак