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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
basp21 Proでのメールの暗号化...
-
ms_send_mail関数で改行(\\n)す...
-
ループの中で mailItemObj.Disp...
-
HPの更新をしたら自動でメール...
-
UWSCにつきまして
-
$_SERVER{'HTTP_X_UP_SUBNO'}取...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
onedrive にexcelファイルをア...
-
VBSの「MsgBox」について
-
ImageCreate関数が undefined f...
-
.phpと.incファイルの違いはな...
-
.phpファイルが、表示されない
-
Subversionのリポジトリの削除
-
FTPClientで転送結果(OKかFAIL)
-
【file_exists】ファイルが存在...
-
3つ以上の論理積は利用可能なの...
-
phpのエラー
-
ヒアドキュメントの中で演算子...
-
指定した期間の日付生成
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6にてメールを送信する方法
-
コマンドプロンプトで添付ファ...
-
ランダムな文字列を生成しその...
-
Bookを閉じて保存した時のみ実...
-
VBでメールを送る時のSMT...
-
ループの中で mailItemObj.Disp...
-
一定時間毎に同じ動作を繰り返...
-
存在しないメールアドレスかど...
-
mail関数を使用しても送られない。
-
メールアドレスの存在確認はで...
-
AccessのDoCmd.SendObjectについて
-
処理の早いメール送信プログラム
-
<HTML>~入る タグ が無いから ...
-
mb_send_mail関数により送信さ...
-
SendMailがエラーを返さない
-
VB.NETでフリーメールアドレス...
-
HPの更新をしたら自動でメール...
-
WinXP+Apache1.3.29 + php4で、...
-
ヒアドキュメントを利用してメ...
-
powerbuilderのメール機能について
おすすめ情報