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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

JavaScript

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

Q&A

2回答

1113閲覧

JavaScriptでPHPのスーパーグローバル変数を取得したい

foorang

総合スコア6

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

JavaScript

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

0グッド

0クリップ

投稿2018/01/24 05:52

編集2022/01/12 10:55

#####前提・実現したいこと

PHPとJavaScriptを使って、ピザ・セット・ドリンクの3つのカテゴリから商品の数量を選んで、
選んだ後、 注文画面へ というボタンを押すと、届け先を入力する為のモーダルウィンドウが現れる
という商品注文フォームを作っています。

まず、それぞれのメニューはPHPでMenuというクラスを作って、インスタンスを作った後それぞれカテゴリ毎に
$pizzaMenu
$setMenu
$drinkMenu
という配列に入れていています。
それをforeach文で回してメニューを表示しています。

その下にモーダルウィンドウを作り、普段はCSSで隠しています
#####該当のソースコード

<form action="#" method="post"> <!--ここからピザメニュー--> <div class="menu_area"> <?php foreach($pizzaMenu as $pizza): ?> <section class="menu_wrapper pizza_wrapper clearfix"> <h3><img src="<?php echo $pizza->getImage(); ?>"></h3> <h4><?php echo $pizza->getName(); ?></h4> <div class="menu_text"> <p><?php echo $pizza->getCaption(); ?></p> <p><?php echo $pizza->getPrice(); ?></p> </div> <p><label id="pizza_label">数量 : <input type="number" min="0" max="10" name="<?php $pizza->getName(); ?>"></label></p> <p id="menu_icon"><img src="<?php echo $pizza->getIcon(); ?>"></p> </section> <?php endforeach ?> </div> <h2 class="menu_page_contents set_menu">セットメニュー</h2> <!--ここからセットメニュー--> <div class="menu_area"> <?php foreach($setMenu as $set): ?> <section class="menu_wrapper set_wrapper"> <h3><img src="<?php echo $set->getImage(); ?>"></h3> <h4><?php echo $set->getName(); ?></h4> <div class="menu_text set_text"> <p><?php echo $set->getCaption(); ?></p> <p><?php echo $set->getPrice(); ?></p> </div> <p><label id="set_label">数量 : <input type="number" min="0" max="10" name="<?php $set->getName(); ?>"></label></p> </section> <?php endforeach ?> </div> <h2 class="menu_page_contents set_menu">ドリンクメニュー</h2> <!--ここからドリンクメニュー--> <div class="menu_area"> <?php foreach($drinkMenu as $drink): ?> <section class="menu_wrapper drink_wrapper"> <h3><img src="<?php echo $drink->getImage(); ?>"></h3> <h4><?php echo $drink->getName(); ?></h4> <p><?php echo $drink->getCaption(); ?></p> <p><label id="drink_label">数量 : <input type="number" min="0" max="10" name="<?php $drink->getName(); ?>"></label></p> </section> <?php endforeach ?> </div> <!--お届け先入力の為のモーダルウィンドウを開くためのボタン--> <p><input type="button" id="order_btn" value="注文画面へ"></p> </form> <!--モーダルウィンドウ--> <section id="order_window1"> <form id="distination"> <h3>お届け先</h3> <p><label>氏名<br><input type="text" name="name"></label></p> <p><label>住所<br><input type="text" name="address"></label></p> <p><label>番地・マンション名<br><input type="text" name="address2"></label></p> <p><label>電話番号<br><input type="text" name="phone_number"></label></p> <p><label><input type="checkbox" name="member">会員登録をする</label></p> <p class="close_modal"><a href="menu_page">メニューへ戻る</a><p> <p class="next">次へ</p> </form>

そしてメニュー選択後、注文画面へ ボタンを押すとjQueryでフォームのそれぞれの数量を取得して
モーダルウィンドウを表示、としたいのですが

全てのカテゴリで数量を選んでいない場合と
全てのカテゴリの数量が等しくない場合、
jQueryでそれぞれ対応したアラート表示をしたいと考えています。
なので、このようなjQueryを組みたいのですが

#####script.js (便宜上jsの中にPHPを書き込んでいます)

$('#order_btn').click(function(){ if(isset($_POST['$pizza->getName()']) && isset($_POST['$set->getName()']) && isset($_POST['$drink->getName()'])){ //全てのカテゴリで数量が入っていたら下の処理へ if(($_POST['$pizza->getName()'] == $_POST['$set->getName()']) && ($_POST['$set->getName()'] == $_POST['$drink->getName()'])){ //全てのカテゴリの数量が等しい場合はお届け先入力の為のモーダルウィンドウを表示          $('#order_window').fadeIn(); }else{   alert('ピザ、セット、ドリンクは同じ数量でないと注文出来ません。'); } }else{  alert('ピザ、セット、ドリンクをそれぞれ同じ数ずつ選んでください。');        }

javascriptの中にPHPのスーパーグローバル変数なんて使えませんよね、、、。
あと、PHPのisset関数にあたる処理をJavaScriptで行なう方法がネットで調べてみてもよく分かりませんでした。

  
#####教えていただきたいこと

・このようにformのname属性にPHPのインスタンスのプロパティを使っている場合、どのように
Javascriptでformのそれぞれの値を取得したら良いでしょうか?

・Javascriptで上記のようにPHPのisset関数にあたる処理で値があるかどうかを確かめるにはどのようにすれば良いでしょうか?

独学でプログラミングを始めて、いざ自分でプログラムを作ってみようとしていますが
自力では乗り越えられそうにない壁にあたっています、、、。
まだまだ勉強不足ゆえの質問になるかと思いますが、どうかお力添えをお願いします。

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

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

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

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

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

guest

回答2

0

PHPの変数をjsが参照するような作りは複雑になるわりには
得るものが少ないのでおすすめできません
そもそもinputのnameに可変的なものをいれることがおかしいと思うので
固定化してしまえば、$_POSTの戻り値を元にバリデートしようという
考え方はなくなると想います
一度HTMLで書き起こしてみて、jsの挙動をチェックするとよいでしょう

投稿2018/01/24 06:06

yambejp

総合スコア114572

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

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

0

・このようにformのname属性にPHPのインスタンスのプロパティを使っている場合、どのように Javascriptでformのそれぞれの値を取得したら良いでしょうか?
・Javascriptで上記のようにPHPのisset関数にあたる処理で値があるかどうかを確かめるにはどのようにすれば良いでしょうか?

js

1$( 'form input' ).each( function() { 2 var v = $( this ).val(); // input要素の値(文字列) 3 if ( v !== '' ) { 4 // とりあえず空ではない 5 } 6} );

また、foreach の中でidを指定していますが、2項目以上あるのであれば同一ページ内に同盟のidが複数あることになり、文法違反かつエラーの元なので、処理の仕方を変えたほうが良いです。

投稿2018/01/25 17:01

kei344

総合スコア69364

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問