『気づけばプロ並みPHP改訂版』が難しい?挫折しないためのよくあるエラー表示

PHP

 

『気づけばプロ並みPHP改訂版』を読みながらPHPと悪戦苦闘しているあなたへ。

 

ここではプログラミング初心者のわたしがこの本にそって進めていく中で現れたエラー表示とその原因をお伝えしています。

 

本に書いてある通りにしているはずなんだけどうまく動かない、なぜかエラーが出るという人は、ひょっとしたらわたしと同じようなところでミスをしているかもしれませんのでぜひ読んでみてください。

 

Chapter2,3,6に関する内容となっております。ここではたくさんのエラーが出ると思うので、その解決の糸口になれば幸いです。

 

 

スポンサーリンク




PHP エラー表示 Chapter2「お店のスタッフは誰?」より


~『気づけばプロ並みPHP』より

 

Chapter1は準備編なのでChapter2「お店のスタッフは誰?」からです。

 

まず最初がこれ。

 

Parse error : syntax error,unexpected T_PRINT in

 

これは「2-3 スタッフ情報の入力チェック画面を作ろう」で出てきたエラー表示です。

 


(※本と違って「staffs_add_check.php」に変えてありますが他は同じです)

 

Parse error:syntax error,

 

というのはほとんどの場合はプログラムの入力ミスです。

 

指摘されている53行あたりを探してみたらありました。

 

 

;(セミコロン)が抜けています。なんとも単純なミス。

 

実際は53行目ではなく52行目ですね。

 

 

Notice: Use of undefinded constant 〇〇- assumed ‘〇〇’

 

上記を修正したら続いてこんなエラー表示が。

 

 

Notice: Used of undefined constant 〇〇-assumed’ 〇〇 ‘

 

これはif命令の中の変数の「$」が抜けていたことによるものでした。

 

 

ただいま障害により大変ご迷惑をおかけしております。

 

Chapter2で一番悩んだのはここ。エラー元の発見まで何時間もかかりました。

 

どこかというとスタッフ修正のところです。スタッフ修正についてはこのような手順になりますよね。

 

  1. スタッフ一覧画面で修正するスタッフを選択
  2. スタッフ修正画面で修正
  3. スタッフ修正チェック画面で修正箇所を確認
  4. スタッフ修正実行画面で修正完了

 

3の修正チェックまでは行くのですが、なぜか実行完了ができないのです。

 

具体的にはまずスタッフ一覧から修正するスタッフを選択しますよね。ピカチュウで失礼します。

 

すると修正画面に飛びます。

 

ここで名前を訂正し、パスワードをもう一度入力しなおしてからOKを押すと、次の修正チェック画面になるわけです。

 

ここで修正に間違えがなければOKを押します。すると本来は「修正しました」の画面になるはずなのですが・・・

 

 

なぜかどうやっても「ただいま障害により大変ご迷惑をおかけしております」が出てしまうのです。

 

言うまでもなく、この表示はエラートラップ命令「try~catch」によるもの。

 

データベースサーバーが正常に動いていない場合、本来のプログラムに替わって別の(catch以降の)プログラムが表示されるというものですね。

 

どこかコードを間違えているのかと目を皿のようにしてチェックし、最終的にはスタッフ追加画面からすべての画面のコードを見直したのですが、どこも間違えているところはなし(のように見えました)。

 

でも仮説としては、

  • 修正→確認まではできるわけだから最後の実行画面「staff_edit_done.php」に何か問題がある
  • データベースへの接続があやしい。接続がうまくいっていないのでは?

 

と思ってデータベースに関するコードを何度も見直したり、コピペしたり、新しく書き換えたりしました。でもダメ。

 

エラー表示が出ているわけじゃないので何かコード以外に原因が?

 

phpadminでデータベースの構成までも調べてみましたが特におかしいところはありません。

 

調べること2日間。

 

やっと分かりました。それがなんとも情けないことに・・・

 

 

やっぱりコードの間違いでした・・・

 

データベースのsql文のコードに余計なコンマを入れてしまっていたのです。これを取ってみたら、

 

 

・・・なんともあっさり成功。

 

いったいこの2日間は何だったのか。

 

でもとりあえず分かったことがあります。

 

sql文のコードを書きまちがえた場合はエラー表示にならず、エラートラップ命令のお詫びが表示される

 

もし万が一、コードをいくら見直しても「ただいま障害により大変ご迷惑をおかけしております」が表示されて困っている人がいたら、今一度sql文を確認してみてください。

 

 

