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

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

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

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

Q&A

解決済

4回答

8364閲覧

PHP $_POSTでname属性に"["があるformのvalueを取得したい

varigo

総合スコア7

PHP

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

0グッド

1クリップ

投稿2016/10/17 13:53

編集2016/10/21 13:20

###前提・実現したいこと
PHPで動く予約管理システムを使用しています(既製品)

予約入力画面で入力値を、申込み完了後に$_POSTを使って別のフォームに渡したいのです。

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

formのname属性に"["や"]"で囲まれた部分があり、そのせいで意図通りに$_POSTできないでいます。

下記の、'reservation[guest][name]'の部分を変えずに$_POSTする方法はありませんでしょうか。

###該当のソースコード
フォーム抜粋

<form method="post" action="xxx"> <input id="client-name" name="reservation[guest][name]" value=" "> <button type="submit" name="reserve_action" value="validate">予 約確認</button>

値を取得しようしているPHP

if(isset($_POST['reservation[guest][name]'])){ $name = $tag['name']; if($name == 'name') $tag['values'] = (array) $_POST['reservation[guest][name]']; } return $tag;

###試したこと

$_POST['reservation[guest][name]']

としてしまうと、

$_POST['reservation']['guest']['name']

としたのと同様である、ということまではわかったのですが、
'reservation[guest][name]'の部分は既存のプログラムが出力しているため(また他の部分でも使用しているために)変更できません。

var_dump($name);
var_dump($_POST['booking[client][name]']);
などしてみても、当然(?)NULLで戻ってきてしまいます。

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

###補足情報2(2016/10/21)
最初のフォームの登録が完了した後、リダイレクトで登録完了ページに飛ばしているため、そこへ値を渡すのは無理だろう、ということがわかりました。
別の手段を考えたいと思います。
ご協力いただいたみなさま、ありがとうございました。

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

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

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

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

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

guest

回答4

0

何が問題なのかわからない……。
タイトル通りなら、質問内にあるように、

PHP

