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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

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

Q&A

解決済

2回答

3549閲覧

Ajaxでの処理が終わった後に その結果をPHPの変数に格納する

kans00229

総合スコア28

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

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

0グッド

0クリップ

投稿2016/10/26 03:26

編集2016/10/26 03:44

【使用環境】
PHPバージョン5.6
phpMyAdminバージョン情報: 4.5.1
XAMPPにてローカル環境

ajaxを利用して、データベースの値を書き換え
その結果をPHPの変数に格納したいと考えています。

目的の動きとしては確認のボタンを押して、ajaxでの処理が終わった後に
その結果から表示を切り替えたいと考えています。

表示するphpでは、$GETでidを指定してデータベースから$dataに配列として
格納しています。ですので、リロードを行えば、データベース自身の値は変更
されているので、表示は変更されます。

できれば、リアルタイムでの表示の切り替えを行いたいと考えています。
jquery側で表示非表示する方法もあると思われますが、最善の方法を
ご教授頂けたら幸いです。

宜しくお願い致します。

//ajax 部分 $(function(){ function(){ $.ajax({ type: 'post', url: 'ajax.php', data: { 'ajax_id': '<?php echo h($data['id']); ?>', }, success: function(data){ alert(data); }); } }); } ); });

ajax.phpには「ajax_id」がPOSTされそのidからflagを書き換えるという動きをさせています。

//ajax.php if(isset($_POST['ajax_id'])){ $data['id'] = h(filter_input(INPUT_POST, 'ajax_id')); try { $pdo->beginTransaction(); $stmt = $pdo->prepare("UPDATE member SET flag = :flag WHERE id = :id ;"); bindInt($stmt, ':id', $data["id"]); bindInt($stmt, ':flag', 1); $stmt ->execute(); $pdo->commit(); } catch (Exception $ex) { exit('データベース登録失敗' . $ex->getMessage()); $pdo->rollBack(); }

結果を受け取る側は、$data["flag"] によって表示の制御をしています。
①$data["flag"] =0の場合は「確認」ボタンを表示
②$data["flag"] =1の場合は「確認済み」と表示

//表示するphp <?php echo h($data["email_1_mbr"]); ?> <?php if ($data["flag"] == 0) { ?> <a href="javascript: void(0)" id="sw"> <button type="button" class="btn btn-danger" id="email_1">確認</button> </a> <?php } else if ($data["flag"] == 1) { ?> <i class="fa fa-check" aria-hidden="true"></i>確認済み <?php }?>

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

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

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

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

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

guest

回答2

0

リロード無しで表示を書き換えるとなるとphpではなくjavascript、jqueryでの操作になります。
phpでは一度ロードしたDOMを動的に書き換え等はできません。

javascript

1 success: function(data){ 2 //alert(data); 3 // ここに確認ボタンを確認済みに書き換えるコードを書く事になると思います。 4 5 }); 6 }

投稿2016/10/26 03:40

hiim

総合スコア1689

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

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

0

ベストアンサー

流れがよく見えないのですが

  • 確認ボタンを押すとajaxが走る
  • ajax_idをpostして該当データのflagが1に更新される

だと思うんですが

  • flagが2の場合「確認」を「確認済み」にする

とすると、flagは1なので、確認済みにはならないと思うんですが
どうなんでしょう?
そもそもflagは何もしないと0で確認すると1なんですよね?
そのへんの仕様が明示されていないのでよくわかりません。

きっと、updateした後に、select flag from member where id=:ajax_id
のようなSQLをはしらせてflagをajaxの戻り値としておけば
sucsess時にそのflagをみてボタンを書き換えることになると思います

sample

ボタンを押して、ボタンのnameをおくってajaxで更新

PHP

1<script> 2$(function(){ 3 $(document).on('click','input[type=button][value=確認]',function(){ 4 var b=$(this).val("確認中").prop('disabled',true); 5 console.log($(this).prop('name')); 6 $.ajax({ 7 url:"test.php", 8 type:"post", 9 data:{ajax_id:$(this).prop('name')}, 10 dataType:"json", 11 success:function(data){ 12 console.log(data["flag"]); 13 if(data["flag"]=="2"){ 14 b.val("確認済").prop('disabled',false); 15 }else if(data["flag"]=="1"){ 16 b.val("確認").prop('disabled',false); 17 }else{ 18 b.val("不明").prop('disabled',false); 19 } 20 }, 21 error:function(data,txt){ 22 b.val("失敗").prop('disabled',false); 23 }, 24 }); 25 }); 26}); 27</script> 28xxx1001:<input type="button" name="xxx1001" value="確認"><br> 29xxx1002:<input type="button" name="xxx1002" value="確認"><br> 30xxx1003:<input type="button" name="xxx1003" value="確認"><br> 31

test.php
SQL更新についてはおいておいてとりあえず戻り値が違うものを返す

PHP

1<?PHP 2sleep(3); 3$id=filter_input(INPUT_POST,"ajax_id"); 4if($id=="xxx1001"){ 5print json_encode(["flag"=>2]); 6}elseif($id=="xxx1002"){ 7print json_encode(["flag"=>1]); 8}else{ 9print json_encode(["flag"=>0]); 10} 11?>

投稿2016/10/26 03:39

編集2016/10/26 05:54
yambejp

総合スコア114585

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

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

yambejp

2016/10/26 05:55

一応こういうことをやりたいんじゃないのかなというsampleつけときます。
kans00229

2016/10/29 13:00

yambejp様 ありがとうございます。 サンプルまでのせて頂きありがとうござました。 想定していた動き近いものができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問