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

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

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

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

Q&A

解決済

5回答

16175閲覧

PHPでParse error(T_ELSE)が出てしまいました

sepi-0401

総合スコア10

PHP

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

0グッド

0クリップ

投稿2016/09/27 07:18

編集2016/09/27 07:45

###前提・実現したいこと
PHPで簡単な電卓(四則計算のみ)を作っています。
ifを使って場合分けをしているときに以下のエラーメッセージが発生しました。

###発生している問題・エラーメッセージ

Parse error: syntax error, unexpected 'else' (T_ELSE) in (ファイル名) on line 54

###該当のソースコード

php

1<?php 2 3if(isset($_POST['left'])){ 4 echo htmlspecialchars($_POST['left'], ENT_QUOTES, 'UTF-8'); 5 echo '<br>'; 6 7 if(ctype_alnum($_POST['left'])){ 8 $left = $_POST['left']; 9 10 if(isset($_POST['right'])){ 11 echo htmlspecialchars($_POST['right'], ENT_QUOTES, 'UTF-8'); 12 echo '<br>'; 13 14 if(ctype_alnum($_POST['right'])){ 15 $right = $_POST['right']; 16 17 if(isset($_POST['symbol'])){ 18 $symbol = $_POST['symbol']; 19 20 switch($symbol){ 21 case "+": 22 $answer=$_POST['left']+$_POST['right']; 23 break; 24 25 case "-": 26 $answer=$_POST['left']-$_POST['right']; 27 break; 28 29 case "×": 30 $answer=$_POST['left']*$_POST['right']; 31 break; 32 33 case "÷": 34 35 if($_POST['right']==0 and $_POST['symbol']=='÷'){ 36 $answer='error'; 37 echo '<p>エラー</p>'; 38 echo '0以外の数字を入れてください'; 39 echo "<br>"; 40 41 }else{ 42 $answer=$_POST['left']/$_POST['right']; 43 } 44 break; 45 default: 46 47 } 48 49 }else{ 50 $answer='error'; 51 echo '計算記号を選択してください'; 52 echo '<br>'; 53 54 }else{ 55 $answer='error'; 56 echo '右に数字を入力してください'; 57 echo '<br>'; 58 59 }else{ 60 $answer='error'; 61 echo '右に値を入力してください'; 62 echo '<br>'; 63 64 }else{ 65 $answer='error'; 66 echo '左に数字を入力してください'; 67 echo '<br>'; 68 69}else{ 70 $answer='error'; 71 echo '左に値を入力してください'; 72 echo '<br>'; 73} 74 75 //計算結果を表示 76 echo ($_POST['left'].' '.$_POST['symbol'].' '.$_POST['right'].' '.'='.' '.$answer); 77 78 ?>

###試したこと
初めはifのまとまりを入れ子構造にせずまとまりごとに組み立てて、最後にコピペを繰り返し以上の形になりました。おそらく何かを消し忘れているとかその類のミスなのだと思いますが、どこが間違っているのかわかりません。入れ子構造にする前は一応動いたは動いたので、おそらく必要な最低限の機能は作れていると思います。
54行目を変更しようと思いましたがこれは14行目のifのelseになるので、消せませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
電卓実装が初めてで、このエラー以外にも間違っているところあるかと思います。
もし気になる改善点などあれば教えていただけるとありがたいです。

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

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

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

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

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

guest

回答5

0

ifを閉じずに上位のifにelseをつけようとしています

投稿2016/09/27 07:22

yambejp

総合スコア114779

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

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

sepi-0401

2016/09/27 07:41

回答ありがとうございます。 該当箇所にかっこをつけたら動きました!!ありがとうございます!!
guest

0

「計算記号を選択してください」のところ以降の else が軒並み閉じ忘れてますね。

php

1 } 2 }else{ 3 $answer='error'; 4 echo '計算記号を選択してください'; 5 echo '<br>'; 6 7 }else{ 8 $answer='error'; 9 echo '右に数字を入力してください'; 10 echo '<br>'; 11 12 }else{ 13 $answer='error'; 14 echo '右に値を入力してください'; 15 echo '<br>'; 16 17 }else{ 18 $answer='error'; 19 echo '左に数字を入力してください'; 20 echo '<br>'; 21 22}else{

このような問題を回避するために、サジェストのあるエディタや IDE を使用したり、深いネスト構造にならないように実装するとよいかと思います。

投稿2016/09/27 07:29

bezeklik

総合スコア580

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

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

sepi-0401

2016/09/27 07:37

回答ありがとうございます。 該当箇所にかっこをつけたら動きました!!ありがとうございます!! サジェストしてくれるエディタなるものもあるのですね…習っている先の勧めで今はsakura editorを使っていますが、使いやすいエディタ探してみます!
bezeklik

2016/09/27 07:48

NetBeans Eclipse Visual Studio Code Atom (要プラグイン) など、構文エラーをリアルタイムで表示してくれる IDE があります。 チェック機能があると勉強にもなるので、是非色々と試してみてください。
guest

0

後半のelseの群れのところで、それぞれ閉じ括弧(})がないですね。

PHP

1 }else{ 2 $answer='error'; 3 echo '計算記号を選択してください'; 4 echo '<br>'; 5 } // 追加 6 }else{ 7 $answer='error'; 8 echo '右に数字を入力してください'; 9 echo '<br>'; 10 } // 追加 11 }else{ 12 $answer='error'; 13 echo '右に値を入力してください'; 14 echo '<br>'; 15 } // 追加 16 }else{ 17 $answer='error'; 18 echo '左に数字を入力してください'; 19 echo '<br>';

余談ですが、このコードはネストが深すぎていただけないですね…。
ネストを深くしないようなコードを書くように意識すれば、このようなミスも減ると思いますよ。

投稿2016/09/27 07:26

ttyp03

総合スコア16998

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

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

sepi-0401

2016/09/27 07:41

回答ありがとうございます。 該当箇所にかっこをつけたら動きました!!ありがとうございます!! ifの中でandを使えばもう少しコンパクトなネストを組み立てられそうだとは考えたのですが、なぜかうまく反応してもらえませんでした。(htmlspecialcharsの関数を入れる際に詰まりました) 一度横着せず初心に帰ってずらずらと書き起こしてみるとこうなってしまいました…もう一度フローチャートから見直してみます。アドバイスありがとうございます
guest

0

ベストアンサー

図で示すとおり「}」が足りないからですね。
足りない箇所

投稿2016/09/27 07:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sepi-0401

2016/09/27 07:30

回答ありがとうございます。 該当箇所にかっこをつけたら動きました!!ありがとうございます!!
guest

0

Parse error: syntax error, unexpected 'else' (T_ELSE) in (ファイル名) on line 54

「on line 54」とあるので、54行目の辺りに注目してください。
syntax errorを確認する際によく陥りがちなこととして、エラーメッセージに書かれてある行に問題があるとは限らないという点です。
例えば以下のコードも、同じように「on line 54」と表示されます。

(53行目) $x = 2 //セミコロンを忘れている (54行目) echo $x; //前の行がセミコロンで終わっていないのにechoを記述したので、syntax error

後は、if文の構造を思い出してください。

if($flag){ ~~~ }else{ ~~~ }

投稿2016/09/27 07:30

KaedeKazane

総合スコア408

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

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

sepi-0401

2016/09/27 07:34

回答ありがとうございました! elseの括弧を閉じ忘れていたので、そこを直したらうまくいきました!! エラーメッセージの周辺も今後は注意深く見たいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問