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

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

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

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

Q&A

解決済

3回答

917閲覧

POSTする際に、JSON形式で渡した値を受け取る方法

toll_tree

総合スコア199

PHP

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

0グッド

0クリップ

投稿2019/05/27 08:50

POSTする際にJSON形式で渡した値が受け取れません。

php

1<?php 2 3if(!empty($_POST)){ 4 5 6 $name = $_POST['test']; 7 var_dump($name); 8 exit(); 9} 10 11$arr[] = ['test','test1','test2']; 12$arr[] = ['test3','test4','test5']; 13 14 15//var_dump($test); 16//exit(); 17 18 19?> 20 21<html> 22<head> 23 <meta charset="UTF-8"> 24 <title>テスト</title> 25</head> 26<body> 27 <form action="test.php" method="post"> 28 <input type="text" name="test" value="1"> 29 <input type="submit" value="send"> 30 <input type="hidden" name="test" value="<?=json_encode($arr)?>"> 31 </form> 32</body> 33</html> 34

上記コードにおきまして、POSTすると、以下のように出力されます

\test.php:7:string '[[' (length=2)

何故、$arrに代入した文字列が表示されないのでしょうか?
どなたか、教えて頂けましたら幸いです。
よろしくお願いします。

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

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

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

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

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

m.ts10806

2019/05/27 08:51

ブラウザ「ソースを表示」で出力内容確認してphpマニュアルきちんと確認して適切に機能を使えば解決できる内容ですけど、それでも丸投げ質問に回答もらいたいですか?
退会済みユーザー

退会済みユーザー

2019/05/27 09:01

$arr の作り方、それでいいの?
toll_tree

2019/05/27 09:02

多次元配列で、処理したかったので大丈夫です!
m.ts10806

2019/05/27 09:36 編集

有益なアドバイスをユーザー名だけ見てスルーするのはどういうつもりか知らないですけど https://teratail.com/questions/191571#reply-284285 でもらった回答をきちんと理解していれば起きていない問題。 (起きている問題と解決策からしたら)こんなに長ったらしい質問を書くこともなかった。 どんどんアドバイスを無駄にしていきますね。大丈夫ですか?それで。 こんなに短時間で問題が起きないことを問題にしてしまう人も珍しい。
m.ts10806

2019/05/27 09:44

↑の質問でベストアンサーに選んだ回答すら無にしたことにお気づきだろうか。 気づいてたらこんなひどいことはできないでしょうけど、気づいてないのもそれはそれでひどい。技術力とか初心者とかそういう問題ではないですね。初心者をずっと続けたいらしい
guest

回答3

0

ベストアンサー

json_encode時に付加されるダブルクォーテーションがhtmlで利用している
エンクロージャと競合していますね
html出力時にはhtmlspecialcharsしてください

それとname=testがかぶっているので質問内容がぶれます
切り分けのためにもかぶらないようにしてください

PHP

1<?php 2$test=filter_input(INPUT_POST,"test"); 3 4if(!is_null($test)){ 5 var_dump($test); 6 exit(); 7} 8 9$arr=[ 10 ['test','test1','test2'], 11 ['test3','test4','test5'], 12 ]; 13?> 14 15<html> 16<head> 17 <meta charset="UTF-8"> 18 <title>テスト</title> 19</head> 20<body> 21 <form method="post"> 22<!-- /*修正 23 <input type="test" name="test" value="<?=htmlspecialchars(json_encode($arr))?>"> 24*/--> 25 <input type="text" name="test" value="<?=htmlspecialchars(json_encode($arr))?>"> 26 <input type="submit" value="send"> 27 </form> 28</body> 29</html>

投稿2019/05/27 08:58

編集2019/05/27 09:04
yambejp

総合スコア114821

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

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

m.ts10806

2019/05/27 08:59

type="test"になってます・・
yambejp

2019/05/27 09:05

mts10806さん、ご指摘ありがとうございます。 修正しました
m.ts10806

2019/05/27 09:05

調整ありがとうございます。細かい指摘すみません。
toll_tree

2019/05/27 09:24

@yamabe.jpさん 解決しました。ありがとうございました。
guest

0

htmlこうなってますよね。

html

1<input type="hidden" name="test" value="[["test","test1","test2"],["test3","test4","test5"]]">

属性値は同じクォートで囲まれたところまでなので、valueの属性値は[[となるわけですね。

クォートで囲まれていると値は保証されるので、間がなくてもきちんと通ります。
<input type="hidden"name="test"value="aaa"> ※もちろん読みづらし把握しづらいからこんな書き方はNG

json_encode()の第2引数のOPTIONSをきちんと確認して「ダブルクォートがあっても属性値として使えるよう」にするための検証をしてください。

あと、受け取るところもそのままだと単なるそういう文字列なので、もし「配列に戻したい」のでしたらencodeの逆をしないといけません(この次に「配列に戻せません」って質問来そうだから先にくぎを刺しておく)

投稿2019/05/27 08:57

m.ts10806

総合スコア80850

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

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

maisumakun

2019/05/27 09:11

見事にスルーされてしまった
m.ts10806

2019/05/27 09:13

あの確認なんだったんだろう。 本来連携連動している事を「別問題」として捉えてしまわれると、ね。 セキュリティに関することだから「抜けてました」だけでは済まないのに。。。
guest

0

ブラウザで「ソースを見る」で当該箇所を確認してみてください。引用符の問題だと思います。

投稿2019/05/27 08:56

kei344

総合スコア69407

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

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

toll_tree

2019/05/27 09:18

ありがとうございます。「ソースを見る」で、問題点に気づけました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問