
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Bookを閉じて保存した時のみ実...
-
JavaMailでエラーメールの通知
-
VB6にてメールを送信する方法
-
SendMailがエラーを返さない
-
phpのheader("Location:#pos")...
-
PHPのif文でその処理を途中で抜...
-
.htaccessにphp_valueが使用できな
-
mysql→EUC-JP、php→UTF-8の時の...
-
2つの画像ファイルが異なるファ...
-
require_once()でファイルが読...
-
phpの中でphpを書けないか
-
FTPコマンドでディレクトリごと...
-
MkDir関数
-
【file_exists】ファイルが存在...
-
sqlで日付が一番古いデータの月...
-
フォームで戻った際に入力済み...
-
<A href ~ と一緒に値を渡すには
-
テレメールとは?
-
「クラス関数」「メンバ関数」...
-
Makefile.inとMakefile.am
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループの中で mailItemObj.Disp...
-
SoftBankにメール送信できない
-
【エクセルVBA】メール送信前に...
-
basp21 Proでのメールの暗号化...
-
VBでメールを送る時のSMT...
-
コマンドプロンプトで添付ファ...
-
空メール送信~メールアドレス取得
-
BASP21を使って
-
存在しないメールアドレスかど...
-
SendMailがエラーを返さない
-
HPの更新をしたら自動でメール...
-
VB.NETでフリーメールアドレス...
-
Bookを閉じて保存した時のみ実...
-
一定時間毎に同じ動作を繰り返...
-
phpでメールを送信
-
PHPで空メールの自動返信を作り...
-
$_SERVER{'HTTP_X_UP_SUBNO'}取...
-
javamailで220の応答が遅い
-
PHPでメール送信する際の送信数...
-
UWSCにつきまして
おすすめ情報