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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1654閲覧

Javascrpit fetchの動作がローカルサーバーとWEBサーバーで異なる

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/11/04 09:33

前提・実現したいこと

fetchでデータベース登録用のPHPファイルを呼び出し、その結果をもとにメッセージを表示したいのですが、
ローカルサーバーではエラー、WEBサーバーでは正常にレスポンスが返ってきています。
WEBサーバーにてPHP側からレスポンスをエラーで返してみましたが、失敗にならなかったのでそもそも処理が通っていないようです。
javascript側からと、PHP側からそれぞれ他に必要なコーディングがあるのでしょうか?

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

ローカルで実行した際のF12で確認できるエラーメッセージ

Failed to load resource: net::ERR_FAILED

該当のソースコード

shift.php

javascript

12 3 <script > 4 function editSchedule() 5 { 6 var destinyid = document.getElementById('destinyid').value; 7 if(!window.confirm(destinyid + 'さんで登録しますか?')) 8 { 9 return; 10 } 11 12 fetch('./lib/registShift.php', {  // ローカルだとここでエラー 13 method: 'POST', 14 header : { 15 'content-type': 'application/json' 16 }, 17 body: JSON.stringify({ 18 destinyid: destinyid, 19 schedule1: document.getElementById('RadioSchedule1').checked, 20 schedule2: document.getElementById('RadioSchedule2').checked, 21 schedule3: document.getElementById('RadioSchedule3').checked, 22 schedule4: document.getElementById('RadioSchedule4').checked, 23 schedule5: document.getElementById('RadioSchedule5').checked, 24 schedule6: document.getElementById('RadioSchedule6').checked, 25 schedule7: document.getElementById('RadioSchedule7').checked 26 }), 27 }) 28 .then((res)=> { 29 if(res.status==200) { 30 alert('登録完了しました'); 31 window.location.href='./shift.php'; 32 } else { 33 throw new Error(); 34 } 35 }) 36 .catch((e) => { 37 alert('登録に失敗しました'); 38 }); 39 }; 40 </script> 41

registShift.php

php

1<?php 2 require_once 'MySQL.php'; 3 $post_data = json_decode(file_get_contents('php://input'), true); 4 5 // IDが存在する場合だけ登録 6 $flg = false; 7 $stmt = MySQL::SQLexecuteNoneParams('SELECT * FROM shift'); 8 while ($row = $stmt->fetch()) { 9 if ($post_data['destinyid'] == $row['destinyID']) 10 { 11 $flg = true; 12 break; 13 } 14 } 15 if ($flg == true) { 16 // 日本時間にする 17 ini_set('date.timezone', 'Asia/Tokyo'); 18 // Update 19 $query = 'Update shift SET 20 destinyID=:destinyID, 21 day1=:day1, 22 day2=:day2, 23 day3=:day3, 24 day4=:day4, 25 day5=:day5, 26 day6=:day6, 27 day7=:day7, 28 updatedate=:updatedate 29 WHERE destinyID=:destinyID'; 30 $params = [ 31 'destinyID', $post_data['destinyid'], PDO::PARAM_STR, 32 'day1', $post_data['schedule1'], PDO::PARAM_STR, 33 'day2', $post_data['schedule2'], PDO::PARAM_STR, 34 'day3', $post_data['schedule3'], PDO::PARAM_STR, 35 'day4', $post_data['schedule4'], PDO::PARAM_STR, 36 'day5', $post_data['schedule5'], PDO::PARAM_STR, 37 'day6', $post_data['schedule6'], PDO::PARAM_STR, 38 'day7', $post_data['schedule7'], PDO::PARAM_STR, 39 'updatedate', date('Y/m/d H:i:s'), PDO::PARAM_STR 40 ]; 41 list($stmt, $ret) = MySQL::SQLexecute($query, $params); 42 MyLog::outVal($query, 'query'); 43 if ($ret) 44 { 45 http_response_code(200); 46 exit(); 47 } 48 } 49 http_response_code(500); 50 exit(); 51?>

試したこと

レスポンスコードをエラーで返してみましたが、失敗にならなかったのでそもそも処理が通っていないようです。
registShift.php

PHP

1<?php 2 http_response_code(500); 3 exit(); 4?>

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

ローカルサーバーのPHP:8.0.10
WEBサーバー(レンタルサーバーXFREE)のPHP:7.1

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

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

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

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

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

guest

回答2

0

json_decode(file_get_contents('php://input')

普通にfilter_inputでpostデータを処理するほうが良いと思いますが
fetchでpost処理するときはformDataでbodyを渡すのが原則なので
そう書き換えてみてください

投稿2021/11/04 09:45

yambejp

総合スコア116835

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

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

退会済みユーザー

退会済みユーザー

2021/11/04 12:14

情報ありがとうございます。 自己解決しましたので、この質問は締めさせていただきます。 formDataでうまくいかなければまた別で質問したいと思います。
guest

0

ベストアンサー

WEBサーバーとローカルサーバーで結果が異なったのは、.htaccessをWEBサーバーから退避させたときに、ローカルサーバーのregistShift.phpがあるフォルダに配置してしまっていたことが原因でした。
.htaccessにそのフォルダ以下はアクセス禁止と設定していたためリダイレクトが発生し、処理が通っていなかったようです。

またfetchが成功していない原因は、registShift.phpからアクセスしているクラス内部で例外が発生していたためでした。

投稿2021/11/04 12:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問