1if(isset($_POST['reservation']['guest']['name'])){

で普通に取得できませんか?
変更できないのはフォーム側の要素名であってサーバ側のロジックは上記に修正できますよね?

投稿2016/10/19 04:38

timy

総合スコア168

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

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

varigo

2016/10/19 05:45

ありがとうございます。 どうも根本的に状況が理解できていない、知識が足りていないのだと思います。 お手数をおかけいたしました、申し訳ございません。
guest

0

php

1<form method="post" action="tes.php"> 2<input id="client-name"type= "text" name="reservation[guest][name]" value=" "> 3<button type="submit" name="reserve_action" value="validate">4約確認</button> 5<?php 6if(isset($_POST['reservation[guest][name]'])){ 7echo "ww"; 8 9 } 10 ?>

php

1<form method="post" action="tes.php"> 2<input id="client-name"type= "text" name="reservation[guest][name]" value=" "> 3<button type="submit" name="reserve_action" value="validate">4約確認</button> 5<?php 6if(isset($_POST['reservation']['guest']['name'])){ 7echo "ww"; 8 9 } 10 ?> 11

を比べたときに、下のほうは出力されましたが
上のほうは出力されませんでした。
$_POST['reservation[guest][name]']と```$_POST['reservation']['guest']['name']

参考資料もなく、予想でしかありませんが何かの参考になればと思います。

投稿2016/10/18 11:48

toutou

総合スコア2050

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

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

varigo

2016/10/19 04:05

わざわざ検証していただきましてありがとうございます。 参考にさせていただきます。感謝いたします。
guest

0

PHPにおいて、nameに配列構造を記載することはわりと普通です。なので、普通に以下で受け取れると思うのですが???

php

1$_POST['reservation']['guest']['name']

以下がサンプルコードです。

php

1<?php 2var_dump($_POST['reservation']['guest']['name']); 3?> 4<form method="post"> 5 6<input id="client-name" name="reservation[guest][name]" value=" "> 7 8<button type="submit" name="reserve_action" value="validate">9約確認</button>

※何か勘違いをされている? もしくは自分が質問を勘違いしている?

投稿2016/10/17 21:08

popobot

総合スコア6586

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

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

varigo

2016/10/18 09:22

ありがとうございます。 ご提示いただいたものでやってみたのですが、NULLが返ってきました。 根本的な勘違い、説明不足かもしれません… 「フォーム抜粋」と書きましたのが、最初にユーザーが入力するページのフォームです。 (既成のフォームで、自分で内容を変更することができません) このフォームの確認画面を経て登録完了後、 別ページにリダイレクトしてthanks画面が表示されます。 そのページに、さらに別のフォームを用意して、 お申込みいただいた内容とは別のオプション項目を表示して選択してもらいます。 そこでだれが申込んだ内容なのか間違えないように名前を2つ目のフォームに渡したい、と。 「値を取得しようしているPHP」で書いた内容は、 (Wordpressで動いているのですが)最初のフォームで入力された名前(eservation[guest][name]に入力されたvalue)を別の2つ目のフォームに渡すためのコードです。
popobot

2016/10/18 12:14

うーん、よくわかりませんが、同じページに2つのフォームがあって、既成のフォームのinputの値を、新しいフォームで使おうとしていますか? 別のフォームのinputの値はそのままでは送ることはできないですよ
varigo

2016/10/19 03:58

ありがとうございます。同じページ、ではないのですが、 既成のフォームの入力の登録が完了して表示されるthanks画面(フォームからリダイレクトされる別ページ)上に別フォームを設置。 その別フォームに、既成のフォームに入力された値を渡したいのです。
popobot

2016/10/19 04:23 編集

なるほど、やりたいことはわかりました! だとしたら、thanks画面の新しいフォームにinput (type=hidden)を追加して変数を渡してあげればいい気がします。 <input type='hidden' name='reservation[guest][name]' value='<?= $xxxx ?>'> ※ここで$xxxxは実際の変数に変えてくださいね ※nameも変更してもいいかもしれません
varigo

2016/10/21 13:20

ありがとうございます。 最初のフォームの登録が完了した後、リダイレクトで登録完了ページに飛ばしているため、そこへ値を渡すのは無理だろう、ということがわかりました。 別の手段を考えたいと思います。
guest

0

ベストアンサー

PHPで処理する限り$_POST['reservation']['guest']['name']で受けるのが妥当ですが
標準入力を処理すれば以下でいけます

PHP

1<?PHP 2$str = file_get_contents("php://input"); 3$pattern="/(.*)=(.*)/"; 4$array=[]; 5foreach(explode("&",$str) as $param){ 6 if(preg_match($pattern,$param,$match)){ 7 $array=array_merge($array,[$match[1]=>$match[2]]); 8 } 9} 10print_r( $array); 11?> 12<form method="post"> 13<input name="hoge" value="test"> 14<input name="fuga[]" value="1"> 15<input name="fuga[]" value="2"> 16<input name="fuga[]" value="3"> 17<input id="client-name" name="reservation[guest][name]" value="test"> 18<button type="submit" name="reserve_action" value="validate">予約確認</button> 19</form>

この場合、reservation%5Bguest%5D%5Bname%5Dというキーで受けていることがわかりますが
逆にfuga[]のように名前が競合するとあとのデータに上書きされます。

投稿2016/10/17 14:16

yambejp

総合スコア114839

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

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

varigo

2016/10/18 09:23

ありがとうございます。 ご提示いただいたものでやってみたのですが、よくわかりませんでした。 根本的な勘違い、基礎不足、説明力不足かもしれません… ※以下、他の方のコメントにも同様のことを書きましたので、重複がマズイようでしたらご指摘ください… 「フォーム抜粋」と書きましたのが、最初にユーザーが入力するページのフォームです。 (既成のフォームで、自分で内容を変更することができません) このフォームの確認画面を経て登録完了後、 別ページにリダイレクトしてthanks画面が表示されます。 そのページに、さらに別のフォームを用意して、 お申込みいただいた内容とは別のオプション項目を表示して選択してもらいます。 そこでだれが申込んだ内容なのか間違えないように名前を2つ目のフォームに渡したい、と。 「値を取得しようしているPHP」で書いた内容は、 (Wordpressで動いているのですが)最初のフォームで入力された名前(eservation[guest][name]に入力されたvalue)を別の2つ目のフォームに渡すためのコードです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問