如果图像存在,则显示该图像,否则显示新选择的上载

时间:2014-02-11 19:55:04

标签: php

我有一个post.php,你填写帖子信息,post_display.php,它显然显示帖子,post_edit.php,你可以编辑帖子。 post.php和post_edit.php非常相似,因为编辑只是获取数据库中的所有信息,并在进行任何更改时对其进行更新。

在post_edit.php文件中 - 在表单中,我有一个名为' cover'的上传按钮。和隐藏的输入称为“'封面”。

<?php
    if (file_exists($cover) === true){
      echo '<img src="'. $cover . '" alt="'. $title .'" id="cover">';
    }else{
      echo '<img src="images/blank_cover.jpg" alt="'. $title .'" id="cover">';
        }
 ?> 

    <div class="ad_upload_btn">
    <input type="file" name="cover" onchange="readURL(this);"><div class="ad_upload_btn_text">Change Cover Image</div>
    <input type="hidden" name="cover" value="<?php echo $cover; ?>">
    </div>  

然后在提交表单时,我有这个检查

if (!empty($_FILES['cover'])){
    if ($_FILES['cover']['size'] == 0) {        
            $file_path = $_POST['cover'];
        }

    }       
    else{
        $allowed = array('jpg', 'jpeg', 'gif', 'png');
        $file_name = $_FILES['cover']['name'];
        $file_size = $_FILES['cover']['size'];
        $file_extn = strtolower(end(explode('.', $file_name)));
        $file_temp = $_FILES['cover']['tmp_name'];
        if(in_array($file_extn, $allowed) === true){            
            $file_path = 'images/cover/' . substr(md5(time()), 0, 10) . '.' . $file_extn;
            move_uploaded_file($file_temp, $file_path);
        }else{
            $errors[] = 'Incorrect file type. Only allowed: ' . implode(', ', $allowed) . '';                                       
        }
    }
}

在我的数据库表中,我有一个cover行,它采用图像的路径,当我回显它时,我只需将image / cover / imagename.jpg检索到我的代码中。

现在,如果我上传图片,它将正常工作。但是,如果我没有上传任何图像,它将删除那里的旧图像并替换它。如果没有选择上传新文件,我怎么能告诉它显示旧的存储图像而不是删除所有内容?

更新: 插入代码:

if (empty($_POST) === false && empty($errors) === true){
                $update_ad = array(
                'title'         => $_POST['title'], 
                'price'         => $_POST['price'], 
                'description'   => $_POST['description'],
                'category_id'   => $_POST['category_id'],
                'cover'         => mysql_real_escape_string($file_path)
                );
                edit_ad($id, $update_ad);                       
                header('Location: post_display.php?id=' . $id);
                exit();  
            } 

function create_ad($create_data){
array_walk($create_data, 'array_sanitize');

$fields = '`' . implode('`, `', array_keys($create_data)) . '`';
$data = '\'' . implode('\', \'', $create_data) . '\'';

mysql_query("INSERT INTO `posts` ($fields) VALUES ($data)");
}

2 个答案:

答案 0 :(得分:0)

  

现在,如果我上传图片,它将正常工作。但是,如果我没有上传任何图像,它将删除那里的旧图像并替换它。

基于此声明,这是数据库应该处理的内容。听起来你的表在该字段中接受NULL。如果在插入之前运行检查以查看文件路径是否为null,则可以告诉它使用旧文件路径。

实施例

    'cover'         => " CASE WHEN (mysql_real_escape_string($file_path) != '' AND mysql_real_escape_string($file_path) IS NOT NULL) 
                         THEN mysql_real_escape_string($file_path)
                          ELSE
                              (SELECT cover
                                 FROM (SELECT cover
                                         FROM posts
                                        WHERE category_id = $_POST['category_id']) AS temp)
                          END"

这是我对它的更具体的狂野刺痛。我假设category_id是唯一的,如果不使用任何列。 即使这不起作用,这个概念就在这里。

这是我对它的更具体的狂野刺痛。我假设category_id是唯一的,如果不使用任何列。 即使这不起作用,这个概念就在这里。

答案 1 :(得分:0)

要回答的评论:(关闭问题)

而不是:

if(!empty($_FILES['cover'])){ if ($_FILES['cover']['size'] == 0) 

为什么不试试

if(!empty($_FILES['cover']) && ($_FILES['cover']['size'] == 0)) else{die();} 

或将&&替换为||,然后使用else

die();有可用于显示消息的选项(如果需要)。即:die("Sorry no Love");或者如果你想回声,你需要在之后添加exit();

即:else{echo "Sorry"; exit();}类型的东西。

您还可以使用header("Location: sorry.php");重定向。