PHP エラー表示 Chapter3「お店に商品を並べよう!」より


~『気づけばプロ並みPHP』より

 

ここからChapter3「お店に商品を並べよう!」です。

 

Parse error : syntax error , unexpected T BOOLEAN OR

 

これは商品追加チェック画面「pro_add_check.php」で出たエラー表示。

PHP 疑問

 

parse error : syntax error, unexpected T BOOLEAN OR

 

これが該当の68行目。

PHP 分からない

 

余計な「 ) 」が入っていたのが原因。

php T_BOOLEAN

 

 

Parse error : syntax error, unexpected T_CATCH in

 

続いては商品参照画面pro_disp.phpです。

 

UNEXPECTED T-CATCH

 

指摘されているのは43行目。

 

catch(Exception $e)、特に間違いはありません。

 

が、その上の42行目に原因がありました。

php エラー

 

try に対する「 }」の閉じ忘れです。

 

 

PHP 画像が表示されない!

 

ここからChapter3-3の「ワクワク♩商品の画像を追加しましょう!」です。

 

ここも大変苦労しました。なかなか画像が出ないのです。

 

出たと思っても次の作業をしたらまた出なくなってしまうということが続き四苦八苦しました。

 

Notice : undefinded index : gazou

 

まず最初に商品の追加画面から改造しますよね、画像が出るように。これがその手順です。

 

商品の追加画面

  1. pro_add.phpで画像を選ぶ機能を追加
  2. pro_add_check.phpで画像をアップロードする機能を追加
  3. pro_add_done.phpでデータベースに格納

 

上の作業をしたあと実際に動かしてみました。

 

ちゃんと選択画面は出るのできゅうりを選択。

 

商品追加画面(pro_add.php)でも選択されています。

 

なのに確認画面(pro_add_check.php)に行くと画像が出ないのです。

PHP 画像 出ない

 

指摘されているpro_add_check.phpの13行目を見てもおかしいところはありません。

pro_add_check.php

 

格闘することのべ2日。

 

原因はまさかのダブルクォーテーション抜け。

ダブルクォーテーション

 

完全な凡ミス。

 

・・・とはいうものの、これはpro_add_check.phpではなく、その前のpro_add.phpなんです。

 

指摘されているファイルと違う。

 

で、ここをちゃんと書きかえてみたら・・・

php 画像 出た

 

他の画像で試してみても・・・

 

OK!出ました。

 

これで気づいたことがあります。

 

method とか action とか type とか name とかのあとの”   ”でくくる部分。

 

わたしはコードを書くのに本の中で勧められているTeraPadを使っているのですが、TeraPadの場合、この”         “でくくる部分は青地になります。

php エラー 原因

 

でも今回は ” を書き洩らしていいたので黒文字のままでした。

php エラー 原因

 

おそらく他のメモ帳でも同じような機能はあるのではないかと思いますので、コードを書きながらそんなところにも注意をしておくとミスを未然に防ぐことができるかもしれません。

 

 

画像が出ない その他のエラー

 

商品追加画面の次は以下の順で作業をしていきます。

 

2.商品の参照画面

pro_disp.php

 

3.商品の修正画面

pro_edit_php

pro_edit_check.php

pro_edit_done.php

 

この画像のところは難関でした。なかなかうまくいかず、数々のエラーがありました。そのいくつかを紹介します。

 

■これは単にコードの書き間違い。gazou が抜けていました。

 

■これは1行まるごと抜けていたものです。

 

■name が nama になっていました。

 

これと同じような感じで最初の画像追加画面で書くこのコード。

 

multipart/form-data

 

ここも間違いが多いようです。お気をつけください。

 

 

parse error : syntax error, unexpected T BOOLEAN OR

 

■アルファベットの打ち損じ

 

