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

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

ただいまの
回答率

88.91%

JavaScriptとPHPで500内部エラー

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,263

kurikara

score 7

前提・実現したいこと

今、JavaScriptからPHPへ入力した情報を渡して、SQLに登録処理を行いたいのですが、500内部エラーを起こしてしまい、後にも先にも勧めなくなってしまいました。もしソースのことが分かるという方は教えて頂けると幸いです。

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

POST http://(URL)/common/escape\.php 500 \(Internal Server Error\)

該当のソースコード

js

var php_data = \[\] ;

php_data = {
worker_code : worker_code\.value
,worker_name : worker_name\.value
,worker_name_kana : worker_name_kana\.value
}

var params = {inputData: JSON\.stringify\(php_data\)} ;

common\.phpCall\(
    'insert\.php'
    ,params
    ,function\(jsondata\){
        alert\(jsondata \+ '件、ユーザーの登録を行いました。' \) ;
        alert\( 'ユーザーの登録が完了しました。画面を更新します。' \) ;
        location\.reload\(\) ;
       }
      , function\(error\){
         alert\( '500:Internal Server Error' \) ;
        alert\( 'ユーザーの登録作業中にエラーが発生しました。\\nユーザーの登録作業を中止します。' \) ;
  }
 \)

common

const common = {
    /\*\*
     \* PHPを呼び出す
     \* 戻り値をコールバック関数へ渡す
     \*/
    phpCall: function\(phpFile, params, callback, error\){
        //引数チェック
        var chk = \[params, callback,error\];    
        if\(!_common\.dataChk\(chk\)\)return false;
        params = chk\[0\];
        callback = chk\[1\];
        error = chk\[2\];

        var requestObj = _common\.createXMLHttpRequest\(\);
        requestObj\.open\('POST', SYSTEM_FULL_LOCATION \+ '/common/escape\.php', true\);
        requestObj\.setRequestHeader\( 'Content-Type', 'application/x-www-form-urlencoded' \);
        requestObj\.setRequestHeader\( 'X-Requested-With','XMLHttpRequest' \);
        requestObj\.send\('php='\+phpFile\+'&' \+ params\);
        requestObj\.onreadystatechange = function\(\){
            if \(requestObj\.readyState === 4 \) {
                if\(requestObj\.status === 200\){
                    var jsonData = JSON\.parse\(requestObj\.responseText\);
                    callback\(jsonData\);
                }else{
                    error\(requestObj\);
                }
            }
        }
        return true;
    }


insert\.php

<\?php
    # パラメータ退避
    \$input = array_merge\(\$_GET , \$_POST\) ;

    # JavaScriptから受け渡されたデータを配列に格納
    # 素の状態の場合、JSON文字列として渡されるので、配列に直してあげる
    \$array = json_decode\(\$input\["inputData"\], JSON_FORCE_OBJECT\) ;

    # JSONに渡すためのパラメータ用配列を作成し、JavaScriptから受け渡されたデータ配列(\$array\)を格納
    \$row = \$array ;
    # 結果用の空配列作成
    \$result = array\(\) ;

    \$sql1 = dirname\(__FILE__\)\."/sql/staff_insert\.sql" ;#作成したSQL名
    #staff_insertに必要なパラメータ
    \$param1 = array\(
        \$row\["worker_code"\] #パラメータ名
        , \$row\["worker_name"\]
        , \$row\["worker_name_kana"\]
        , \$row\["sex"\]
        , \$row\["birthday"\]
        , \$row\["tel_1"\]
        , \$row\["tel_2"\]
        , \$row\["tel_3"\]
        , \$row\["mobile_1"\]
        , \$row\["mobile_2"\]
        , \$row\["mobile_3"\]
        , \$row\["emergency_1"\]
        , \$row\["emergency_2"\]
        , \$row\["emergency_3"\]
        , \$row\["zipcode"\]
        , \$row\["street_address"\]
        , \$row\["mail_address"\]
        , \$row\["part"\]
        , \$row\["continuous_presence"\]
        , \$row\["enter_date"\]
        , \$row\["leave_date"\]
        , \$row\["insurance_number"\]
        , \$row\["suspension_flag"\]
    \);

    # SQLとパラメータをまとめ、SQLを発行する
    # 第一引数:SQL名
    # 第二引数:SQL用パラメータ
    # 第三引数:結果用配列
    if\( !updateSqlByFile\(\$sql1 , \$param1 , \$result\) \){
/\*
        header\("HTTP/1\.0 Internal Server Error"\) ;
        exit ;
\*/

//    return false ;

//        echo json_encode\(false\);
//        exit;
/\*
        header\('Content-Type: application/json'\);
        echo json_encode\(false\);
        exit;
\*/
    header\("HTTP/1\.0 500 Internal Server Error"\);
    exit;
    }

    # 結果をJSON形式で出力し、echoで結果を返す
//    header\("Content-Type: application/json; charset=utf-8"\) ;
    header\('Content-Type: application/json'\) ;
    echo json_encode\(\$result\) ;
    exit ;
\?>

補足情報\(言語/FW/ツール等のバージョンなど\)

echo json_encode\(false\);
exit;

echoで    false返却すると、false件登録というアラートが出る。SQLにはデータ登録なし。

header\("HTTP/1\.0 Internal Server Error"\) ;
exit ;

これだと、500エラーになる。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2017/02/18 00:01

    質問文のコードはそれぞれ個別にコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。

    キャンセル

  • Lhankor_Mhy

    2017/02/18 09:32

    teratailではマルチポストは非推奨です。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14170660319 質問履歴を拝見するとほとんどの問題が未解決のままのようです。この質問もその予定ですか?

    キャンセル

  • kei344

    2017/04/13 23:00

    回答が付いた質問の編集は慎重に行ってください。タイプミス程度なら修正する事もありますが、本文を削除するのはやめましょう。

    キャンセル

  • 退会済みユーザー

    2017/04/13 23:00

    複数のユーザーから「意図的に内容が抹消された質問」という意見がありました
    解決後に編集機能を用いて質問内容を改変し関係のない内容にしたり、内容を削除する行為は禁止しています。
    投稿していただいた質問は、後に他の誰かが困ったときに助けになる情報資産になると考えるからです。
    「質問を編集する」ボタンから編集を行い、他のユーザにも質問内容が見えるように修正してください。

回答 1

+2

まず、500 Internal Server Error が出ているのならば、

  • エラーが起きているのは PHP(サーバ)側である
  • であるならば、HTTP サーバのエラーログに、詳しい情報が書かれている(はず)

ので、それをまず見ましょう。
あとはまあ、PHP にとにかくログ埋め込んで調査するとかですかね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/18 11:43

    ご指摘の可能性はもちろんありますが、普通に header("HTTP/1.0 500 Internal Server Error"); が実行されている線を捨てる必要はないだろう、という理由でマイナス評価します。

    キャンセル

  • 2017/02/18 11:46

    その場合、PHPのエラーが出てないわけなので、捨ててるわけではないですよ。(PHP の実行時エラーでないのに 500 になるなら、「500 になるように結果を返している」のですから)

    キャンセル

  • 2017/02/18 11:49

    わかりました。では評価を戻します。

    キャンセル

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

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る