2015-12-31 40 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

具有u加上之前在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 = array();短的$var = [];來聲明數組。

首先,可變$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哈桑althaf :) –

+2

thxx很多.. ..最終這個代碼適用於我:)是啊〜 –

+0

沒問題的人。 :) –

2

要使用會話變量,請在文件開頭添加session_start(),否則不會使用它們。其次,你將數組添加到下一個數組中。 所以你必須使用 $_SESSION["auctionImages"] = $auctionImage;

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

進一步調試通過的print_r($ _ SESSION)來完成;這樣你就可以跟蹤這個數組

1

的內容,你有一個問題在這裏

$_SESSION["auctionImages"][]= $auctionImage; 

可變$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',我上傳圖片功能着工作ALD –