更新记录:如何检查新文件是否已上传PHP

时间:2018-09-07 09:54:19

标签: php post sql-update crud

我正在学习PHP,因此,如果我的问题有点愚蠢,请原谅我。

我创建了一个表单来更新数据库中的记录,其中包括更改您的姓名,年龄和图像。当我更新记录而不更改图像时,它将从更新的行中删除图像(base64字符串)。

如何检查图像是否已更改,如果未更改,请:保持当前图像不变或换句话说,不更新该特定字段。这是我的更新PHP脚本:

if( !is_null( $db ) && array_key_exists( 'edit_person', $_POST ) ):
  $pn = filter_var( trim( $_POST['name'] ), FILTER_SANITIZE_STRING );
  $n = filter_var( trim($_POST['age'] ), FILTER_SANITIZE_STRING );
  // check if another image has been uploaded
  $img = filter_var( trim($_POST['img'] ), FILTER_SANITIZE_STRING );
  // if not: don't update img
  $id = filter_var( trim ( $_POST['id'] ), FILTER_SANITIZE_NUMBER_INT );
  update_person( $db, $id, $img, $n, $pn ); 
 endif;

update_person函数:

   function update_person( &$db, $id, $img, $age, $name ){ 
   if( is_null( $db ) ) return '';
   $sql = "
    UPDATE
      xxx
    SET
      xxx.name = :name,
      xxx.age = :age,
      xxx.img = :img
    WHERE
      xxx.id = :id
    ";
  $vraag = $db->prepare( $sql );
  $vraag->bindValue( ':name', $name, PDO::PARAM_STR );
  $vraag->bindValue( ':age', $age, PDO::PARAM_STR );
  $vraag->bindValue( ':img', $img, PDO::PARAM_STR ); 
  $vraag->bindValue( ':id', $id, PDO::PARAM_INT );
  $vraag->execute();
}

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

尝试以下代码。如果未设置 $ img 变量,请不要更新表中的图像列

if( !is_null( $db ) && array_key_exists( 'edit_person', $_POST ) ):
  $pn = filter_var( trim( $_POST['name'] ), FILTER_SANITIZE_STRING );
  $n = filter_var( trim($_POST['age'] ), FILTER_SANITIZE_STRING );
  // check if another image has been uploaded
  $img = filter_var( trim($_POST['img'] ), FILTER_SANITIZE_STRING );
  // if not: don't update img      
  $id = filter_var( trim ( $_POST['id'] ), FILTER_SANITIZE_NUMBER_INT );

  if(!empty($img) && $img != '') :
    update_person( $db, $id, $n, $pn ); 
  else:
    update_person( $db, $id, $img, $n, $pn ); 
  endif;
endif;

希望这会有所帮助。

相关问题