try{ // 「最大積載量」:空チェック if(empty($box)){ $error=$error.'最大積載量を入力してください。<br>'; //整数・文字数チェック }elseif(!filter_input(INPUT_GET, $maxcapa> 20 || !ctype_digit($maxcapa)){ }elseif($box = filter_input(INPUT_GET, 'get-maxcapa', FILTER_VALIDATE_INT, ["options" => ["min_range" =>1, "max_range" => 20]]) === false){ $error = $error.'最大積載量は整数「1~20」以内で入力してください。<br>'; } // 「荷物名」:空チェック if(empty($item_name)){ $error=$error.'荷物名を入力してください。<br>'; // 文字数チェック }elseif(mb_strlen($item_name) >= 11){ $error = $error.'荷物名は「11文字」以内で入力してください。<br>'; } // 「積載量」:空チェック if(empty($item_weight)){ $error = $error.'積載量を入力してください。<br>'; // 整数・文字数チェック }elseif($item_weight = filter_input(INPUT_GET, 'get-item_weight', FILTER_VALIDATE_INT, ["options" => ["min_range" =>1, "max_range" => 20]]) === false){ $error = $error.'積載量は整数「1~20」以内で入力してください。<br>'; } // 「走行距離」:空チェック if(empty($mil)){ $error = $error.'走行距離を入力してください。<br>'; // 数値チェック }elseif($mil = filter_input(INPUT_GET, 'get-mil', FILTER_VALIDATE_FLOAT) === false){ $error = $error."走行距離を数値で入力してください。<br>"; } if($error <> ""){ throw new Exception($error); }else{ $r_truck = new Truck($box); echo "<br>".'「荷物を乗せる」'."<br>"; $r_truck->load($item_name , $item_weight); echo "<br>".'「走る」'."<br>"; $r_truck->drive($mil); echo "<br>".'「荷物を下す」'."<br>"; $r_truck->unload(); } }catch(Exception $errorm){ echo $errorm -> getMessage(); }
ここに質問の内容を詳しく書いてください。
PHPで、webフォームのGET/POSTのボックスにそれぞれ値を入力し、送信ボタンを押して情報を取得する実装を行っています。
最大積載量・走行距離に数値を入力したのですが、下記表示になってしまいます。
デバックを確認したところ、エラーが違うところに飛んでいたため、
関数の指定が間違っていると考えられるのですが、原因を突き止められません。
表示された情報
最大積載量が数字以外で入力されています。// 最大積載量:数字で表示したい
「荷物を乗せる」
りんごを積んだ >
「走る」
数値以外が入力されました。 // 走行距離:数値で表示したい
「荷物を下す」
停車 > りんごを下ろした
車種[]
走行距離[]
こちらがそれぞれの引数を代入したコードです
$box = $_GET['get-maxcapa']??''; $item_name = $_GET['get-item']??''; $item_weight = $_GET['get-capa']??''; $mil = $_GET['get-mil']??''; echo "<br>".'「GETエラー」'."<br>"; // 値が入っているかを確認 var_dump($box); var_dump($item_name); var_dump($item_weight); var_dump($mil);
別ファイルにてクラス情報を記載しています。
<?php // 親クラス(車) class Car { protected $type; //車のタイプ(タクシー or トラック) protected $mileage; //走行距離(入力値(m) 表示値(km)) // コンストラクタ(走行距離=0) public function __construct($type,$mileage) { $this->mileage = 0; } // 走る(加算) public function drive($distance){ try { if(!is_numeric($distance)){ throw new Exception("数値以外が入力されました。"); } $this->mileage = $this->mileage + $distance; echo($this->mileage/1000 . "km" . " 走行中" . " > "); } catch (Exception $th) { echo $th->getMessage(); } } // 止まる public function stop(){ echo("停車" . " > "); } // 車両情報表示 public function getInfo(){ return $prof = [ "車種" => $this->type, "走行距離" => $this->mileage ]; } } // トラック class Truck extends Car { private $maxcapa; private $bagname; // コンストラクタ(車種=トラック、荷物=空、最大積載量=引数) public function __construct($box) { try { if(!is_int($box)){ throw new Exception("最大積載量が数字以外で入力されています。"); } $this->type = "トラック"; $this->bagname = "空"; $this->maxcapa = $box; } catch (Exception $th) { echo $th->getMessage(); } } // 荷物を積む(引数1=>荷物名、最大積載量を超えた場合は空に戻す。) public function load($item_name , $item_weight) { try { $this->bagname = $item_name; if($this->maxcapa >= $item_weight){ echo $this->bagname . "を積んだ > "; }else{ $this->bagname = "空"; throw new Exception("積載量を超過する荷物の為、積載不可 > "); } } catch (Exception $th) { echo $th->getMessage(); } } // 荷物を下ろす(荷物名を表示、荷物名=空、車両情報を表示) public function unload() { $this->stop(); if($this->bagname == "空"){ echo "下ろす荷物がない<br>"; }else{ echo $this->bagname . "を下ろした<br>"; } $this->bagname = "空"; $ary = $this->getInfo(); foreach($ary as $key => $value){ echo $key . "[" . $value . "] <br>"; } } } function runTruck($maxcapa,$capa,$item,$mil){ $r_truck = new Truck($maxcapa); $r_truck->load($item,$capa); $r_truck->drive($mil); $r_truck->unload(); } ?>補足情報
VScode使用
大変長々と申し訳ございません。
一人ではどうしても解決できず、こちらに投稿させていただきました。
初心者のため、コードの見づらさあると思いますが、どうかご教授ください。