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

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

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

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

Q&A

解決済

2回答

1668閲覧

なんらかのエラーが出ている。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2021/05/20 02:43

編集2021/05/20 12:40

php

1<?php 2 3中略 4?>

logの中身が、
中略

とかです。

これ、各値はフォームで送信されたものを受け取り、初回はそれがないのでif issetでスルーされるんですが、
まずいきなり、なぜか$question = array(); //この変数は配列ですよという宣言の所でエラーが出ます、何が原因なんでしょう。

エラーは
Parse error: syntax error, unexpected ']', expecting ')' in 中略

で、これが、$questionの行にあたります、お願いします。

1つミスっぽいのに気づきました・・・
a[b[c]]っておかしいですね・・・a[b][c]ですよね・・・。

ややこしいんで、shuffleで上位配列をshuffleする方法に変えました、
エラーは消えましたが、shuffleのされ方がおかしいです、別の質問になりますが・・・
下位配列もshuffleされている。

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

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

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

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

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

y_waiwai

2021/05/20 02:46

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、いらぬ翻訳省略しないで、出たそのママをコピペで提示してください
退会済みユーザー

退会済みユーザー

2021/05/20 02:52

インデントはわざとですか?
退会済みユーザー

退会済みユーザー

2021/05/20 02:59

インデントは、みにくいかもしれませんが、慣れてないので 一律になしで書いています。
tanat

2021/05/20 03:11

> で、この43というのが上記の場所に当たります。 エラーメッセージの行数は「文法的には43行目でエラーを検知できた」くらいの意味合いで、それより前に問題があることが殆どなので可能な限り全てのソースを追記されることをお勧めします。(現状だと誰も問題を再現できないコードになっています)
退会済みユーザー

退会済みユーザー

2021/05/20 03:20

できる限りそうしていきたい、ていうか $question = array(); //この変数は配列ですよという宣言 っているんですかね、いるか。
退会済みユーザー

退会済みユーザー

2021/05/20 03:24

あなたが書いたものですよね? いるから書いたのでは?
退会済みユーザー

退会済みユーザー

2021/05/20 03:25

他のを参考にしました。
退会済みユーザー

退会済みユーザー

2021/05/20 03:28

すべてのソースを追記できないにしても、せめてこのファイルの先頭から書くぐらいはしてみてはいかがでしょうか。 参考にしたものがあるのであれば、そちらも書いたほうが良いかと。
退会済みユーザー

退会済みユーザー

2021/05/20 03:51 編集

完全ではないが、書いてみました。 もしかしてifは2個使う場合インデントいるとかですか・・・?
tanat

2021/05/20 04:56

追記されたソースでも状況再現出来ないので、一度ご自身の環境で同じエラーの出る状態のコードを作って記載して下さい
退会済みユーザー

退会済みユーザー

2021/05/20 07:14

> もしかしてifは2個使う場合インデントいるとかですか・・・? 意味が分かりませんが、まずphpの文法を理解してますか?
退会済みユーザー

退会済みユーザー

2021/05/20 07:30

してます。
退会済みユーザー

退会済みユーザー

2021/05/20 07:37 編集

文法を理解しているというのであれば、せめて構文エラーのないコードを貼ってもらえませんか。 追記 問題自体が「syntax error」でしたね、無理を言ってしまったようですみません。
退会済みユーザー

退会済みユーザー

2021/05/21 03:35

terapad使ったら、コード変えてもhtml部分の文字化けが無くならなくなりました・・・ メモ帳だと文字化けしません、この点使いにくい。
退会済みユーザー

退会済みユーザー

2021/05/21 04:06

どこから「terapad」がでてきたのでしょうか
guest

回答2

0

ベストアンサー

示されたphpコードが全てなら。

$d = $log3;の次の行の
}に対する{がないので、たぶん余計。


文法エラーを検出できる開発環境(IDE)やエディタを使ってね。
何もわからなければVisual Studio Codeが無難で優秀なので。


再現のために、まるっとソースを 339330.php に貼り付けた:

php

1<?php 2 3$file_name = "log339330.txt"; /*読込ファイルの指定*/ 4$log0 = file( $file_name ); /*ファイルを全て配列に入れる*/ 5 6for($i = 0 ; $i < count($log0); $i++){ 7$log1[$i] = explode(",",$log0[$i]); 8$log3[] = $i; 9} 10 11shuffle($log3); 12$d = $log3; 13} 14 15if (isset($_POST['time'])){ 16$e += $_POST['e']; 17$d = $_POST['d']; 18$d = $_POST['d']; 19$c1 = $_POST['c']; 20$a = $_POST['a']; 21$b = $_POST['b']; 22 23//結果の判定 24if($a == $b){ 25$d += $c1; 26$result = "正解!"; 27}else{ 28$result = "不正解・・・。"; 29} 30} 31 32$count++; 33 34$title = $log1[$d[$e]][0]; 35 36$question = array(); //この変数は配列ですよという宣言 37 38?>

log339330.txt の中身は質問文に合わせてこうした:

卵は英語で,egg,選択肢12,選択肢13,選択肢14,選択肢5,選択肢6,説明,10
犬は英語で,dog,選択肢22,選択肢23,選択肢24,選択肢5,選択肢6,説明,20
猫は英語で,cat,選択肢32,選択肢33,選択肢34,選択肢5,選択肢6,説明,30
机は英語で,desk,選択肢42,選択肢43,選択肢44,選択肢5,選択肢6,説明,10
日本は英語で,Japan,選択肢52,選択肢53,選択肢54,選択肢5,選択肢6,説明,20
英語は英語で,English,選択肢62,選択肢63,選択肢64,選択肢5,選択肢6,説明,30

これで再現するはずだな?

Parse error: syntax error, unexpected '}', expecting end of file in (ナイショ)\339330.php on line 13

先の回答で示したとおり、$d = $log3;の次に来る}が引っかかってるので削除する。
再度実行。

