我有一个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)");
}
答案 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");
重定向。