我试图在真实的简单内容管理系统中更新内容。这个想法是用户可以登录并修改内容。
我遇到的问题是,如果用户登录,更改新闻部分中的内容,但不更改图像,则在保存图像文件时没有任何内容。如何更新内容,但如果用户不更改图像,则单独保留此部分并且不会覆盖图像。
我之前尝试保存旧的图像文件名并使用它而不是,但由于某种原因,即使这是空白的,它似乎总是使用新的文件图像名称。
我想我需要类似的东西:
if(image is not changed){
$filename = uploaded image;
}else{
$filename = old file name;
我只是不知道如何做第一个if语句,它似乎总是检测到图像的变化,即使变化是NULL
或某种什么都没有。
我已经编写了以下代码,希望能够理解它。
if (isset($_POST['update'])) {
$e_id = sanitizestring($_POST['edit_id']);
$title = sanitizestring($_POST['newstitle']);
$date = sanitizestring($_POST['newsdate']);
$content = sanitizestring($_POST['newscontent']);;
if ($_FILES['news_img']['error'] == 0) {
move_uploaded_file($_FILES['news_img']['tmp_name'], "uploads/news/".$_FILES['news_img']['name']);
$filename = $_FILES['news_img']['name'];
}
$edit_q ='
UPDATE
`news`
SET
`news_title` = ?,
`news_date` = ?,
`news_article` = ?,
`news_img` =?
WHERE
`news_id` = ?
';
$edit_stmt = $pdo->prepare($edit_q);
if($edit_stmt -> execute(array($title, $date, $content, $link, $linktext, $filename, $e_id))){
$successMsg = 'Edit successful';
}else{
$failMsg = 'Unable to edit as this time';
echo $failMsg;
}// end if edit successful
}// end if update is set
答案 0 :(得分:1)
您的问题是,当您没有图像上传和文件名设置为var时,$ filename为空。所以你可以在之前添加一个if语句:
if($edit_stmt -> execute(array($title, $date, $content, $link, $linktext, $filename, $e_id))){
$successMsg = 'Edit successful';
}else{
$failMsg = 'Unable to edit as this time';
你应该准备一份没有文件名的声明:
if ($empty($filename))
{
if($edit_stmt -> execute(array($title, $date, $content, $link, $linktext, $filename, $e_id))){
$successMsg = 'Edit successful';
}else{
$failMsg = 'Unable to edit as this time';
}
else
{
if($edit_stmt_no_filename -> execute(array($title, $date, $content, $link, $linktext, $e_id))){
$successMsg = 'Edit successful';
}else{
$failMsg = 'Unable to edit as this time';
}
答案 1 :(得分:0)
答案非常简单:如果没有新上传的文件,则不应更改news_img
:
if($filename)
{
$edit_q ='
UPDATE
`news`
SET
`news_title` = ?,
`news_date` = ?,
`news_article` = ?,
`news_img` =?
WHERE
`news_id` = ?
';
}
else
{
$edit_q ='
UPDATE
`news`
SET
`news_title` = ?,
`news_date` = ?,
`news_article` = ?
WHERE
`news_id` = ?
';
}
当然,如果阻止&amp ;;你需要在上面移动执行语句。为它提供合适数量的参数。