🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

jQuery

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

Q&A

1回答

1549閲覧

foreach内での非同期通信での表示結果に関して

kpg

総合スコア23

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

jQuery

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

0グッド

1クリップ

投稿2019/10/03 07:22

下記のコードのように日報の各項目のあるテーブルを作成しておりまして、

foreachで各auto_id(各日報毎のid)をtableで一覧で表示しております。

そこでjQueryでlikeButtonというクラスをクリックしたらajaxで非同期で

いいねの数が表示されるという実装を行なっています。

ここまでたくさん質問させて頂きなんとかあと一歩のところまで来ているのですが、

jQueryで.load('sales_reportSP.php .like_result');とした時に、

表示される数字がauto_idの1~8の分まですべて表示されてしまいます。
リロードすると元に戻りDBにもちゃんと登録されています。

sqlのCOUNTで表示させている部分がおかしいのかと思っているのですがわかりません。

どなたかご教示いただけますと幸いです。

php

1<table> 2 <tr> 3 <th>担当</th> 4 <th>訪問日付<br>顧客名</th> 5 <th>目的<br>結果</th> 6 <th>内容</th> 7 </tr> 8 <?php if(!empty($salesdata) === true) { 9 $i = 0; 10 foreach ($salesdata as $value) { ?> 11 <tr> 12 <form action="../history/sales_report_commentSP.php" method="post"> 13 <td><?php echo $value['first_name']; ?></td> 14 <td> 15 <?php 16 $salesDate = explode("-", $value['sales_date']); 17 echo $salesDate[1] . '/' . $salesDate[2] . '<br><br>'; ?> 18 <p class="shop_url"> 19 <a href="<?php echo ROOT_PATH; ?>customer/list/customer_dispSP.php?salesClient_id=<?php echo $value['salesClient_id'] ?>" class="shop_url"><?php echo $value['shop_name']; ?></a> 20 </p> 21 </td> 22 <td> 23 <?php echo $value['progress_purpose_name'] . '<br><span>↓<span><br>' . $value['progress_name']; ?> 24 </td> 25 <td> 26 <p><?php echo $value['sales_history']; ?></p> 27 <input type="submit" class="comment far" value="&#xf086;"> 28 <input type="hidden" name="auto_id" value="<?php echo $value['auto_id']; ?>"> 29 <input type="hidden" name="driver_id" value="<?php echo $value['driver_id']; ?>"> 30 <input type="hidden" name="first_name" value="<?php echo $value['first_name']; ?>"> 31 <input type="hidden" name="last_name" value="<?php echo $value['last_name']; ?>"> 32 <input type="hidden" name="sales_date" value="<?php echo $value['sales_date']; ?>"> 33 <input type="hidden" name="shop_name" value="<?php echo $value['shop_name']; ?>"> 34 <input type="hidden" name="progress_purpose_name" value="<?php echo $value['progress_purpose_name']; ?>"> 35 <input type="hidden" name="progress_name" value="<?php echo $value['progress_name']; ?>"> 36 <input type="hidden" name="sales_history" value="<?php echo $value['sales_history']; ?>"> 37 </form> 38 <!-- いいねアイコン --> 39 <div class="icon_cow" style="margin:0;"> 40 <input class="likeButton<?php echo $i ?>" type="image" src="<?php echo ROOT_PATH; ?>images/logo.jpg" onclick="" 41 style="margin:0; width:24px; height:24px; margin:0; margin-left:3px; border:none;"> 42 <input type="hidden" name="auto_id" value="<?php echo $value['auto_id']; ?>"> 43 <?php foreach($driversId as $id) ?> 44 <input type="hidden" name="voter_id" value="<?php echo $id; ?>"> 45 <input type="hidden" name="submitter_id" value="<?php echo $value['driver_id']; ?>"> 46 <i class="far fa-thumbs-up"></i> 47 <?php 48 try { 49 $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, $options); 50 $dbh->query('SET NAMES utf8'); 51 52 // m_like_masterからauto_idに紐づいたlike_idの数をカウントし取得。 AS counted を引数にしています 53 $sql = "SELECT COUNT(like_id) AS counted FROM m_like_master 54 WHERE auto_id= " . $value['auto_id']; 55 56 $stmt = $dbh->prepare($sql); 57 $stmt->execute(); 58 $countResult = $stmt->fetch(PDO::FETCH_ASSOC); 59 $current_like_count = $countResult['counted']; 60 61 $dbh = null; 62 63 } catch (PDOException $e) { 64 exit('顧客データベース接続失敗。'.$e->getMessage()); 65 } ?> 66 <!-- いいね数の表示 --> 67 <p class="like_result"><?php echo $current_like_count; ?></p> 68 <input type="hidden" name="auto_id" value="<?php echo $value['auto_id']; ?>"> 69 <input class="like_num" type="submit"> 70 </div> 71 </td> 72 </tr> 73 <?php $i++; } ?> 74</table>

jQueryは同一のhtml内、body一番下に記載しています。

jQuery

1 let likeButton = $(".likeButton<?php echo $i; ?>"); 2 3 likeButton.on('click', function(e){ 4 console.log(e) 5 let $_parent = $( this ).closest( '.icon_cow' ); 6 $.ajax({ 7 type: 'POST', 8 url: "sales_report_like_done_ajaxPost.php", 9 data: { 10 auto_id : $_parent.find("input[name=auto_id]").val(), 11 voter_id : $_parent.find("input[name=voter_id]").val(), 12 submitter_id : $_parent.find("input[name=submitter_id]").val(), } 13 }); 14 }); 15 16 likeButton.on('click', function(){ 17 $('.like_result').load('sales_reportSP.php .like_result'); 18 }); 19

補足情報(FW/ツールのバージョンなど)

・バージョン
PHP 7.1.23
mysql 5.6.43

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

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

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

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

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

m.ts10806

2019/10/03 07:46

>('sales_reportSP.php .like_result'); そもそもこの書き方はどこの何を参考にしたのでしょうか?引数ひとつしか渡していませんが
t_obara

2019/10/03 07:49

処理される順番が把握できていませんが、期待通りの順番で処理されていることを確認されていますか?
kpg

2019/10/03 07:57

m.ts10806様 こちらのサイトを参考にしました。 https://www.sejuku.net/blog/42555 <body> <div></div> <script> $('div').load('other.html .list:first'); </script> </body> 上記の表記がありましたので参考にしました。 t_obara様 処理の順番は期待通りされていると思います。 DBにデータが入力されていて、非同期で表示はされています。
m.ts10806

2019/10/03 08:13

侍エンジニアブログは誤記も多く過去に大問題があったのでなるべく避けたほうが良いです。無駄にSEOに強いので上位に上がってきているだけで記事の質は決して良いとは言えませんが(私は回答では使ってません) なるべく公式か、マニュアルの日本語訳サイトを確認しましょう。 https://api.jquery.com/load/ http://js.studio-kingdom.com/jquery/ajax/load http://www.jquerystudy.info/reference/ajax/load.html
kpg

2019/10/03 09:27

m.ts10806様 そうなんですね。知らなかったです。ありがとうございます。 参考にさせて頂きます。
x_x

2019/10/04 01:28

sales_reportSP.php に GETリクエストを投げると .like_result が一つだけ返ってくるのでしょうか?
kpg

2019/10/04 03:32

x_x様 .like_resultがauto_id分(8つ)返って来てしまいます。
x_x

2019/10/04 04:06

そもそもどうしたいのでしょう? .load() では auto_id などの情報は渡してないので8つ返ってきているということですか? jQuery のコードが動いているのが sales_reportSP.php 自身だったりします?
kpg

2019/10/04 06:32

x_x様 その通りです。 .load() で auto_id などの情報は渡してないので8つ返ってきていますが私方がわからない状態です。 jQuery のコードが動いているのが sales_reportSP.php です。
annderber

2019/10/11 02:57

$('.like_result').load('sales_reportSP.php?auto_id=1 .like_result'); のようにクエリストリングで渡せばいいのではないでしょうか。 後ajax処理では何の処理をしているのでしょうか。 ajax処理とload処理は別々の処理?
guest

回答1

0

とりあえず

javascript

1likeButton.on('click', function(e){ 2 let $_parent = $( this ).closest( '.icon_cow' ); 3 var data={ 4 auto_id : $_parent.find("input[name=auto_id]").val(), 5 voter_id : $_parent.find("input[name=voter_id]").val(), 6 submitter_id : $_parent.find("input[name=submitter_id]").val(), } 7 }; 8 $.ajax({ 9 type: 'POST', 10 url: "sales_report_like_done_ajaxPost.php", 11 data: data, 12 }); 13console.log(data); 14});

的な処理でdataを検証してみるとか
ただなぜ「likeButton.on('click'」が2箇所にわけて設定しているかわからないし
ajaxで投げるのとと別にloadしてるのかもわからないですね

投稿2019/10/03 07:45

yambejp

総合スコア116661

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

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

kpg

2019/10/03 08:01

yambejp様 ご指摘いただいた内容でconsole.logをしたら、 sales_reportSP.php:666 Uncaught ReferenceError: data is not defined at HTMLInputElement.<anonymous> (sales_reportSP.php:666) at HTMLInputElement.dispatch (jquery.min.js:2) at HTMLInputElement.y.handle (jquery.min.js:2) と、表示されました。 「likeButton.on('click'」件はlikeButtonがclickされたら非同期でDBに値が入り、表示されるとイメージしております。
yambejp

2019/10/04 01:00

同じスコープ内で宣言したdata変数が参照できないのは何か 根本的な勘違いをしているかtypoだと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問