add.php (Когда пользователь нажимает добавить фотографию)
<div class="col-lg-12"> <div class="form-group" id="image"> <label>Auction Image</label> <div action="uploadImages.php" class="dropzone" id="uploadImageForm"></div> <span class="help-block" id="image-error"></span> </div> </div> <script> $(function () { Dropzone.options.uploadImageForm = false; Dropzone.options.uploadImageForm = { paramName: "file", maxFilesize: 1, acceptedFiles: 'image/*', maxFiles: 5, dictDefaultMessage: '<img src="images/icon_images.svg" width="100"/><br/><br/>Drop auction image here', addRemoveLinks: true, removedfile: function(file) { var name = file.name; $.ajax({ type: 'POST', url: 'delete.php', data: "id="+name, dataType: 'html' }); var _ref; return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0; } }; </script>
UploadImages.php
<?php session_start(); require 'config/database.php'; if (!isset($_SESSION['user'])) { exit; } else if (!empty($_FILES)) { $auctionImage = array(); $size = getimagesize($_FILES['file']['tmp_name']); if (!$size) { header('Content-type: text/json'); header('Content-type: application/json'); echo json_encode(['error']); exit; } else { $n = 0; $tempFile = $_FILES['file']['tmp_name']; $imageName = uniqid() . '.' . pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); $targetPath = dirname( __FILE__ ) . '/images/uploads/'; $targetFile = $targetPath . $imageName; $filename = $_FILES["file"]["name"]; move_uploaded_file($tempFile,$targetFile); // isset id = insert gallery image into database if (isset($_GET['id'])) { $stmt = $db->prepare("INSERT INTO image (user_id, related_id, related_type, url) VALUES (:uid, :id, 'gallery', :url)"); $stmt->bindParam(':uid', $_SESSION['user']['id']); $stmt->bindParam(':id', $_GET['id']); $stmt->bindParam(':url', $imageName); $stmt->execute(); } else { $auctionImage[] = $filename; } } if (!empty($auctionImage)) { // record uploaded image name, will store into session // store uploaded image into session //$_SESSION["auctionImages"] = array(); $_SESSION["auctionImages"][] = $auctionImage; } }
delete.php
<?php $targetPath = dirname( __FILE__ ) . '/images/uploads/'; unlink($targetPath.$_POST['id']); session_start(); $a = $_POST['id']; $key=array_search($a,$_SESSION['auctionImages']); if($key!==false){ unset($_SESSION['auctionImages'][$key]); $_SESSION["auctionImages"] = array_values($_SESSION["auctionImages"]); echo '<pre>'; print_r($_SESSION['auctionImages']); }
с<?php $targetPath = dirname( __FILE__ ) . '/images/uploads/'; unlink($targetPath.$_POST['id']); session_start(); $a = $_POST['id']; $key=array_search($a,$_SESSION['auctionImages']); if($key!==false){ unset($_SESSION['auctionImages'][$key]); $_SESSION["auctionImages"] = array_values($_SESSION["auctionImages"]); echo '<pre>'; print_r($_SESSION['auctionImages']); }
Проблема. Что вы должны делать:
В основном вы должны заполнить SESSION variable
следующим образом:
$_SESSION["auctionImages"] = array( "IMG_2923.JPG", "IMG_2924.JPG" );
Таким образом, вы должны адресовать каждый элемент следующим образом:
$_SESSION["auctionImages"][$n];
$n
– это нумерованное значение индекса для определенного элемента в массиве. Поэтому, если $n
равно 0, массив вернет «IMG_29.29.JPG», а если $n
равно 1, массив вернется «IMG_2924.JPG».
Однако вы заполняете массив следующим образом:
$_SESSION["auctionImages"][] = array( "IMG_2923.JPG", "IMG_2924.JPG" );
Если вы сбросите этот массив, он даст вам:
array( array( "IMG_2923.JPG", "IMG_2924.JPG" ) );
Это не то поведение, которое вам требуется.
Решение
$filename = $_FILES["file"]["name"]; if(!is_array($_SESSION["auctionImages"])) { $_SESSION["auctionImages"] = []; } $_SESSION["auctionImages"][] = $filename;
Это более короткая, чистая и аккуратная.
Кроме того, вы можете использовать синтаксис альтернативного массива, который является [
и ]
. Таким образом, вы можете объявлять массивы с помощью $var = [];
который короче $var = array();
,
Во-первых, переменная $a
– это текст, который нужно искать в массиве.
$key = array_search($a, $_SESSION["auctionImages"]); if ($key !== false) { unset($_SESSION["auctionImages"][$key]); }
с$key = array_search($a, $_SESSION["auctionImages"]); if ($key !== false) { unset($_SESSION["auctionImages"][$key]); }
Это вторая часть кода. Это все, что вам нужно.
Кроме того, убедитесь, что вы запустили сеанс, запустив session_start()
в верхней части файла, если вы еще не сделали этого.
Несколько комментариев
$camelCase
свои переменные в $camelCase
. Поэтому было бы лучше переименовать $filename
в $fileName
. strict comparison
которое есть !==
. $a
не имеет смысла. Что-то вроде $searchString
будет действительно значимым, и код будет самодокументировать ваш код. связи
is_array
– возвращает TRUE, если переданный идентификатор является массивом, иначе возвращает FALSE.
Давайте теперь решим проблему с полным кодом, который вы мне дали. Начнем с delete.php
:
<?php session_start(); $targetPath = dirname( __FILE__ ) . '/images/uploads/'; if(!isset($_POST['id'])) { echo "ID has not been defined!"; exit; } $id = $_POST['id']; unlink($targetPath . $id); $key = array_search($id, $_SESSION['auctionImages']); if ($key !== false) { unset($_SESSION['auctionImages'][$key]); echo '<pre>'; print_r($_SESSION['auctionImages']); }
с<?php session_start(); $targetPath = dirname( __FILE__ ) . '/images/uploads/'; if(!isset($_POST['id'])) { echo "ID has not been defined!"; exit; } $id = $_POST['id']; unlink($targetPath . $id); $key = array_search($id, $_SESSION['auctionImages']); if ($key !== false) { unset($_SESSION['auctionImages'][$key]); echo '<pre>'; print_r($_SESSION['auctionImages']); }
Теперь давайте исправьте файл UploadImages.php
:
<?php session_start(); require 'config/database.php'; if (!isset($_SESSION['user'])) { exit; } if (!empty($_FILES)) { if(!isset($_SESSION["auctionImages"]) && !is_array($_SESSION["auctionImages"])) { $_SESSION["auctionImages"] = []; } $size = getimagesize($_FILES['file']['tmp_name']); if (!$size) { header('Content-type: text/json'); header('Content-type: application/json'); echo json_encode(['error']); exit; } else { $tempFile = $_FILES['file']['tmp_name']; $imageName = uniqid() . '.' . pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); $targetPath = dirname( __FILE__ ) . '/images/uploads/'; $targetFile = $targetPath . $imageName; $fileName = $_FILES["file"]["name"]; move_uploaded_file($tempFile, $targetFile); // isset id = insert gallery image into database if (isset($_GET['id'])) { $stmt = $db->prepare("INSERT INTO image (user_id, related_id, related_type, url) VALUES (:uid, :id, 'gallery', :url)"); $stmt->bindParam(':uid', $_SESSION['user']['id']); $stmt->bindParam(':id', $_GET['id']); $stmt->bindParam(':url', $imageName); $stmt->execute(); } else { $_SESSION["auctionImages"][] = $fileName; } } }
Чтобы использовать переменные сеанса, добавьте session_start () в начале ваших файлов, иначе они не будут использоваться. Во-вторых, вы добавляете массив в следующий массив. поэтому вам нужно использовать $_SESSION["auctionImages"] = $auctionImage;
или
$key=array_search($a[0],$_SESSION['auctionImages']);
Дальнейшая отладка может быть выполнена с помощью print_r ($ _ SESSION); поэтому вы можете отслеживать содержимое этого массива
У вас здесь проблема.
$_SESSION["auctionImages"][]= $auctionImage;
Variable $auctionImage
сам массив, поэтому не нужно снова назначать массив в переменной SESSION
. Сделайте это как
$_SESSION["auctionImages"]= $auctionImage;
Он отлично работает для меня.
ниже – код, который я работал.
<?php //$filename = $_FILES["file"]["name"]; $auctionImage = array(); $auctionImage = array('IMG_2923.JPG', 'IMG_2924.JPG', 'IMG_2925.JPG'); // assigning sample variables // will be IMG_2923.JPG, IMG_2924.JPG and etc $_SESSION["auctionImages"]= $auctionImage; // Removed '[]' from your coding $a = 'IMG_2923.JPG'; // Assigning for testing purpose $key=array_search($a,$_SESSION['auctionImages']); if($key!==false) unset($_SESSION['auctionImages'][$key]); $_SESSION["auctionImages"] = array_values($_SESSION["auctionImages"]); echo '<pre>'; print_r($_SESSION['auctionImages']); // Printing final session value. It prints without the key image name ?>
с<?php //$filename = $_FILES["file"]["name"]; $auctionImage = array(); $auctionImage = array('IMG_2923.JPG', 'IMG_2924.JPG', 'IMG_2925.JPG'); // assigning sample variables // will be IMG_2923.JPG, IMG_2924.JPG and etc $_SESSION["auctionImages"]= $auctionImage; // Removed '[]' from your coding $a = 'IMG_2923.JPG'; // Assigning for testing purpose $key=array_search($a,$_SESSION['auctionImages']); if($key!==false) unset($_SESSION['auctionImages'][$key]); $_SESSION["auctionImages"] = array_values($_SESSION["auctionImages"]); echo '<pre>'; print_r($_SESSION['auctionImages']); // Printing final session value. It prints without the key image name ?>