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

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

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

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

JavaScript

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

Q&A

解決済

2回答

798閲覧

file_existsを正常に動かしたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

JavaScript

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

0グッド

0クリップ

投稿2021/05/01 17:24

編集2021/05/01 17:49

前提・実現したいこと

https://qiita.com/Schwl_Freiheit/items/9a01985d220d8984548b
この方のコードをもとに、文字列をPHPに転送させようとしています。
しかし、予期せぬエラーが出てしまいました。

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

実際にVSCodeから出たエラー

syntax error, unexpected token "if" Unexpected 'if'. Expected ';'.

firefoxのネットワークのほうにあったエラー

Parse error: syntax error, unexpected token "if" in C:\xampp\htdocs\TEST\test.php on line 7

該当のソースコード

Test.js

Javascript

1send_text = a b c d; 2$.ajax({ 3 type: "POST", 4 url: "test.php", 5 contentType: "Content-Type: application/json; charset=UTF-8", 6 data: send_text, 7 error: function (XMLHttpRequest, textStatus, errorThrown) { 8 console.log("ajax通信に失敗しました"); 9 //失敗した時の処理 10 }, 11 success: function (response) { 12 console.log("ajax通信に成功しました"); 13 //成功した時の処理 14 } 15 })

PHP

1<?php 2//送信先のJSONのURL 3$jsonUrl = $_POST; 4echo($_POST); 5json_decode($jsonUrl); 6//JSON内のデータを受け取る 7if(file_exists($jsonUrl)){ 8 $json = file_get_contents($jsonUrl); 9 $jsonData = json_decode($json, true); 10}else{ 11 echo "No Data"; 12} 13 14 15//JSからのデータを受け取る 16$data = file_get_contents('php://input'); 17$data = json_decode($data); 18//配列を合体させて保存 19$jsonData = array_merge($jsonData, $data); 20$jsonData = json_encode($jsonData); 21file_put_contents($jsonUrl, $jsonData);

試したこと

まず、PHPのドキュメント(https://www.php.net/manual/ja/function.file-exists.php)を調べ、if文が間違いないでないことを確認しました。
次に、ajaxに問題がないことを確認するため、php単体でif文を書き、同様のエラーが発生することを確認しました。

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

XAMPP:3.2.4
vscode:1.55
jquery:3.6.0

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

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

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

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

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

m.ts10806

2021/05/01 19:48

レスポンスがJSONになってませんね。
guest

回答2

0

ベストアンサー

出ているエラーの前に見直すべき場所が沢山あります。

js

1send_text = a b c d; //JavaScriptとしてエラーにしかならないのでは 2$.ajax({ 3 type: "POST", 4 url: "test.php", 5 contentType: "Content-Type: application/json; charset=UTF-8", 6//設定するのは「content-typeヘッダの値」だから余計な事書きすぎ 7 data: send_text, 8//これで何が送られるつもりなのか 9

php

1$jsonUrl = $_POST; 2//send_text = a b c d; これを送って何を受け取れるつもりなのか不明 3echo($_POST); //レスポンスJSONなのにそうじゃない値をechoしている。しかも配列をechoするのはWarning 4json_decode($jsonUrl); 5//json_decodeの引数はStringを求めてるけど配列をセットしている 6//しかし、json_decodeした結果何もしない? 7 8if(file_exists($jsonUrl)){ 9//何をチェックしたいのか $_POSTをそのままでは配列に対するチェックになるが 10 11$data = file_get_contents('php://input'); //type POSTで送信したから$_POSTで受け取っているはずだけれど 12$data = json_decode($data); //同じこと2回やってるような 13

AjaxでもForm送信でも考え方は同じです。
Form送信ではinputなど入力コントロールのname属性の設定値をキーとして入力内容(value)が送信されるのに対し、Ajaxではオブジェクトのkey:valueが送られるのに変わっただけです。
{hoge:"a"}で送信したら$_POST['hoge']でaが取得できます。

確認すべきはif文やfile_existsの機能や書き方の問題ではなく、リクエストとレスポンスが正しく成り立つ形になっているかです。
どの言語もですが、出ているエラーだけ追っていても解決しないことは多くあります。エラーを解決したからとやりたいことができるとは限らないということですね。
そもそもやりたいことを実現できるロジックになっていなければ、エラーを解決したところで枝葉の火消しにしかならず、実は進んでなく退行したということもままあります。

「惜しい」は実は何の根拠もない考え方です。
プログラムは書いたとおりにしか動かないので「惜しい」は存在せず、「YESかNOか」の2択。「できてるかできてないか」「TrueかFalseか」です。

場合により全体から見直す必要もあります。
「とりあえず動けばいい」で済まないことのほうが多いです。
特にWebアプリケーションは対応しておくべきセキュリティ対策が多くありますからね。
それ専用の認定試験もあるくらい。

投稿2021/05/01 23:00

編集2021/05/01 23:09
m.ts10806

総合スコア80850

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

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

0

PHP

1// JSON内のデータを受け取る ←

投稿2021/05/01 17:28

kei344

総合スコア69407

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問