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

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

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

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

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

4回答

3936閲覧

Ajaxを利用してPHPにtrueかfalseを流し、PHP側でそのbool情報を認識し動的に制御できるようにするには

Kazuma2015

総合スコア46

PHP

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

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2016/08/02 04:37

1.解決したい問題

+------------------+
|<DivフォームA> |
+------------------+
|<DivフォームB> |
+------------------+

がそれぞれ準備されている。
それらを表示方法A、表示方法Bと分けて表示したい。

表示方法Aでは
DivフォームA -> DivフォームBの順番で出力
表示方法Bでは
DivフォームB -> DivフォームAの順番で出力がボタンで変更できるようにしたい。

表示の切り替えではOnclickイベントで.ajaxを使用しページを読み直さないようにしたい場合どのようにしたらよいか。

2.使用しているプラグイン

ベースはPHP
・JQuery(便利にajax使いたいので!)
・Smarty(HTMLの記載はphpで行いたくないのでSmartyに記載)
・ADOdb(使うために入っているが、今回のコードでは関係ない)

3.参考サイト様

JQueryのAjaxをPHPで使うやつ
http://qiita.com/super2baba/items/b1301ca567b60b2e00c7

JavaScript:Post to PHP
https://www.youtube.com/watch?v=jVAaxkbmCts

4.現行のコードの考え方(失敗)

1.Smartyで参照しているtplファイルの中に

<input type="button" id="hoge" name="hoge" value="viewA" onclick="chgView()"/> と <input type="button" id="hoge" name="hoge" value="viewB" onclick="chgView()"/>

が宣言済みで、

common.js側には

function chgView(){ $('#hoge').click(function(){ $.post('index.php',{ postDM:$('#hoge').val() }), function(data) { $('#hoge').html(data); } }); });

と記載。
php側では

<?php $hogeValue = $_POST['postDM']; echo $hogeValue; ?>

としました。
UTF-8などの細かい設定はconfig.phpに記載しそれをリクワイアーしています。

5.結果

POSTの内容がnullになっています。ButtonだとValueの受け取りができないのでしょうか???

以上解決策をご教授願います。

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

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

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

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

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

guest

回答4

0

ベストアンサー

<input type="button" id="hoge" name="hoge" value="viewA" onclick="chgView()"/> <input type="button" id="hoge" name="hoge" value="viewB" onclick="chgView()"/> の2タグは並列で書かれるのでしょうか? そうであれば同じidを使うのはどうかと思います jQueryをつかうならonclickを表示する必要もないかと ajaxでpostしてindexからデータを抜きたいならこんな感じ?

HTML

1<script> 2$(function() { 3 $('input[name=hoge]').click(function(e) { 4 $.ajax( { 5 url : "index.php", 6 cache : false, 7 type:"post", 8 dataType:"text", 9 data :"postDM="+$(this).val(), 10 success: function(msg){ 11 console.debug(msg); 12 }, 13 error: function(XMLHttpRequest, textStatus, errorThrown) { 14 console.log( textStatus); 15 }, 16 }); 17 }); 18}); 19</script> 20 21<input type="button" name="hoge" value="viewA"> 22<input type="button" name="hoge" value="viewB">

投稿2016/08/02 05:11

yambejp

総合スコア114581

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

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

Kazuma2015

2016/08/02 05:58

回答ありがとうございます。 リファレンスを照らし合わせながら確認しました(笑 このような書き方があったんですね! 上記の書き方でしたら確かにechoにはbuttonのvalueが取得できていました。 ありがとうございます!
Kazuma2015

2016/08/02 06:21

動作が安定していてかつ、記載されているスクリプト内容も美しかったyambejpさんの回答をBAにさせていただきます。ありがとうございました。
guest

0

buttonでもvalueは使えます。

根本的な問題ですが、ひとつのページ(HTML)で同一のidを複数使うことはできません。
おそらく最初に記述したほうのDOMしか取得できないと思います。

クリックしたときにchgView()を実行しているのに、さらにその中で $('#hoge').click(function(){ でクリックイベントをとっているのがよくわかりません。
(ほかのところで別のイベントでもこの送信を行うとか?)

jQueryを使っているなら、onclick="chgView()"を使わずに

$('input[typ="button"]').on('click',function(){ //セレクタはclassなど使っても良い var t = $(this); $.ajax({ url: 'index.php', type: 'POST', postDM: t.val(), }) .done(function(data) { t.html(data); }) .fail(function(xhr, status, err) { }) })

とするのはいかがでしょうか?

投稿2016/08/02 05:07

NatsumiOki

総合スコア1298

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

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

Kazuma2015

2016/08/02 06:06

idの並列はやはりタブーでしたねw ありがとうござます 上記の内容を見て何点か不明点があったのでその点を質問させてください。 .ajaxの場合data:~~~のように記載されている方が多く見受けられるのですが、 NatsumiOkiさんのスクリプトにはdataの記載がないですよね? 代わりにそのままpostDMに値を渡しているという風に見て取れるのですがそれで間違いはないでしょうか? また、 >ほかのところで別のイベントでもこの送信を行うとか? とのことでしたが、できれば他にもButtonの追加を検討したいので上記のコードを書いたつもりでした。((p.s説明不足ですね、、すみません))
NatsumiOki

2016/08/02 06:18

( ゚д゚)ハッ!すみません、完全に書き間違いです!お恥ずかしい… yambejpさんのコードを参考にしてください。 ほかの場所にも複数buttonがあるなら、この処理を実行させるボタンにだけclassを付けておいて、セレクタで指定するといいかもしれませんね。
Kazuma2015

2016/08/02 06:20

なるほど!助かりました! やってみます!
guest

0

JavaScriptがおかしい気がしますね。
$.post のコールバック関数が、$.post の引数の外に書かれていませんか?
あと、最後の小括弧も不要なような。
こうではないでしょうか?

Javascript

1function chgView() { 2 $('#hoge').click(function () { 3 $.post('index.php', { 4 postDM: $('#hoge').val() 5 }, function (data) { 6 $('#hoge').html(data); 7 }); 8 }); 9};

投稿2016/08/02 05:03

root_jp

総合スコア4666

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

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

Kazuma2015

2016/08/02 06:10

たしかに最後の);は、いらなかったですね(笑 ただ、やはりそれでも動かなかったので.tplのボタンのidとnameをそれぞれ名称を変更し参照したらできました!ありがとうございます。
guest

0

POSTするとき、stringの"true"と"false"で送ったらしっかりなると思います。そしてサーバー側で送られた文字列がどちらかを判定し、それに応じたHTMLを返せばいいんじゃないでしょうか?
ただし、その方法では絶対に

php

1$var = eval($_POST['postDM']);

とせずに、

php

1if($_POST['postDM']){ 2$var = true; 3}else{ 4$var = false; 5}

このように分岐してください。

投稿2016/08/02 04:53

stmkza

総合スコア478

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

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

tanat

2016/08/02 05:12

if($_POST['postDM']){ $var = true; }else{ $var = false; } だと、文字列'true','false'どちらでもtrueと判定されてしまいますね。 意図されている回答としては if($_POST['postDM'] === 'true'){ $var = true; }else{ $var = false; } だと思います。
stmkza

2016/08/02 05:16

すいません、コードを間違えていました。
Kazuma2015

2016/08/02 06:12

> 意図されている回答としては if($_POST['postDM'] === 'true'){ $var = true; }else{ $var = false; } tanatさん追記感謝します。 確かにvalueの値をtrue falseのようにしてif文で制御するといいように思えます。 しかし、これではechoをしても$_POSTの内容を引き出すことはできなかったので参考とさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問