Как удалить данные на основе значения в переменной сеанса

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() в верхней части файла, если вы еще не сделали этого.

Несколько комментариев

  • Подумайте о том, чтобы ознакомиться с Неофициальными стандартами PHP здесь . Было бы лучше, если бы вы $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 ?>