質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

2226閲覧

PHPで電卓の作成をしているが、足し算が実装できない

Yuu412

総合スコア37

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/01/26 10:48

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Sessionに何も保存してないからだと思います。sessionが左辺に出てきてない。

plusのときに正しく動いて見えているのはたんにplusをポストしたときのifで$sumに代入しているのでその場限りで有効ですが、それを保存していないので次にポストしたとき$sumは""になります。

投稿2020/01/26 11:08

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問