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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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回答

1287閲覧

php foreach内のクラスの取得方法(jQuery)

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グッド

0クリップ

投稿2019/10/03 05:01

下記のコードのように日報の各項目のあるテーブルを作成しているのですが、

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

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

foreachで各auto_id(各日報毎のid)を一覧で表示しており、likeButtonには$iで
インデックスをつけています。

しかしjQueryの方で取得したlikeButtonにインデックスを貼り付ける方法がわからず、苦戦しております。

また、この表は各auto_idに紐づいて表でauto_id(1)~auto_id(8)まで表示されているのですが、
どのlikeButtonをクリックしてもauto_id(1)にデータが入ってしまいます。

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 $.ajax({ 6 type: 'POST', 7 url: "sales_report_like_done_ajaxPost.php", 8 data: { 9 auto_id : $("input[name=auto_id]").val(), 10 voter_id : $("input[name=voter_id]").val(), 11 submitter_id : $("input[name=submitter_id]").val(), 12 } 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 05:42

foreachの中で毎回DB接続しなければ取得できないような複雑な構成なのでしょうか? 途中で取得不可となった場合にそれ以前の半端なhtmlだけ出力されるマズイ実装も気になります
kpg

2019/10/03 06:37

foreach ($salesdata as $value)で各auto_id(各日報毎のid)を取得し、 sql文での条件にしているため、foreachの中に入れてしまっています。。。
m.ts10806

2019/10/03 06:47

そもそもの$salesdataとやらを取得するときにjoinできそうに思います。
guest

回答1

0

ベストアンサー

HTML

1<input class="likeButton" type="image" src="<?php echo ROOT_PATH; ?>images/logo.jpg" onclick="" style="margin:0; width:24px; height:24px; margin:0; margin-left:3px; border:none;">

js

1let likeButton = $(".likeButton"); 2 3likeButton.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 }); // 結果は使われていないので、「押されたら表示を変える」ならdoneとかで処理。 15});

投稿2019/10/03 05:12

kei344

総合スコア69407

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

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

kpg

2019/10/03 06:34

kei344様 ありがとうございます!ご指摘の内容で修正できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問