如果没有图像上传到数据库,php设置默认图像

时间:2013-12-14 14:10:46

标签: php mysql

我已经设置了我的php视图,在名为'user'的表中选择用户上传的头像,行是'avatar':

<img src="<?=$user->avatar; ?>" class='profile'>

如果没有上传图片,我正在尝试设置默认图片的链接:

<? if(empty($avatar)) $avatar = "/uploads/default.gif"; ?>

我似乎无法让这个工作 - 任何帮助将不胜感激。非常感谢。

我已更新到下面,但它似乎默认为default.gif

<?php if(isset($avatar)): ?>
    <img src="<?=$user->avatar; ?>" class='profile'>

<?php else: ?>
    <img src='/uploads/default.gif'>
    <div id="prompt">Upload your own avatar image</div>
<?php endif; ?>

处理图像上传 - 在用户控制器中:

public function picture() {

        # Sanitize Data Entry
        $_POST = DB::instance(DB_NAME)->sanitize($_POST);

        # Upload Image
        if ($_FILES['avatar']['error'] == 0) {

            $avatar = Upload::upload($_FILES, "/uploads/avatars/", array('jpg', 'jpeg', 'gif', 'png', 'JPG', 'JPEG', 'GIF', 'PNG'), $this->user->user_id);

            if($avatar == 'Invalid file type.') {

                # Error
                Router::redirect('/users/profile/error'); 
            }

            else {

                # Upload Image
                $data = Array('avatar' => $avatar);
                DB::instance(DB_NAME)->update('users', $data, 'WHERE user_id = '.$this->user->user_id);

                # Resize and Save Image
                $imageObj = new Image($_SERVER['DOCUMENT_ROOT'].'/uploads/avatars/'.$avatar);
                $imageObj->resize(150,150,'crop');
                $imageObj->save_image($_SERVER['DOCUMENT_ROOT'].'/uploads/avatars/'.$avatar); 
            }
        }

        else {

            # Error
            Router::redirect("/users/profile/error");  
        }

        # Send to Profile Page
        Router::redirect('/users/profile'); 
    }  

5 个答案:

答案 0 :(得分:1)

你应该准备好你的变量。

<?php
if (empty($user->avatar)){
   $avatar = 'http://example.com/uploads/default.gif';
}
else{
   $avatar = 'http://example.com'.$user->avatar;
}
?>

然后在你的图片中HTML:

<img src="<?php echo avatar; ?>" class='profile'>

答案 1 :(得分:0)

试试这个..

<? if(empty($user->avatar)) $user->avatar = "/uploads/default.gif"; ?>

答案 2 :(得分:0)

您的PHP代码在服务器端生成静态html。假设您的服务器名称是“site.com”,您的头像代码所在的php文件是“index.php”。如果服务器工作正常,您可以在客户端的浏览器中打开“site.com/index.php”。浏览器具有“查看页面源”功能,它显示您生成的html。

之后你必须这样做:

  1. 检查使用img标记的生成页面的html内容。
  2. 找出img src属性值是什么。
  3. 更正您的PHP代码如果值错误。
  4. 如果值正确,但是如果img src指向有效的uri,则无法加载头像。

答案 3 :(得分:0)

试试这个:

<? if(!empty($user->avatar)) { ?>
    <img src="<?=$user->avatar; ?>" class="profile">
<? } else { ?>
    <img src="/uploads/default.gif" class="profile">
    <!--Make sure /uploads/default.gif is correct-->
<? } ?>

请勿使用php短标记,请参阅here

请确保您的图片路径正确。

答案 4 :(得分:0)

这不会帮助您确保图像路径正确,但根据您的调用方式,我假设您使用的是ORM?无论如何,您应该能够调整任何课程$user,以便在课堂上解决此问题。

class User {
    protected $avatar; //changed to protected because now you are calling getAvatar();
    ....
    function getAvatar() {
        if(!isset($this->avatar)) {
            $this->avatar = "[URL to image]";
        }
        return $this->avatar;
    }
    ...
}

虽然我不确定这是个好主意,如果您想要拨打$ user-&gt; avatar,可以将它放在__construct课程中。

class User {
    public $avatar; //still public now..

    function __construct() {
        if(!isset($this->avatar)) {
            $this->avatar = "[URL to image]";
        }
        return $this->avatar;
    }
    ...
}

这样做的好处是HTML中的代码更清晰,如果您需要,可以更少地更改URL。确切地说 - 你只需要改变它一次!