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

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

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

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

JavaScript

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

Q&A

解決済

3回答

7492閲覧

いいねボタンのような物をつくりたいですが、

lol

総合スコア85

PHP

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

JavaScript

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

1グッド

3クリップ

投稿2015/02/17 04:53

タイトル通り、いいねボタンのような物を作りたいと思います。

sqlに格納された件数を取得し、
ボタン押下時、カウントアップするような仕組みはわかるのですが、1点特徴があり、キャッシュされてしまう環境です。

そのため、ボタン押下時、jsでカウント値を無理矢理カウント+1をしておりますが、F5でページ更新すると、前の状態に戻ってしまいます。

DBはカウントアップされた値です。

そこで、F5でページ更新しても、カウント数がきちんとでるようにしたいですが。

キャッシュされる側はphpで、JSにてカウントアップしております。

何かアドバイス頂ければと思います。

maessun👍を押しています

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

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

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

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

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

guest

回答3

0

まず条件の整理ですが、以下の様な環境で宜しいでしょうか。

1、PHPからRDB(MySQL等)に「いいね」ボタンが押されたレコードを追加している。
2、ページ表示時、RDB⇒PHP⇒ブラウザにレコード数を渡している。

以上の前提と仮定してお答えします。

まず、「SQLに格納された件数」を取得というのは良くありません。
単純にユーザID、もしくはURLでカウントアップするテーブルを作るべきです。
そこからカウント数を引き出しましょう。
毎回登録レコード数を出すのは、無駄に重くなる上、汎用性が低いです。

次に、「キャッシュされてしまう環境」というのが良くわかりません。
いいねボタンの様に作るのであれば、ajax等でその数値だけ引っ張っていると思いますが、
jQuery等のajaxであれば、「cache : false」とする事でキャッシュを無効化できます。
PHP側では通常この返す値自体がキャッシュされる事は無いと思いますが、何かしらのフレームワークを利用されているという事でしょうか。
その場合は、フレームワークの名前、バージョン、構成を記載されると、正確な答えが得られるかと思います。

最後に、「いいね」ボタン機能自体はキャッシュは基本的に利用するべきではありません。
cookieでカウントアップすれば、見かけ上は正常に動くはずですが、他の人が押したボタンのカウントが反映されなくなります。

以上、ご参考になれば幸いです。

投稿2015/02/17 06:06

utun

総合スコア384

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

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

0

ベストアンサー

文脈を読むに、
・以下のAPIがある
A) DBから「いいね数」を取得する
B) 「いいね数」を+1する
・Bでカウントアップしても、AのAPIの通信結果がブラウザにキャッシュされてしまい、
最新の値にならない
という解釈で良いでしょうか??

解決方法は2種類あり
・GETで「いいね数」を取得する際は、URLに乱数か時間を付与しリクエスト毎に
ユニークなURLになるようにしてください。
http://example.org/api/getLike/1234?rand=987654321
※randの値はMath.random() などを利用するか、getTime()などを用いてください。
・もしくはPOSTで通信をしてください
といった感じでいずれも簡単です。

投稿2015/02/17 05:49

munyaX

総合スコア783

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

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

lol

2015/02/17 05:52

ご回答ありがとうございます。 ご整理して頂いた内容でほぼ一致しております。 雑な質問で、申し訳ございませんでした。 API通信は行っていなく、自作のいいねボタンとなっております。 完全にDBからの取得だけで行いたいのですが。。。
munyaX

2015/02/17 06:03

雑に書くとこういうことですか? ----------------- いいね:<div id="like"><?php echo $like; ?></div>回 <form action="me.php"> <button id="sbmt">いいね</button> </form> <script src="jquery.min.js"></script> <script> $("#sbmt").click(function(){ var like = $("#like").html(); $("#like").html(like+1); }); </script> -----------------
guest

0

キャッシュはどのような環境でキャッシュしていますか。
例えば、memcachedなどではこの部分だけはキャッシュしないというような明示的な指定が出来ます。
キャッシュ機能の仕様よりけりだと考えます。

投稿2015/02/17 05:31

SSaka

総合スコア96

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

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

lol

2015/02/17 05:44

回答ありがとうございます。 memcachedを使わず、純粋にjsだけではできないものでしょうか??
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問