使用图像更新Mysql内容

时间:2014-09-28 09:37:09

标签: php mysql file-upload

我试图在真实的简单内容管理系统中更新内容。这个想法是用户可以登录并修改内容。

我遇到的问题是,如果用户登录,更改新闻部分中的内容,但不更改图像,则在保存图像文件时没有任何内容。如何更新内容,但如果用户不更改图像,则单独保留此部分并且不会覆盖图像。

我之前尝试保存旧的图像文件名并使用它而不是,但由于某种原因,即使这是空白的,它似乎总是使用新的文件图像名称。

我想我需要类似的东西:

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 

2 个答案:

答案 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 ;;你需要在上面移动执行语句。为它提供合适数量的参数。