Notice: Undefined variable: count in (ナイショ)\339330.php on line 32

Notice: Undefined variable: e in (ナイショ)\339330.php on line 34

Notice: Undefined index: in (ナイショ)\339330.php on line 34

Notice: Undefined index: in (ナイショ)\339330.php on line 34

Notice: Trying to access array offset on value of type null in (ナイショ)\339330.php on line 34

まぁ、何をやりたいのかコードから全く伝わってこないくらい、いろいろオカシイので、
日本語でいいので、どういう表示にしたいのか、要求仕様を質問文中に丁寧にまとめてほしい。
コードからじゃわからん。

ドキュメントがなくてもそこそこ意味の伝わるコードの書き方を少し説明する。
変数名がずさんすぎるのはアウト。
なんのデータを保持しているのかが想像つかない、変数名の命名がアウト。
一文字変数名は基本的にアウト。forループのインデックス用に使うくらいにする。
(インデックス用だから$iで、二重のループのときはさらに$jを使ったりするなど。)
変数を初期化せずに使うの禁止。$count++;って初期化してない変数でインクリメントとかびっくりよ。
パット見で$log0$log1$log3が居て、役割や機能が変数名から想像つかない。
$eも初期化せず足し算するの?
isset($_POST['time'])が成り立たないと存在しない変数が発生するのもアウト。

投稿2021/05/20 03:11

編集2021/05/20 08:10
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2021/05/20 12:41 編集

なるほど
退会済みユーザー

退会済みユーザー

2021/05/20 05:45 編集

第三者にチェックしてもらいたいなら、抜粋でソースコードを貼るのはやめてほしい。 抜粋箇所以外が原因の時察知できないので。
退会済みユーザー

退会済みユーザー

2021/05/20 12:41 編集

エラーが、 つまりsyntax errorということで、エラーの本質はどこになるのでしょうか・・・。 初期化せずに変数にいきなりインクリしてもエラーにはなりませんよね? 定義を飛ばしている(iiset構文内とか)変数を使っているとかですか??
退会済みユーザー

退会済みユーザー

2021/05/20 13:45 編集

> 初期化せずに変数にいきなりインクリしてもエラーにはなりませんよね? Noticeはでます。 エラーの本質としては、マネするべき美しいコード、学ぶべきコーディングスタイルが身についていないってことになるかと。 優れた生産性の高いエディタを使えば、 自動的にインデントを調整してくれたり、 カッコの入力漏れを防いでくれたり、対応するかっこをわかりやすく表示してくれたりと、 思考の助けをしてくれます。 そういうのをなしに、意味のない変数名を付けて、雑に処理しようとしているのが間違いです。 練習していないのに打席に立ってホームランを打とうとしているような感じに見えます。 どうしても、この場の文字を通じての意思疎通も難しく煩わしく面倒くさくなるでしょうから、 身近にベテランの人を探してペアプログラミングするか、 もうちょっと体系立てて学習できる教材を探したらいいです。 もっと、他人の書いたコードを読みましょう。 ホームランバッターの打ち方をまねして素振りをしてイメージトレーニングする、みたいなのが必要です。
退会済みユーザー

退会済みユーザー

2021/05/20 13:54

なるほど。
guest

0

PHP

1//結果の判定 2if($a == $b){ 3$d += $c1; 4$result = "正解!"; 5}else{ 6$result = "不正解・・・。"; 7} 8} ←ここいらない可能性が高い。

すでに改善されている可能性がありますが、上記の回答で示されているエラーは{や)が不足していたり多い場合に表示されるエラーです。
かっこのはじめ、終わりにきちんと対応しているか確認してみてください。

投稿2021/05/20 12:05

odakyutetu

総合スコア85

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

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

退会済みユーザー

退会済みユーザー

2021/05/20 12:07

実はその}は必要ですね、この上にisset{があるので、それを閉じている。
odakyutetu

2021/05/20 12:10

大変失礼しました。
kaina

2021/05/20 12:29

インデントが無いと可読性や保守性が落ち、ミスが発生してしまういい例ですね。 まあ、この質問者には言っても無駄だからしょうがないけど。
退会済みユーザー

退会済みユーザー

2021/05/21 03:34

terapad使ったら、コード変えてもhtml部分の文字化けが無くならなくなりました・・・ メモ帳だと文字化けしません、この点使いにくい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問