■またしても。try {  の閉じ忘れ。

 

 

 

Warning : move_uploaded_file(.gazou/〇〇.jpg)[function.move-uploaded-file]: failed to open streamer : No such file or directory in

 

これも修正確認画面pro_edit_check.phpでのエラー表示。

 

 

そんなファイルはないからアップロードできねえ、と書いてあるように読めます。51行目。

 

原因はここ。

 

プログラムの区切りの「/」が抜けていました。

 

 

Notice : undefinded index : gazou_name in

 

最後は商品の削除画面ですね。

 

4.商品の削除画面

pro_delete.php

pro_delete.done.php

 

削除する商品を選んで、

 

削除画面pro_delete.phpまでは問題なし。

 

が、ここでOKを押すと・・・

 

なぜかNoticeが出る。

 

削除完了画面 pro_delete_done.php の15行目を見ろ、と。でも・・・

 

どこも間違えてない。

 

前例があるから10回くらい見たけど、でもやっぱり間違えてない。

 

そして3日目に分かった原因がこれ。

 

・・・またしても同じようなミス。ダブルクォーテーション抜け。

 

たしかにここを修正したら、

 

ちゃんと表示されました。

php 画像削除

 

 

やれやれ、ダブルクォーテーション抜けって、同じミスを何回やらかしてんだって話ですよね、これじゃ?

 

でも、でもですよ?わたしにも言いたいことがあってですね、

 

というのも、

 

これ、削除画面 pro_delete.php なんです。指摘されている削除実行画面 pro_delete_done.php じゃないんです。修正すべき画面が違うんです。

 

これ↓を真に受けて削除実行画面 pro_delete_done.php を探してもずっと見つからないんです。

 

これってさっきもありましたよね?

 

おかげで考え方のひとつのヒントを得ました。

 

指摘されているエラー箇所にまったく問題がない場合、それがデータの送受信に関するものならば、一つ前の画面のコードをチェックすべし。

 

 

今回のエラーに関しても、指摘されているのはここなんですが、ここには特にミスがない。

 

でもこのコードでは、[‘gazou_name’] というデータを受け取っているわけです。

 

であれば、その受け取っているデータに何らかの問題があると考え、データを送っている前の画面の該当箇所をチェックするのです。それがまさしくここ。

 

pro_delete_done.phpに飛ぶときに、$prp_gazou_name のデータを送っています。その名前を「”」でくくっていなかった。

 

本来ならこのpro_delete.php の64行目と指摘してくれれば分かりやすいですが、そうはならず、受取先の pro_delete_done.php の15行目と指摘されてしまうわけです。

 

なので、送受信に関するエラーのときは、一つ前の画面も疑ってみてください。

 

 

Chapter3 終了時の商品追加に関する各画面


~『気づけばプロ並みPHP』より

 

ここでChapter3終了時点でのそれぞれの画面の完成形を表示しておきます。

 

 

まず商品追加 pro_add.php

php 商品追加

 

商品確認 pro_add_check.php

pro_add_check.php

 

商品追加実行 pro_add_done.php

pro_add_done.php

 

商品修正 pro_edit.php

pro_edit.php

 

修正確認 pro_edit_check.php

pro_edit_check.php

 

修正実行 pro_edit_done.php

pro_edit_done.php

 

商品参照 pro_disp.php

pro_disp.php

 

商品削除 pro_delete.php

pro_delete.php

 

削除実行 pro_delete.php

pro_delete_done.php

 

商品一覧 pro_list.php

pro_disp.php

 

phpMyAdmin

php/admin

 

追加や修正、削除がデータベースにもその都度反映されているか、チェックしてみてください。

 

 

PHP エラー表示 Chapter6 憧れのショッピングカートを作ろう!

 

エラー表示 Parse error : syntax error, unexpected ‘ } ‘

 

■エラー表示

 

□エラーの原因

 

エラー表示 syntax error, unexpected T_STRING

 

■エラー表示

 

◆該当の行

51行目はデータベースから取り出した[’name’]を変数にしています。何度見ても間違えてはいません。

 

□エラーの原因

原因はそもそもの[‘name’]をデータベースから取り出すところにありました。

 

sql文のさいごの「’」が抜けており、きちんとデータが取りだせていなかったのでしょう。そのため51行目が指摘されたものと思われます。

 

 

エラー表示 Parse error :  syntax error, unexpected ‘ . ‘

 

■エラー表示

 

□エラーの原因

 

 

さいごに

 

プログラミング初心者の人にとっては『気づけばプロ並みPHP改訂版』はなかなかの難関です。

 

ひとつ前の『いきなりはじめるPHP』とは比べものにならないくらい難しく感じます。実を言うとわたしも一度挫折しそうになりました。

 

しばらく冷却期間を置いて再びチャレンジを始め、なんとか半分くらいまでたどり着き、これから後半「ショッピングカート作り」へと入っていきます。なんとかやりきりたい。

 

同じようにこの本で頑張っている方の少しでも役に立てていたらうれしいです。

 

 

 

コメント