php
  • html
  • 2011-04-17 64 views 0 likes 
    0

    我有這樣的代碼:爲什麼會提交此行爲?

    <? 
        if(isset($_POST['wallib']) { 
          $insert=mysql_query("INSERT INTO wall (message) VALUES ('".mysql_real_escape_string($_POST['wallib'])."')",$mydb); 
        } 
    ?> 
    
    <form action='index.php?explore=home' method='post' name='wallHome'> 
        <input id="wallib" name="wallib" type="text" class="inputWall1" /> 
        <a href="javascript:document.wallHome.submit();">Send</a> 
    </form> 
    

    如果我迅速按下發送(無需等待響應,只是很快)我看到該消息被插入只有1次上的數據庫。

    但是,如果我添加(例如)功能sleep(2);在PHP腳本,我還是趕緊點擊發送,它在數據庫中增加了爲每次點擊的字符串。

    所以我不是那麼快在第一個案例?是的,一個愚蠢的問題......只是好奇...... :)

    +1

    只需建議幾句話,請使用''而不是''。 :) – Shaz 2011-04-17 01:19:26

    回答

    1

    很難說。這可能是一些競爭條件,並可能取決於瀏覽器的行爲。例如,可能是第二次點擊(在瀏覽器內部)同時它正在接收/處理響應並準備渲染輸出,並且此時它使任何用戶輸入無效。

    根據您使用的瀏覽器,您可以使用開發工具和插件來調試所有瀏覽器 - 服務器對話。查看Web服務器日誌以檢查您的兩次點擊觸發了多少請求也很有用。

    +0

    這就是爲什麼我想到一個用戶,當一個頁面沒有呈現(可能是一個緩慢的連接)時點擊(例如)2-3次按鈕:在這種情況下,他發送2-3請求到服務器? – markzzz 2011-04-17 01:21:18

    +2

    通常情況下,如果響應速度較慢,如果用戶再次單擊,則會發送另一個http請求(並且第一個響應會丟失)。這是一個討厭和衆所周知的問題,尋找「雙提交」。例如http://stackoverflow.com/questions/2635652/how-can-i-prevent-a-double-submit-with-jquery-or-javascript或http://stackoverflow.com/questions/442678/preventing-雙HTTP-POST – leonbloy 2011-04-17 01:25:48

    相關問題