『気づけばプロ並みPHP改訂版』を読みながらPHPと悪戦苦闘しているあなたへ。
ここではプログラミング初心者のわたしがこの本にそって進めていく中で現れたエラー表示とその原因をお伝えしています。
本に書いてある通りにしているはずなんだけどうまく動かない、なぜかエラーが出るという人は、ひょっとしたらわたしと同じようなところでミスをしているかもしれませんのでぜひ読んでみてください。
Chapter2,3,6に関する内容となっております。ここではたくさんのエラーが出ると思うので、その解決の糸口になれば幸いです。
PHP エラー表示 Chapter2「お店のスタッフは誰?」より
~『気づけばプロ並みPHP』より
Chapter1は準備編なのでChapter2「お店のスタッフは誰?」からです。
まず最初がこれ。
Parse error : syntax error,unexpected T_PRINT in
これは「2-3 スタッフ情報の入力チェック画面を作ろう」で出てきたエラー表示です。
(※本と違って「staffs_add_check.php」に変えてありますが他は同じです)
というのはほとんどの場合はプログラムの入力ミスです。
指摘されている53行あたりを探してみたらありました。
;(セミコロン)が抜けています。なんとも単純なミス。
実際は53行目ではなく52行目ですね。
Notice: Use of undefinded constant 〇〇- assumed ‘〇〇’
上記を修正したら続いてこんなエラー表示が。
これはif命令の中の変数の「$」が抜けていたことによるものでした。
ただいま障害により大変ご迷惑をおかけしております。
Chapter2で一番悩んだのはここ。エラー元の発見まで何時間もかかりました。
どこかというとスタッフ修正のところです。スタッフ修正についてはこのような手順になりますよね。
- スタッフ一覧画面で修正するスタッフを選択
- スタッフ修正画面で修正
- スタッフ修正チェック画面で修正箇所を確認
- スタッフ修正実行画面で修正完了
3の修正チェックまでは行くのですが、なぜか実行完了ができないのです。
具体的にはまずスタッフ一覧から修正するスタッフを選択しますよね。ピカチュウで失礼します。
すると修正画面に飛びます。
ここで名前を訂正し、パスワードをもう一度入力しなおしてからOKを押すと、次の修正チェック画面になるわけです。
ここで修正に間違えがなければOKを押します。すると本来は「修正しました」の画面になるはずなのですが・・・
なぜかどうやっても「ただいま障害により大変ご迷惑をおかけしております」が出てしまうのです。
言うまでもなく、この表示はエラートラップ命令「try~catch」によるもの。
データベースサーバーが正常に動いていない場合、本来のプログラムに替わって別の(catch以降の)プログラムが表示されるというものですね。
どこかコードを間違えているのかと目を皿のようにしてチェックし、最終的にはスタッフ追加画面からすべての画面のコードを見直したのですが、どこも間違えているところはなし(のように見えました)。
でも仮説としては、
- 修正→確認まではできるわけだから最後の実行画面「staff_edit_done.php」に何か問題がある
- データベースへの接続があやしい。接続がうまくいっていないのでは?
と思ってデータベースに関するコードを何度も見直したり、コピペしたり、新しく書き換えたりしました。でもダメ。
phpadminでデータベースの構成までも調べてみましたが特におかしいところはありません。
調べること2日間。
やっと分かりました。それがなんとも情けないことに・・・
やっぱりコードの間違いでした・・・
データベースのsql文のコードに余計なコンマを入れてしまっていたのです。これを取ってみたら、
・・・なんともあっさり成功。
いったいこの2日間は何だったのか。
でもとりあえず分かったことがあります。
もし万が一、コードをいくら見直しても「ただいま障害により大変ご迷惑をおかけしております」が表示されて困っている人がいたら、今一度sql文を確認してみてください。
PHP エラー表示 Chapter3「お店に商品を並べよう!」より
~『気づけばプロ並みPHP』より
ここからChapter3「お店に商品を並べよう!」です。
Parse error : syntax error , unexpected T BOOLEAN OR
これは商品追加チェック画面「pro_add_check.php」で出たエラー表示。
これが該当の68行目。
余計な「 ) 」が入っていたのが原因。
Parse error : syntax error, unexpected T_CATCH in
続いては商品参照画面pro_disp.phpです。
指摘されているのは43行目。
catch(Exception $e)、特に間違いはありません。
が、その上の42行目に原因がありました。
try に対する「 }」の閉じ忘れです。
PHP 画像が表示されない!
ここからChapter3-3の「ワクワク♩商品の画像を追加しましょう!」です。
ここも大変苦労しました。なかなか画像が出ないのです。
出たと思っても次の作業をしたらまた出なくなってしまうということが続き四苦八苦しました。
Notice : undefinded index : gazou
まず最初に商品の追加画面から改造しますよね、画像が出るように。これがその手順です。
商品の追加画面
- pro_add.phpで画像を選ぶ機能を追加
- pro_add_check.phpで画像をアップロードする機能を追加
- pro_add_done.phpでデータベースに格納
上の作業をしたあと実際に動かしてみました。
ちゃんと選択画面は出るのできゅうりを選択。
商品追加画面(pro_add.php)でも選択されています。
なのに確認画面(pro_add_check.php)に行くと画像が出ないのです。
指摘されているpro_add_check.phpの13行目を見てもおかしいところはありません。
格闘することのべ2日。
原因はまさかのダブルクォーテーション抜け。
完全な凡ミス。
・・・とはいうものの、これはpro_add_check.phpではなく、その前のpro_add.phpなんです。
指摘されているファイルと違う。
で、ここをちゃんと書きかえてみたら・・・
他の画像で試してみても・・・
OK!出ました。
これで気づいたことがあります。
method とか action とか type とか name とかのあとの” ”でくくる部分。
わたしはコードを書くのに本の中で勧められているTeraPadを使っているのですが、TeraPadの場合、この” “でくくる部分は青地になります。
でも今回は ” を書き洩らしていいたので黒文字のままでした。
おそらく他のメモ帳でも同じような機能はあるのではないかと思いますので、コードを書きながらそんなところにも注意をしておくとミスを未然に防ぐことができるかもしれません。
画像が出ない その他のエラー
商品追加画面の次は以下の順で作業をしていきます。
2.商品の参照画面
pro_disp.php
3.商品の修正画面
pro_edit_php
pro_edit_check.php
pro_edit_done.php
この画像のところは難関でした。なかなかうまくいかず、数々のエラーがありました。そのいくつかを紹介します。
■これは単にコードの書き間違い。gazou が抜けていました。
■これは1行まるごと抜けていたものです。
■name が nama になっていました。
これと同じような感じで最初の画像追加画面で書くこのコード。
ここも間違いが多いようです。お気をつけください。
■アルファベットの打ち損じ
■またしても。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日目に分かった原因がこれ。
・・・またしても同じようなミス。ダブルクォーテーション抜け。
たしかにここを修正したら、
ちゃんと表示されました。
やれやれ、ダブルクォーテーション抜けって、同じミスを何回やらかしてんだって話ですよね、これじゃ?
でも、でもですよ?わたしにも言いたいことがあってですね、
というのも、
これ、削除画面 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
商品確認 pro_add_check.php
商品追加実行 pro_add_done.php
商品修正 pro_edit.php
修正確認 pro_edit_check.php
修正実行 pro_edit_done.php
商品参照 pro_disp.php
商品削除 pro_delete.php
削除実行 pro_delete.php
商品一覧 pro_list.php
phpMyAdmin
追加や修正、削除がデータベースにもその都度反映されているか、チェックしてみてください。
PHP エラー表示 Chapter6 憧れのショッピングカートを作ろう!
エラー表示 Parse error : syntax error, unexpected ‘ } ‘
■エラー表示
□エラーの原因
エラー表示 syntax error, unexpected T_STRING
■エラー表示
◆該当の行
51行目はデータベースから取り出した[’name’]を変数にしています。何度見ても間違えてはいません。
□エラーの原因
原因はそもそもの[‘name’]をデータベースから取り出すところにありました。
sql文のさいごの「’」が抜けており、きちんとデータが取りだせていなかったのでしょう。そのため51行目が指摘されたものと思われます。
エラー表示 Parse error : syntax error, unexpected ‘ . ‘
■エラー表示
□エラーの原因
さいごに
プログラミング初心者の人にとっては『気づけばプロ並みPHP改訂版』はなかなかの難関です。
ひとつ前の『いきなりはじめるPHP』とは比べものにならないくらい難しく感じます。実を言うとわたしも一度挫折しそうになりました。
しばらく冷却期間を置いて再びチャレンジを始め、なんとか半分くらいまでたどり着き、これから後半「ショッピングカート作り」へと入っていきます。なんとかやりきりたい。
同じようにこの本で頑張っている方の少しでも役に立てていたらうれしいです。
コメント