PHPでfacebookアプリの作成に挑戦しています。
ウォールへ投稿すると、何度かに1回の割合で二重送信となり、後から送信された空のコメントが優先されてウォールに投稿されてしまいます。
javascriptによりボタンの二重押しは回避しているのですが、なぜかたまに2回送信されてしまっているようです。
特にスマートフォン(iPhone)からの投稿時に多いです。
かと言って毎回そうなるわけでもない為、なにが原因なのかさっぱりわかりません。
どういった原因が考えられますでしょうか?
スマートフォン特有のそういった現象とかあるんでしょうか・・・
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
再度、確認させてください。
Facebook API使ってるって事でいいでしょうか?
あと、もし判明していたらでいいんですが、どっちに原因があるかは確認してますか?
端末から送られてきている情報が二重なのか?送られてきている情報は実は一個でPHP側での処理を誤っているか?
ま、概ね前者だとは思いますが、後者の可能性もなくはないかなと思ったので一応聞いてみました。
JavaScript側で空白を送信しない方法は、以下ような感じのものをアレンジしてみてください。
他にも<form>のsubmit時に入力チェックをするようなコードは いっぱいネットに転がってますので、自分にあったものを探してみてください。
http://www.1kara.net/js/form.php
PHP側で制御できるのであれば、他の方の回答のものでOKです。
> スマートフォン特有のそういった現象とかあるんでしょうか・・・
正直、iPhoneは持っていないので、iPhoneのsafariの挙動がどのようなものかは分かりません。
本当に一回しかタップしてなくて、ブラウザが余分に空白も送信しているんだとしたら、バグとしか言いようがありません。
過敏なタッチパネルだと結構二重送信とか起こりやすい気もしますが、ブラウザ側でそれを制御していないとも思えませんので、よく分かりません。
俺が使ってるAndroidは静電なのに結構しっかり押さないとブラウザはsubmitしてくれません。
問題が解決しました。
と言っても原因はわかっていません。
結局submitボタンから文字リンクに変更して、javascriptでクリックの回数をカウントして2回目以降はリンク先へ飛ばないように設定でうまく作動するようになりました。
私の力が足りず、ボタンのままでの解決とはいきませんでしたが、大変勉強になりました。
そして、ひとつめの解答に続いて親身になってお返事くださいまして、誠にありがとうございました。
No.3
- 回答日時:
>後から送信された空のコメントが優先
が重要であれば、空で送られてきたデータは更新・登録しない分岐をいれるだけでよくないですか?
お返事ありがとうございます。
自分なりにやってはみたのですが、どうしてもうまく行きませんでした。
きっと私が状況を正確に読めていないんでしょうね。
ありがとうございました。
No.2
- 回答日時:
原因はよくわかりませんが、JavaScriptに加えてPHPでの制御を加えれば完璧です。
セッションに以前送信したときのタイムスタンプを記録しておき、「2秒以上経過してなければ連続送信とみなす」などの判定をすればいいと思います。
if ($_SERVER['REQUEST_TIME']-$_SESSION['prev_submit']<2) die('連続送信は出来ません');
とか。
お返事ありがとうございます。
私はなぜかセッションが使いこなせない為、ちょっと難しくて実装は出来ませんでしたが、考え方は勉強になりました。
がんばってセッションの勉強も再チャレンジしてみようと思います。
ありがとうございました。
No.1
- 回答日時:
とりあえず、どの方法で二重送信を防止しているか補足お願いします。
submitをdisableにする方法?それとも、フラグで制御する方法?それとはまた別でしょうか?
同じ内容が送信されるのでなく、二度目に送ったほうが空白というので、正直 原因が分かりません。
一回送信後、画面遷移してから 再度 空白を送信してるのでしょうか?
Ajaxとか使ってますか?
とか、ここまで書いていて気がついたのですが、原因の究明が目的でないなら、対処方法としてはJavaScriptで空白チェックしてから送信すればいいのでは?とか思いました。
とりあえず、思いついたこと書いてるので 的外れかもしれませんが。
この回答への補足
お返事ありがとうございます。
// submitボタン無効化処理
function DisableButton(b)
{
b.disabled = true;
b.value = '投稿中';
b.form.submit();
上記の方法です。
当方初心者ですので、Ajaxは使っていないです。
ボタンが2回押されてるのではなく、一度送信された情報の後に、続けて空の情報が送られる(時がある)という状況です。
空白チェックの方法で改善できるでしょうか。
原因究明できなくても、改善されれば問題ありませんので、なんでも試してみたいと思っています!
空白チェックの方法をアドバイスして頂ければ助かります。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ここで言うトークンの意味を教えてください。 3 2022/08/24 03:03
- 友達・仲間 至急です。LINEでの謝罪について、下記の【状況】を参考に、下記の【LINEで送る文章】に対して、下 1 2023/06/08 20:48
- iPhone(アイフォーン) Phoneでメール送信できていないのは? 1 2023/07/11 20:02
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- 教えて!goo 投稿中にエラーが発生して、質問投稿できません。 この投稿はできているのに、本来送りたかった質問が投稿 5 2023/05/07 12:42
- 出会い・合コン 話したくないと思われているのか 2 2022/09/09 10:48
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- 教えて!goo Bing共有リンクへの回答をしたところブロックされました。 2 2023/08/27 17:45
- Facebook Facebookグループに参加できません。 1 2023/05/01 17:20
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワードプレス、Contact Form 7...
-
メールアドレスの存在確認はで...
-
問い合わせ完了ページでの二重...
-
javamailで220の応答が遅い
-
VBでメールを送る時のSMT...
-
PHPでメール送信する際の送信数...
-
VB6にてメールを送信する方法
-
SendMailがエラーを返さない
-
処理の早いメール送信プログラム
-
HPのフォームから受信したメ...
-
タイマー機能を使って指定時間...
-
VB.NET、ASPでメールの自動返信...
-
mail関数を使うと遅いので
-
【エクセルVBA】メール送信前に...
-
ブラウザの更新ボタン
-
【追加】ファイルを閉じてダイ...
-
コマンドプロンプトで添付ファ...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
リンク先を隠す方法はないでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ワードプレス、Contact Form 7...
-
コマンドプロンプトで添付ファ...
-
存在しないメールアドレスかど...
-
VB6にてメールを送信する方法
-
ヒアドキュメントを利用してメ...
-
メールアドレスの存在確認はで...
-
Bookを閉じて保存した時のみ実...
-
AccessのDoCmd.SendObjectについて
-
submitボタンの二重送信について
-
リファラが取得できない?
-
HPの更新をしたら自動でメール...
-
javamailで220の応答が遅い
-
Q)PHPでメール送信について
-
ループの中で mailItemObj.Disp...
-
mail関数を使うと遅いので
-
ロリポップと、phpで自動の返信...
-
<HTML>~入る タグ が無いから ...
-
phpメールフォームから送信され...
-
ランダムな文字列を生成しその...
-
VB.NETでフリーメールアドレス...
おすすめ情報