PHPで電卓のようなモノを作成しております。
(現段階は足し算を実装中)
以下のソースコードは、ボタンをクリックするごとに、値をPOSTして、自身のファイルの中で使いまわすというような意図で作成しました。
そのとき、POSTされた値は、$_SESSIONを使って保存しようとしています。
問題点としては、足し算が上手く行えません。
そこで、足し算の値($sum)がそれぞれの段階がどう変わるのかを見るために、フォーム内の$sumはtypeをnumberにしています。
①何か値をクリック → $resultにうまく表示される。
②"+"をクリック → $resultがリセットされ、$sumに$resultの値が表示される。
ここまでは、思った通りです。
③2つ目の値として、なにか数字をクリック → $resultにうまく表示されるが、$sumの欄が空白(たぶんNULL)になってしまう
↑$sumの値はそのままでいてほしい。
これは、どこでどういう問題が発生しているのでしょうか?
ちなみに、"="("$equal")はまだきちんと実装していないので、気にしないでください。
PHP
1<DOCTYPE html> 2 <!--Web上での電卓の作成--> 3<html lang="ja"> 4 <head> 5 <meta charset="utf-8"> 6 <title>Web電卓</title> 7 <link rel="stylesheet" type="text/css" href="/style.css"> 8 </head> 9 10 <body> 11 <div> 12 <?php 13 //セッションの開始 14 session_start(); 15 require_once("util.php"); 16 //このページに来たとき、セッション変数の値を取り出す。 17 if(empty($_SESSION['sum'])){ 18 $sum = ""; 19 } 20 else if($_SESSION['sum']){ 21 $sum = (int)$_SESSION['sum']; 22 } 23 else{ 24 $error[] ="セッションエラーです。"; 25 } 26 ?> 27 28 <?php 29 //文字エンコード検証======================================================= 30 if(!cken($_POST)){ 31 $encoding = mb_check_encoding(); 32 $err = "Encoding Error! The expected encoding is". $encoding; 33 //エラーメッセージを表示して処理を終了させる 34 exit($err); 35 } 36 //HTMLエスケープ(XSS対策) 37 $_POST = es($_POST); 38 //======================================================================== 39 ?> 40 41 <?php 42 //POSTされた値を取り出す 43 $error = []; 44 45 if(isset($_POST["result"])){ 46 $result = (int)$_POST["result"]; 47 } 48 else{ 49 $error = '数値を入力してください'; 50 } 51 ?> 52 53 <?php 54 if(isset($_POST["number"])){ 55 $number = $_POST["number"]; 56 $result = ($result * 10) + $number; 57 $error = ''; 58 $isError = FALSE; 59 } 60 else if(isset($_POST["plus"])){ 61 $plus = $_POST["plus"]; 62 $sum = (int)$sum + (int)$result; 63 $result = 0; 64 $error = ''; 65 $isError = FALSE; 66 } 67 else if(isset($_POST["equal"])){ 68 $equal = $_POST["equal"]; 69 if($isAdd){ //足し算フラグがたっているとき 70 $result = $sum + $result; 71 } 72 $error = ''; 73 $isError = FALSE; 74 } 75 76 else{ 77 //POSTされた値がないとき 78 $error = '数値を入力してください'; 79 $isError = TRUE; 80 } 81 ?> 82 </div> 83 84 85 <!--入力フォームの作成--> 86 <div class="Box"> 87 88 <!--現在開いているページにPOSTする--> 89 <form method="POST" action="<?php echo es($_SERVER['PHP_SELF'])?>"> 90 <ul class = "form"> 91 92 <?php if($isError): ?> 93 <!--エラーフラグが立っていればエラー出力--> 94 <input class="result" type="text" name="result" value="<?php echo $error ?>"> 95 <?php else: ?> 96 <!--立ってなければ$result表示--> 97 <input class="result" type="number" name="result" value="<?php echo $result ?>"> 98 <input class="result" type="number" name="sum" value="<?php echo $sum ?>"> 99 <?php endif ?> 100 101 102 <ul> 103 <li><input type ="submit" name="number" value ="7"></li> 104 <li><input type ="submit" name="number" value ="8"></li> 105 <li><input type ="submit" name="number" value ="9"></li> 106 </ul> 107 <ul> 108 <li><input type ="submit" name="number" value ="4"></li> 109 <li><input type ="submit" name="number" value ="5"></li> 110 <li><input type ="submit" name="number" value ="6"></li> 111 </ul> 112 <ul> 113 <li><input type ="submit" name="number" value ="1"></li> 114 <li><input type ="submit" name="number" value ="2"></li> 115 <li><input type ="submit" name="number" value ="3"></li> 116 <li><input type ="submit" name="plus" value = "+"></li> 117 </ul> 118 <div class="zero"><input type ="submit" name="number" value ="0"></div> 119 <li><input type ="submit" name="equal" value = "="></li> 120 121 </ul> 122 </form> 123 </div> 124 125 126 </body> 127 128 </html> 129

回答1件
あなたの回答
tips
プレビュー