2010-06-10 86 views
-3

我確實有一個自定義php腳本來驗證驗證碼和發送電子郵件。如果php腳本成功發送郵件,則返回「true」。這是通過:在返回php之前執行javascript

if(!$Error){ 
     echo "true"; 
     exit; 
    } 

在返回true之前,我想執行一個jQuery命令,應刷新驗證碼圖像。我不應該這樣做是客戶端,因爲從垃圾郵件發送者的角度來看,這可能是有風險的。

要刷新驗證碼圖像,該命令是:

jQuery('#captcha').attr('src', ('php/captcha/captchaimage_show.php?' + Math.random())); 

我需要從PHP腳本中調用這個命令的「回聲」

PRASHANT

+0

@snowlord他不在乎。他只是在這裏濫用別人的善意。 – 2010-06-10 11:22:10

回答

5

您需要返回任何結果重新考慮你的方法。 PHP和JavaScript運行在不同的計算機上,並通過無狀態的請求/響應協議進行通信。

在JS運行之前,任何PHP腳本都必須全部運行。

在它們之間傳遞數據只能在客戶端發出HTTP請求時發生。

您無法執行任何需要在客戶端以外的地方運行的JavaScript。

+0

但是我需要在郵件發送後刷新驗證碼圖片。我可以通過在發送郵件的jQuery.post命令之後執行上面提到的jQuery語句來完成此操作。我是網絡編程的新手,我想如果我在客戶端這樣做,可以忽略/刪除,然後垃圾郵件發送者可以通過更改電子郵件輸入字段來發送郵件。 – user354051 2010-06-10 08:34:49

+0

@ user354051:您的問題是您允許CAPTCHA被多次使用。無論您更改顯示內容(客戶端還是服務器端),因爲垃圾郵件發送者仍然可以提交舊的CAPTCHA,因此無關緊要。一旦使用它,你就需要刪除它,並且不允許再次使用相同的驗證碼(除非它在將來被隨機生成)。 – DisgruntledGoat 2010-06-10 09:52:59

0

我會說主要問題是通過AJAX發送郵件。您應該定期進行POST,然後使用新的驗證碼重新加載整個頁面。另一個可能的解決方案是通過AJAX發送郵件,然後在AJAX響應中返回「true」。甚至可以在響應中返回新的驗證碼,並使用jQuery進行更改。但我不知道它是否可以與您的驗證碼系統一起使用。

0
file_get_contents("http://your-server/project-path/php/captcha/captchaimage_show.php?".random(1,100)); 

將解決你的問題

CHEARS!

0

關於你的代碼:

if(!$Error){ 

(我猜$錯誤是你的郵件函數的返回類型如果沒有,請忽略這篇文章,讓我知道這樣我就可以把它關閉)。

如果郵件已成功接受投遞,返回TRUE,否則返回FALSE。

重要的是要注意,僅僅因爲郵件被接受發送,它並不意味着郵件將實際到達預期的目的地。

PHP.net:bool mail (string $to , string $subject , string $message)

不要僅依賴,如果你想檢查電子郵件的發送郵件()的返回值。