Php 使用图像更新Mysql内容

Php 使用图像更新Mysql内容,php,mysql,file-upload,Php,Mysql,File Upload,我试图在一个真正简单的内容管理系统中更新内容。用户可以登录并修改内容 我遇到的问题是,如果用户登录,更改新闻部分的内容,但不更改图像,则在保存图像文件时,图像文件将被重写,而没有任何内容。如何进行内容更新,但如果用户不更改图像,它会将此部分单独保留,并且不会过度写入图像 我以前尝试过保存旧的图像文件名,并使用它来代替,但出于某种原因,它似乎总是使用新的文件图像名,即使它是空的 我想我需要像这样的东西: if(image is not changed){ $filename = 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 

您的问题是$filename在没有上传图像且未将文件名设置为var时为空。因此,您可以在之前添加一条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';
}

答案非常简单:如果没有新上传的文件,您不应该更改
news\u 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` = ?
';
}
当然,您需要将execute语句移到上面的if block中,并为其提供适当数量的参数。

empty()
应该向上查找该语句。谢谢你的帮助!