初歩的な質問になってしますかもしれませんがよろしくお願いいたします。
現在php(べた書き)で簡単な電卓アプリを作っているのですが計算結果がかえってこないため困っております。
switch文の中の計算処理が行われていないような感じです。
変数や定数の取得の仕方を勘違いしているような気もするので
その部分の文法なども教えて頂けたら幸いです。
・Calculator.php
<?php require_once('Calculate.php'); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <title>電卓</title> <link rel="stylesheet" type="text/css" href="../css/calculator.css"> </head> <body> <div> <?php if(isset($calcu) && $calcu->iserror())echo($calcu->getErrormessage()) ?> </div> <form name="clcuform" onSubmit="submitscript()"> <input type="text" name="value1" id="value1" class="CalcArea" value="<?php if(isset($calcu))echo($calcu->getVal1()) ?>" size="10" maxlengh="10" > <select name="operand" class="SymbolArea"> <option value="-"></option> <option <?php if(isset($calcu) && $calcu->getOperand() == Calculate::PLUS )echo("selected") ?> value="plus">+</option> <option <?php if(isset($calcu) && $calcu->getOperand() == Calculate::MINUS )echo("selected") ?> value="<?php echo( Calculate::MINUS )?>">-</option> <option <?php if(isset($calcu) && $calcu->getOperand() == Calculate::MULTIPLIED )echo("selected") ?> value="<?php echo( Calculate::MULTIPLIED )?>">×</option> <option <?php if(isset($calcu) && $calcu->getOperand() == Calculate::DIVIDED )echo("selected") ?> value="<?php echo( Calculate::DIVIDED )?>">÷</option> </select> <input type="text" name="value2" id="value2" class="CalcArea" value="<?php if(isset($calcu))echo($calcu->getVal2()) ?>" size="10" maxlengh="10" > = <input type="text" name="result" id="result" class="CalcArea" value="<?php if(isset($calcu))echo($calcu->getResult()) ?>" size="10" maxlengh="10" > <table border="0" class="ButtonArea"> <tr> <td><button class="Button" type="button" onclick="setNum(7)" value="7">7</button></td> <td><button class="Button" type="button" onclick="setNum(8)" value="8">8</button></td> <td><button class="Button" type="button" onclick="setNum(9)" value="9">9</button></td> </tr> <tr> <td><button class="Button" type="button" onclick="setNum(4)" value="4">4</button></td> <td><button class="Button" type="button" onclick="setNum(5)" value="5">5</button></td> <td><button class="Button" type="button" onclick="setNum(6)" value="6">6</button></td> </tr> <tr> <td><button class="Button" type="button" onclick="setNum(1)" value="1">1</button></td> <td><button class="Button" type="button" onclick="setNum(2)" value="2">2</button></td> <td><button class="Button" type="button" onclick="setNum(3)" value="3">3</button></td> </tr> <tr> <td></td> <td><button class="Button" type="button" onclick="setNum(0)" value="0">0</button></td> <td><input class="Button" type="submit" onclick="prepareaction()" value="="></td> </tr> </table> </form> </body> <script> function setNum(val){ //最大入力桁数 const maxlength = 2; //最大入力桁数まで入力可能にさせる if( $("#value1").val().length < maxlength && $('[name=operand] option:selected').val() == "-" ) { var dispval = $("#value1").val() + val; $("#value1").val(dispval); }else if( $("#value2").val().length < maxlength ){ var dispval = $("#value2").val() + val; $("#value2").val(dispval); } } </script> <script> function submitscript(){ if( $('[name=operand] option:selected').text() == "÷" && ($("#value2").val() == "0" || $("#value2").val() == "00") ) { alert("二つ目の数はゼロ以外の数にしてください。"); }else{ document.clcuform.action="Calcuexe.php"; document.clcuform.method="POST"; } } </script> </html>
・Calcuexe.php
<?php require_once('Calculate.php'); $val1=$_POST['value1']; $operand=$_POST['operand']; $val2=$_POST['value2']; //画面から受け取った値をインスタンス化 $calcu = new calculate($val1, $operand, $val2); //入力値のエラーチェック if( $calcu->valuevalidate() ){ require_once('Calculator.php'); exit; } //計算実行 $calcu->calcuexe(); require_once('Calculator.php'); ?>
・Calculate.php
<?php class Calculate { private $val1;//値1 private $val2;//値2 private $operand;//演算記号 private $result;//計算結果 //演算記号の定数 const PLUS = 'plus'; const MINUS = 'minus'; const MULTIPLIED = 'multiplied'; const DIVIDED = 'divided'; //入力可能な最大桁数 const MAXLENGTH = '2'; private $iserror = false; private $errormessage = ""; //コンストラクタ public function __construct($val1, $operand, $val2) { var_dump($this->operand);//NULL $this->val1 = $val1; $this->operand = $operand; $this->val2 = $val2; var_dump($this->operand);//string(4) "plus" } //値1 public function getVal1() { return $this->val1; } //演算記号 public function getOperand() { return $this->operand; } //値2 public function getVal2() { return $this->val2; } //計算結果 public function getResult() { return $this->result; } //エラー判定 public function iserror() { return $this->iserror; } //エラーメッセージ設定 public function getErrormessage() { return $this->errormessage; } //入力値バリデーション public function valuevalidate(){ //入力値が数字かどうかのチェック if( !is_numeric($this->val1) || !is_numeric($this->val2) ){ $this->errormessage = "半角数字で入力してください"; $this->iserror = true; return true; } //入力値が最大桁数以下かチェック if( strlen($this->val1) > self::MAXLENGTH || strlen($this->val2) > self::MAXLENGTH ){ $this->errormessage = "入力桁数は".self::MAXLENGTH."桁以下にしてください"; $this->iserror = true; return true; } //ゼロ除算チェック if( $this->operand = self::DIVIDED && $this->val2 == "0" || $this->val2 == "00" ){ $this->errormessage = "二つ目の数はゼロ以外の数にしてください。"; $this->iserror = true; return true; } return $this->iserror; } //実際に計算処理をする public function calcuexe(){ var_dump($this->operand);//bool(false) ←なぜstring(4) "plus"にならない? switch ($this->operand) { case self::PLUS: $this->result = $this->val1 + $this->val2; break; case self::MINUS: $this->result = $this->val1 - $this->val2; break; case self::MULTIPLIED: $this->result = $this->val1 * $this->val2; break; case self::DIVIDED: $this->result = $this->val1 / $this->val2; break; } return; } } ?>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/10 06:01
退会済みユーザー
2020/04/10 06:55 編集