2015-12-31 2 views
2

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']); 
} 
+1

есть у добавить session_start() перед? – Fiido93

+2

@ChHong Пожалуйста, взгляните на мой ответ. Я включил еще несколько моментов, которые помогут вам. –

ответ

1

Проблема - Что вы должны сделать:

Вы в основном должны заполнить 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]); 
} 

Это - вторая часть кода. Это все, что вам нужно.

Кроме того, убедитесь, что вы запустили сеанс, нажав session_start() в верхней части файла, если вы еще не сделали этого.

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

  • Рассмотрим взглянуть на Unofficial PHP standards here. Было бы лучше, если бы вы указали свои переменные в $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']); 
} 

Теперь давайте исправить файл 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; 
     } 

    }            
} 
+1

thx hassan althaf :) –

+2

thxx a lot .. ..Наконец этот код работает для меня :) да ~ –

+0

Без проблем человек. :) –

2

Чтобы использовать переменные сеанса, добавьте session_start() в начале ваших файлов, иначе они не будут использоваться. Во-вторых, вы добавляете массив в следующий массив. поэтому вы должны использовать $_SESSION["auctionImages"] = $auctionImage; или

$key=array_search($a[0],$_SESSION['auctionImages']);

Далее отладки может быть сделано с помощью print_r ($ _ SESSION); так что вы можете отслеживать содержимое этого массива

1

У вас есть проблема здесь

$_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 



?> 
+2

этот код работает для меня ... но когда я удаляю [] в '$ _SESSION [" auctionImages "] [] = $ auctionImage', моя функция загрузки изображения can not work ald –

Смежные вопросы