【问题标题】:HTML loaded image goes away after refresh刷新后 HTML 加载的图像消失
【发布时间】:2015-02-25 04:16:10
【问题描述】:

所以这是我从未经历过的奇怪现象,因为我在图片上传时有一个 HTML 表单(正是 W3 上的那个)。单击时它可以正常工作,并将用户个人资料图片推送到文件夹中,同时将文件名保存在数据库中。在上传的下方,我有一个小图片标签,可以显示上传的个人资料图片。最终目标是在会话存在时不断地在页面上显示该个人资料图片。上传后,它工作得很好,并且出现了个人资料图片。一次刷新后,找不到图像,alt="blank" 接管。该位置仍然保留在数据库中,所以我认为这不是问题。有错误吗?我需要使用 JS onload 吗?图像标签是否只工作一次?请帮助并感谢您花时间阅读本文。

PHP:

echo '<img src="'.$loaded_profile_picture.'"id="HOMEPROFILE" alt="blank" style="width:128px;height:128px">';
//$loaded_profile_picture has the value uploads/photo.jpg

类.php:

    public function addProfilePicture(){
        include_once "conn.php";
        $sql=$dbh->prepare("UPDATE users SET UserProfilePicture=:UserProfilePicture WHERE UserName=:UserName;");
        $sql->execute(array(
            'UserProfilePicture'=>$this->getUserProfilePicture(),
            'UserName'=>$_SESSION['UserName'],
            ));
    }

图片上传(可能是罪魁祸首):

        if($uploadsuccess&&move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $target_file)){
                    echo " The file ".basename($_FILES['fileToUpload']['name'])." has been uploaded.";
                    $user->setUserProfilePicture($target_file);
                    $user->addProfilePicture();
                    if($user->getUserProfilePicture()!=NULL){
                        echo '<img src="'.$target_file. '" alt="nom">'; 
                    }
        }

编辑: 虽然许多用户都有类似的问题(即Image display with <img src=""> not working),但我尝试查看 localhost:8888/xampp/LocalPost/pages/uploads/photos.jpg 并显示得很好。我还没有运气更改了 Windows 7 上的文件权限。感谢您的辛勤工作,我会继续寻找。

编辑: 我通过使用 $_SESSION['UserProfilePicture'] 解决了这个问题,它在刷新后仍然存在。这并不能解决问题。我仍然非常希望有人能帮我找出问题所在,因为稍后我想显示其他人的个人资料图片,这显然无法使用会话变量。

【问题讨论】:

  • 我假设图片存在于 uploads/photo.jpg 中?
  • 没错,或者至少用户提交 photo.jpg 并且网站将其放入文件夹 uploads 中。提交后,我会在上传文件夹和数据库中永久看到图像。 uploads/photo.jpg 仍然存在的事实让我感到困惑,为什么 alt="blank" 会在刷新时出现。就像第二次忽略它一样。
  • 会不会是权限问题?脚本刷新后没有读取权限
  • 嗯,这可能是我从未听说过的。你知道如何解决它或任何资源来帮助理解这一点吗?谢谢
  • 可以用FTP客户端查看文件的权限吗?并将其与其他权限进行比较。我不确定我是否抓住了稻草……这很奇怪!

标签: php html image


【解决方案1】:

首先是你缺少的 } 和你的脚本的结尾

    if($uploadsuccess && move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $target_file)){
                    echo " The file ".basename($_FILES['fileToUpload']['name'])." has been uploaded.";
                    $user->setUserProfilePicture($target_file);
                    $user->addProfilePicture();
                    if($user->getUserProfilePicture()!=NULL){
                        echo '<img src="'.$target_file. '" alt="nom">'; 
                    }
}

【讨论】:

  • 哎呀,很抱歉我忘了把它复制过来,我只剪掉了相关的 sn-ps。是的,我的文件中有更深的 } 抱歉,但感谢您抽出宝贵时间。
【解决方案2】:

检查一下刷新页面后你会得到$loaded_profile_picture变量的值吗?

如果你得到了$loaded_profile_picture 变量的值,那么检查它是否与你之前的路径相同?

【讨论】:

  • 嗯,我接受了 echo $loaded_profile_picture 的建议,在第一页加载时,它完美地打印了 uploads/photo.jpg。然后当我刷新时,回声消失了;问题一定出在变量上。我的声明看起来像 $loaded_profile_picture=$user->getUserProfilePicture();
  • 它仍在数据库中...至于我放置的会话 if(!isset($_SESSION)){ session_start(); } 这可能无关紧要,但 jic
  • 这意味着您在刷新页面时没有获得 $loaded_profile_picture 的值。所以首先尝试获取 $loaded_profile_picture 变量的值。
  • 所以你说问题出在 $loaded_profile_picture=$user->getUserProfilePicture(); ?所以有趣的是在我添加的那一行下面 $loaded_profile_picture=14;回声 $loaded_profile_picture;它打印出 14。但是当被拿走时,没有任何回声。我认为你是对的,接下来我该怎么做?请回答非常感谢
  • 好的,我试过 echo $user->getProfilePicture();并且在刷新时,它消除了到底发生了什么,就像对象 $user 不存在一样。刷新会杀死对象吗?
猜你喜欢
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 2021-07-22
  • 2023-01-01
  • 2021-06-17
  • 2014-11-10
  • 1970-01-01
相关资源
最近更新 更多