2009-06-21 214 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事件。