【问题标题】:keep existing image if no new image selected如果没有选择新图像,则保留现有图像
【发布时间】:2019-06-23 07:55:06
【问题描述】:

在事件表单中,如果没有上传新图像,我会尝试保留(更新)现有图像。表格的其余部分保留位置、时间等信息。 但是,当您在点击更新后尝试使用现有图像(在您点击更新之前确实显示)时,现有图像会消失并且不会将其自身包含在更新中。我是业余爱好者。 ..您的帮助表示赞赏。下面是一些代码:

   function eventadd(){

    if($_REQUEST['startampm'] == 'PM') $_REQUEST['starthour'] += 12;
    $datetimescheduled =        $_REQUEST['startyear'].'-'.$_REQUEST['startmonth'].
                        '-'.$_REQUEST['startdate'].' '.$_REQUEST['starthour'] .
                        ':'.$_REQUEST['startminute'].':00';

    $filetmp = $_FILES['file_img']['tmp_name'];
    $filename = $_FILES['file_img']['name'];
    $filetype = $_FILES['file_img']['type'];
    $filepath = "flyers/".$filename;


    move_uploaded_file($filetmp,$filepath);

          $query = 'insert into eventcalendar '.
            '(dateentered,datetimescheduled,title,location,description,img_name,img_path,img_type,soldout,private,free,paydoor,ticketlink,ticketURL) '.
            'values '.'(now(),"'.$datetimescheduled.'","'.stripslashes($_REQUEST['title']).'","'.addslashes($_REQUEST['location']).'","'.stripslashes($_REQUEST['description']).'","'.$filename.'","'.$filepath.'","'.$filetype.'","'.addslashes($_REQUEST['soldout']).'","'.addslashes($_REQUEST['private']).'","'.addslashes($_REQUEST['free']).'","'.addslashes($_REQUEST['paydoor']).'","'.addslashes($_REQUEST['ticketlink']).'","'.addslashes($_REQUEST['ticketURL']).'")';


            $result = mysql_query($query) or die("Query failed : " . mysql_error());

这里是更新表格,图片没有保留的地方:

// update existing event action
if($updateevent) {

if($startampm == 'PM') $starthour += 12;
$datetimescheduled = $startyear.'-'.$startmonth.'-'.$startdate.' '.$starthour .':'.$startminute.':00';

// added to try to fix update image
$filetmp = $_FILES['file_img']['tmp_name'];
$filename = $_FILES['file_img']['name'];
$filetype = $_FILES['file_img']['type'];
$filepath = "flyers/".$filename;
// end fix - also see image name field didnt work

move_uploaded_file($filetmp,$filepath);

$query = 'update eventcalendar set '.
        'datetimescheduled = "'.$datetimescheduled.'",'.
        'title = "'.stripslashes($title).'",'.
        'location = "'.addslashes($location).'",'.
        'description = "'.stripslashes($description).'",'.
        'img_name = "'.$filename.'",'.
        'img_path = "'.$filepath.'",'.
        'img_type = "'.$filetype.'",'.
        'soldout = "'.stripslashes($soldout).'",'.
        'private = "'.stripslashes($private).'",'.
        'free = "'.stripslashes($free).'",'.
        'paydoor = "'.stripslashes($paydoor).'",'.
        'ticketlink = "'.stripslashes($ticketlink).'",'.
        'ticketURL = "'.stripslashes($ticketURL).'"'.
        'where id = '.$id;



$result = mysql_query($query) or die("Query failed : " . mysql_error());

HTML 表单摘录:

<td align="right">IMAGE:</td>
            <td><input name="file_img" type="file"><?php echo $row['img_path'] ?><?php echo '<img src='. $row['img_path'] .' class="img-responsive no-img thumb-img">'; ?><br>

同样,当提交这个没有新图像的 HTML 表单时,现有图像不会自行更新。

我得到的只是:传单/(没有图像名称) 虽然它显示为:&lt;img src='. $row['img_path'] .

但在点击SUBMIT后不包含自身。

【问题讨论】:

  • 是的,这个脚本已经有 10 年的历史了,除了上面的问题之外,它在某个地方找到了它可以工作的地方。而且我确实对自己说,它现在已经过时了。我将修改一个更安全的更现代的脚本。感谢您的确认。 !!

标签: php database image


【解决方案1】:

首先,mysql_query 已经过时,因此,您应该使用 mysqli_query。不建议在查询中传递变量,因为它鼓励 sql 注入 - 建议您使用准备好的语句。

要回答您的问题,您可以在更新前检查是否上传了图片。如果尚未上传图像或从数据库中选择现有图像,解决方案将是忽略图像列。这是一个示例,如果尚未使用准备好的语句上传图像(代码尚未测试),则从数据库中选择现有图像:

$filetmp = $_FILES['file_img']['tmp_name'];
$filename = $_FILES['file_img']['name'];
$filetype = $_FILES['file_img']['type'];
$filepath = "flyers/".$filename;
// end fix - also see image name field didnt work

move_uploaded_file($filetmp,$filepath);

 // if a file has not been uploaded get the flyer from the DB
  if(empty($filename))
    {
      // CHANGE $connection variable to whatever your db connection is called
      $select_image = mysqli_prepare($connection, "SELECT img_name, img_path, img_type FROM eventcalendar WHERE id = ? ");
       mysqli_stmt_bind_param($select_image, 'i', $id);
       mysqli_stmt_execute($select_image);
       mysqli_stmt_bind_result($select_image, $filename, $filepath, $filetype);
       mysqli_stmt_fetch($select_image);
       mysqli_stmt_close($select_image);
     }

  // CHANGE $connection variable to whatever your db connection is called
   $query = mysqli_prepare($connection, "UPDATE eventcalendar SET datetimescheduled = ?, title = ?, location = ?, 
description = ?, img_name = ?, img_path = ?, img_type = ?, soldout = ?, private = ?, 
free = ?, paydoor = ?, ticketlink = ?, ticketURL = ? WHERE id = ? ");

   mysqli_stmt_bind_param($query, 'sssssssssssssi', $datetimescheduled, stripslashes($title), addslashes($location), 
stripslashes($description), $filename, $filepath, $filetype, stripslashes($soldout), stripslashes($private), 
stripslashes($free), stripslashes($paydoor), stripslashes($ticketlink), stripslashes($ticketURL), $id);

    mysqli_stmt_execute($query);
    mysqli_stmt_close($query);

【讨论】:

  • 感谢约翰的帮助。我尝试了上面的添加,得到了 mysqli 行的此错误:警告:mysqli_stmt_execute() 期望参数 1 为 mysqli_stmt, null .. 我很感激.. 有什么方法可以添加适合/匹配过时代码的代码?安全与否?
  • 您是否将 $connection 变量(执行 mysqli_connect 的变量名称)更改为您的名称? mysql_query 也已从 PHP 7 中删除,因此使用它没有任何意义。
  • 我相信是这样,用我的数据库表名“Eventstics”更改了 $connections - 它确实连接希望这就是你的意思。有大约 13 个与 mysqli 相关的错误,我认为是因为代码过时了?也许?
  • 有什么错误?您可以通过在有 mysql_*** 的地方更改为 mysqli_*** 来开始更新代码
  • 警告:mysqli_prepare() 期望参数 1 为 mysqli,第 63 行 /event_admin.php 中给出的资源查询失败:查询为空 - 所以我有 33 个 MySQL 实例 - 所以将它们更改为 mysqli .. ? .. 无法列出所有错误 - 总共 13 个 ..
猜你喜欢
  • 2020-09-13
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 2022-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
相关资源
最近更新 更多