сохранить существующее изображение, если новое изображение не выбрано - PullRequest
0 голосов
/ 23 июня 2019

В форме «События» я пытаюсь сохранить (обновить) существующее изображение, если оно не загружено.Остальная часть формы сохраняет информацию, такую ​​как местоположение, время и т. Д. Но при попытке использовать существующее изображение (которое отображается перед нажатием обновления), после того как вы нажали обновление, существующее изображение исчезает и не включается в обновление.Я любитель.. ваша помощь приветствуется.ниже приведены некоторые коды:

   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-формы без нового изображения существующее изображение не обновляется само с собой.

Все, что я получаю: FLYERS / (НЕТ ИМЯ ИЗОБРАЖЕНИЯ), хотя отображается с: <img src='. $row['img_path'] .

но не включает себя после нажатия SUBMIT.

1 Ответ

0 голосов
/ 23 июня 2019

Во-первых, 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...