2009-06-21 263 views
-1

任何人都可以告訴我爲什麼這段代碼不起作用嗎?爲什麼這個代碼不工作?

<?php $err=1; ?> 

<img src="334234234234234.gif" onError="<?php $err=0; ?>" /> 

<?php echo "<br />" . $err; ?> 

即使圖像存在,仍然執行onerror。爲什麼?

+2

你們爲什麼不投這個票?我記得我在開始使用PHP時犯的錯誤 - 這是一個誠實的錯誤。不要阻止新來者。 – Sampson 2009-06-22 17:21:30

+0

我知道我真的只是新的PHP。誠實的錯誤是什麼意思?請你澄清一下。 – tinkerBOY 2009-06-23 15:54:52

回答

11

HTML無法設置PHP變量。這些只能在服務器上設置。 IMG標記的onError方法無法訪問PHP變量。

頁面生命週期:

  1. (服務器)服務器建立你的網頁(處理變量等)
  2. (服務器 - >客戶端)的服務器發送的頁面到客戶端計算機
  3. (CLIENT)html被加載,javascript運行,並且引發任何錯誤。

請注意,您試圖將項目3與項目1組合在一起,這不能在語義上完成。

做嘗試的唯一方法就是將JavaScript方法附加到該事件,並在onError方法運行時與服務器通信。但是這可能會比你想象的更復雜一些。

4

由於php是服務器端代碼,無論是否發生onError,<?php $err=0; ?>都會執行。您需要使用其他方法或Javascript(或其他客戶端代碼)來執行此操作。

如果你只是想打印出一個變量到屏幕上,如果圖像沒有加載,你可以使用onError="alert('ERROR: Image did not load');"來創建一個彈出框(或者你可以使用javascript來修改頁面上的html) ,但如果您想與服務器通話,則必須使用JavaScript提交表單或使用AJAX方法。

3

您的代碼將總是產生這樣的輸出:

<img src="334234234234234.gif" onError="" /> 
<br />0 

onError JavaScript處理是空的,因爲它裏面的PHP代碼不產生輸出。

是您發佈實際代碼或簡化代碼的代碼?目前尚不清楚你想要完成什麼。

2

如果你正在檢查的文件PHP的存在提供了一個很好的功能,從頁面

http://us.php.net/file_exists

修改例子。

<?php 
$filename = '/path/to/334234234234234.gif'; 

if (file_exists($filename)) { 
    echo "<img src='334234234234234.gif'/>"; 
} else { 
    echo "The file $filename does not exist"; 
} 
?> 

回答你的問題。

即使圖像存在,仍會執行 onerror。爲什麼?

onError從不執行。它似乎執行,因爲您在腳本的末尾顯式輸出$ err變量。如果你使用上面的代碼,你可以實現我認爲是預期的結果而不依賴於JavaScript事件。