- ベストアンサー
PHPスクリプトの最終部分でエラーが発生する問題の解決方法
- PHPスクリプトの最終部分でエラーが発生しています。特に、434行目でsyntax errorが発生しています。エラーメッセージは「Parse error: syntax error, unexpected end of file in CODE on line 434 Errors parsing CODE」と表示されます。
- このエラーは、コードの終了が予期せず、構文エラーが発生したことを示しています。原因としては、閉じカッコやセミコロンが正しく配置されていない可能性があります。
- 解決方法としては、434行目の周辺を注意深く確認し、必要な閉じカッコやセミコロンが正しく配置されているかを確認してください。また、コメントアウトの完了やファイルのクローズも忘れていないかも確認してください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まだソースが書かれていないといけない状態(閉じていない括弧があるなど)でソースファイルが終わってしまっています。 ∴ 「どこがいけないのか」を指摘するためには、ソースを全部読まないとわかりません 全部の括弧の対応を再確認してください。
その他の回答 (2)
- agunuz
- ベストアンサー率65% (288/438)
全ソースが書ききれていないので、どこが問題なのかはわかりません。括弧や引用符を追っていけば確実に「おかしな部分」はあります(なのでエラーになるわけで・・・)。 あと、他の方からも指摘があるとおりツッコミどころ満載ですが・・・ <html> <head> <?php header('Content-Type: text/html; charset=utf-8*'); ?> これは絶対にやめましょう。出力バッファリングが無効だと(phpのデフォルトは無効です)意味を為しません。ローカルテストだと(xamppなどは出力バッファリング on になっているので)たまたま動いているかもしれませんが・・・ そもそもutf-8*って文字セットなんかないです(汗 <?php header('Content-Type: text/html; charset=utf-8'); ?> <html> <head> RTFM. http://php.net/manual/ja/function.header.php あと、都道府県番号→都道府県名なんかでswicthを使うのはソースが無駄に長くなるだけです。配列を使ってください。もしそれが出来なくてもfunctionにして元の流れと別にしてください(ベストはfunctionにして、function内で配列を使って都道府県名を返す)。意味も無く長いソースを追うのは慣れていても疲れます。初心者が追いかけられる範疇ではないです。
お礼
再度ご返事いただきありがとうございました。
補足
ただ、サイト上にあった、PHPシンタックスチェッカーで、 前回記載したエラーが表示され、Dream WeaverCS3の バリデートチェックでは、エラーはありませんと表示される のです。確かにXAMPPを利用しております。 別の話題になりますが、XAMPPで利用されている、https:// と、普通のhttp:// の違いは何でしょうか。 お教えいただけますか?ネットで調べようとしていたところなのですが。 セキュリティに関して疎いもので、すみませんが、よろしくお願いします。
- kmee
- ベストアンサー率55% (1857/3366)
字数制限で、ここでは全プログラムは入らないでしょう。 途中で切れています。 括弧の他にも、文字列の引用符等の不対応も考えられます。 エディタは何を使っているのでしょうか? ある程度高機能なエディタには、文法に合せて色を付けたり、対応する括弧を太字で表示したり、対応する括弧へカーソルを移動させたり、といった機能があります。 これらを使えば、不対応の確認が楽になります。 コメントから判断すると > if($errname == 0 && $errage == 0 && $erryuubinup == 0 && $erryuubindown == 0 && $errjyuusyo == 0 && $erremail == 0 && $errkaisuu == 0 && $errkansou == 0){ と > 430.} // エラーフラグがオフの場合のカッコ が対応する括弧ではないでしょうか? 「対応する括弧へカーソルを移動」機能を使うと、本来なら、この2つの行を往復することになるはずです。 根本的な対策としては、プログラムの構造そのものを変えることです。 提示された部分から予想すると、function等を使わずに、上から下までダラダラと書いているのでは? このような書き方だと、どこで何が影響するか、よくわからなくなります。 「一つの機能は1画面以内に」という格言があります。 括弧の対応をいちいちスクロールしないと確認できないようでは、間違いがあってもわかりずらい、ということです。 「構造化プログラミング」「オブジェクト指向プログラミング」といったものを学ぶのがよいでしょう。 その他、ツッコミどころ満載のプログラムですが、本題では無いのでやめておきます。
お礼
ご回答ありがとうございます。長文返していただき、どうも 有難うございました。
補足
エディタは、秀丸ですが、 ローカル(イントラネット環境)として、XAMPPというものを 使っていて、(メールサーバー、FTPサーバー、MySQLサーバーなどが一体となっています)、アンケートフォーム自体のHTML は手書きだとめんどいので、Adobe DreamWeaverCS3 を使っています。構造化プログラムはC,C++で、 オブジェクト指向プログラムはVC++で一応学んだつもりなのですが、PHPもオブジェクト指向を取り入れたスクリプト言語だった ことを忘れていました。function()などを利用して、ブロックに分けてみようと思います。ご丁寧に指摘していただき、どうもありがとうございました。 ※ちなみに、根本的な対策の意味がおぼろげながらわかったようなわかってないような感じではありますが^^;
お礼
ありがとうございました。自分でも ()の対応は確認したのですが、一応掲載させていただきます。
補足
なぜか動かないので、全スクリプトを書かせていただきます。 <html> <head> <?php header('Content-Type: text/html; charset=utf-8*'); ?> <!--<meta http-equiv="Content-Type" content="text/html; charset=utf-8*">--> <meta http-equiv="refresh" content="60; URL=http://shinji-nemorin-7.la.coocan.jp/formmail/thanks.html"> <!--<meta http-equiv="refresh" content="60; URL=http://loaclhost/formmail/thanks.html">--> <title>アンケートメール</title> </head> <body> <?php // エラーフラグの初期化 $errflag = 0; // 全体としてのエラーフラグ $errname = 0; $errage = 0; $erryuubinup = 0; $erryuubindown = 0; $errjyuusyo = 0; $erremail = 0; $errkaisuu = 0; $errkansou = 0; $date = date(DATE_RSS); // フォーマット文字列 'D, d M Y H:i:s' と同じ意味(第2引数を省略すると現在時刻を取得) $furigana = $_POST['furigana']; $name = $_POST['name']; if($name=="") $errname = 1; // 個別エラーフラグ $age = $_POST['age']; if($age=="") $errage = 1; else if($age<0 || $age>100) $errage = 2; $yuubin_up = $_POST['yuubin_up']; if($yuubin_up=="") $erryuubinup = 1; $yuubin_down = $_POST['yuubin_down']; if($yuubin_down=="") $erryuubindown = 1; $jyuusyo = $_POST['jyuusyo']; if($jyuusyo=="") $errjyuusyo = 1; $tel = $_POST['tel']; if($tel=="") $errtel = 1; $email = $_POST['email']; if($email=="") $erremail = 1; $kaisuu = $_POST['kaisuu']; if($kaisuu=="") $errkaisuu = 1; else if($kaisuu<0 || $kaisuu>999) $errkaisuu = 2; $check1 = $_POST['check1']; $check2 = $_POST['check2']; $check3 = $_POST['check3']; $check4 = $_POST['check4']; $check5 = $_POST['check5']; $kansou = $_POST['kansou']; if($kansou=="") $errkansou = 1; echo("end"); exit; ///////////////////////////// // どれもエラーがない場合 // ///////////////////////////// if($errname == 0 && $errage == 0 && $erryuubinup == 0 && $erryuubindown == 0 && $errjyuusyo == 0 && $erremail == 0 && $errkaisuu == 0 && $errkansou == 0){ $errflag=0; // エラーフラグを降ろす。 print($date); print("<br>"); print($furigana); print("<br>"); print($name); print("<br>"); $RadioGroup = $_POST['RadioGroup']; // RadioGroup0:男 RadioGroup1:女 if($RadioGroup==0){ print("男性"); }else if($RadioGroup==1){ print("女性"); } print("<br>"); print($age); print("<br>"); print($yuubin_up); print("<br>"); print($yuubin_down); print("<br>"); $select = $_POST['select']; // 都道府県 switch($select){ case 1: print "北海道"; break; case 2: print "青森県"; break; case 3: print "秋田県"; break; case 4: print "岩手県"; break; case 5: print "山形県"; break; case 6: print "福島県"; break; case 7: print "茨城県"; break; case 8: print "新潟県"; break; case 9: print "石川県"; barek; case 10: print "群馬県"; break; case 11: print "栃木県"; break; case 12: print "千葉県"; break; case 13: print "東京都"; break; case 14: print "埼玉県"; break; case 15: print "神奈川県"; break; case 16: print "山梨県"; break; case 17: print "長野県"; break; case 18: print "静岡県"; break; case 19: print "福井県"; break; case 20: print "富山県"; break; case 21: print "愛知県"; break; case 22: print "和歌山県"; break; case 23: print "三重県"; break; case 24: print "大阪府"; break; case 25: print "京都府"; break; case 26: print "兵庫県"; break; case 27: print "広島県"; break; case 28: print "岡山県"; break; case 29: print "山口県"; break; case 30: print "島根県"; break; case 31: print "鳥取県"; break; case 32: print "高知県"; break; case 33: print "香川県"; break; case 34: print "愛媛県"; break; case 35: print "徳島県"; break; case 36: print "福岡県"; break; case 37: print "長崎県"; break; case 38: print "佐賀県"; break; case 39: print "大分県"; break; case 40: print "熊本県"; break; case 41: print "宮崎県"; break; case 42: print "鹿児島県"; break; case 43: print "岐阜県"; break; case 44: print "奈良県"; break; case 45: print "沖縄県"; break; }