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

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

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

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

JavaScript

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

Q&A

解決済

2回答

528閲覧

javascript&php 配列をfetchした時にPHPで受け取り、配列変換がうまくできない

mikeko0901

総合スコア227

PHP

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

JavaScript

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

0グッド

0クリップ

投稿2022/05/19 08:35

配列をPHP側にfetchで投げて、PHP側ではforeachで処理をしたいと思っていますが、
PHP側でエラーが出てしまいます。
以下、コードと試したことです。

■投げたい配列

["111.111.111.111", "222.222.222.222"]

イメージ説明
↑fetch前にconsole.logしたものです。

■javascript側

console.log(this.addresses); const url = './edit_ip_done.php'; const data = this.addresses; const body = new FormData(); body.append("data",JSON.stringify(data)); body.append('id', this.id); fetch(url,{ method:"post", header: { 'Content-Type': 'application/json' // JSON形式のデータのヘッダー }, body }).then((res) => { return res.text(); }).then(data => { console.log(data); }).catch(error => { alert("登録に失敗しました。catch"); });

■PHP側

<?php ini_set('display_errors', "On"); $id = $_POST["id"]; $addresses = json_decode($_POST["data"], true); foreach($addresses as $address) { print($address); }

■出ているエラー

Warning: Invalid argument supplied for foreach()

こちらの $addressesをPHP側でprint_r( $addresses); すると何も出力されません。

php側を以下にすると

<?php $id = $_POST["id"]; $addresses = $_POST["data"]; print_r($addresses);

以下が出力されます。

[\"111.111.111.111\",\"222.222.222.222\"]

アドバイスいただけますと幸いです。

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

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

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

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

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

yambejp

2022/05/19 08:41

jsの記載でthisを使っている意図は? このthis.addressが["111.111.111.111", "222.222.222.222"]ということ?
m.ts10806

2022/05/19 08:43

どのようにPHP側の値を確認されてるのでしょうか
guest

回答2

0

ベストアンサー

こうしてください

javascript

1const url = './sample.php'; 2const data = ["111.111.111.111", "222.222.222.222"]; 3const body = new FormData(); 4data.forEach(x=>body.append("data[]",x)); 5const method='post'; 6fetch(url,{method,body}).then(res=>res.text()).then(console.log);

//sample.php

PHP

1<?PHP 2$data=filter_input(INPUT_POST,"data",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 3print_r($data);

json経由

データをjsonにまとめるならこう

javascript

1const url = './sample2.php'; 2const data = ["111.111.111.111", "222.222.222.222"]; 3const body = new FormData(); 4body.append("data",JSON.stringify(data)); 5const method='post'; 6fetch(url,{method,body}).then(res=>res.text()).then(console.log);

//sample2.php

PHP

1<?PHP 2$data=filter_input(INPUT_POST,"data"); 3print_r(json_decode($data));

投稿2022/05/19 08:48

編集2022/05/19 08:52
yambejp

総合スコア114572

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

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

0

ありがとうございます。
1つめの方法で実装ができました!

投稿2022/05/19 11:42

mikeko0901

総合スコア227

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問