Php 如何根据会话变量中的值删除数据

Php 如何根据会话变量中的值删除数据,php,session-variables,Php,Session Variables,php(当用户单击AddPhoto时) 拍卖图像 $(函数(){ Dropzone.options.uploadImageForm=false; Dropzone.options.uploadImageForm={ 参数名称:“文件”, 最大文件大小:1, acceptedFiles:'image/*', 最大文件数:5, dictDefaultMessage:“将拍卖图像放在此处”, addRemoveLinks:是的, removedfile:函数(文件){ var name=file.n

php(当用户单击AddPhoto时)


拍卖图像
$(函数(){
Dropzone.options.uploadImageForm=false;
Dropzone.options.uploadImageForm={
参数名称:“文件”,
最大文件大小:1,
acceptedFiles:'image/*',
最大文件数:5,
dictDefaultMessage:“

将拍卖图像放在此处”, addRemoveLinks:是的, removedfile:函数(文件){ var name=file.name; $.ajax({ 键入:“POST”, url:'delete.php', 数据:“id=”+名称, 数据类型:“html” }); var_ref; return(_ref=file.previewElement)!=null?_ref.parentNode.removeChild(file.previewElement):void 0; } };
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;
    }


}

若要使用会话变量,请在文件开头添加session_start(),否则它们将不被使用。其次,您要将一个数组添加到下一个数组中。
所以你必须使用
$\u会话[“auctionImages”]=$auctionImage;

$key=array\u search($a[0],$\u SESSION['auctionImages']);


进一步的调试可以通过print\u r($\u SESSION)完成;因此您可以跟踪此数组的内容

$_SESSION["auctionImages"]= $auctionImage;
变量
$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



?>
这对我来说很好

下面是我工作的代码

$_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;
因此,您要处理每个元素,如下所示:

array(
    array(
        "IMG_2923.JPG", "IMG_2924.JPG"
    )
);
$filename  = $_FILES["file"]["name"];
if(!is_array($_SESSION["auctionImages"])) {
    $_SESSION["auctionImages"] = [];
}
$_SESSION["auctionImages"][] = $filename;
$\u会话[“拍卖图像”][$n];

$n
是数组中特定元素的编号索引值。因此,如果
$n
为0,数组将返回“IMG_29.29.JPG”,如果
$n
为1,数组将返回“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;
如果转储此阵列,它将为您提供:

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

if ($key !== false) {
    unset($_SESSION["auctionImages"][$key]);
}
这不是你需要的行为

解决方案

<?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']); 
}
这个更短、更干净、更整洁

此外,您还可以使用另一种数组语法,即
[
]
。因此,您可以使用
$var=[];
声明数组,它比
$var=array();

首先,变量
$a
是要在数组中搜索的文本

<?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\u start()
确保已启动会话

一些评论

  • 请考虑查看。如果在
    $camelCase
    中命名变量会更好。因此,最好将
    $filename
    重命名为
    $filename
  • 在使用
    严格比较方面也做得很好,这就是
    !=
  • 另外,使用更有意义的变量名。
    $a
    没有意义。类似于
    $searchString
    的内容将非常有意义,代码将自动记录代码
链接

-如果传递的标识符是数组,则返回TRUE,否则返回FALSE


现在让我们用您给我的完整代码来解决这个问题。让我们从
delete.php
开始:


你以前添加过会话吗?@ChHong请看一下我的答案。我还包括了一些对你有帮助的要点。这段代码对我有用…但是当我在
$\u会话[“auctionImages”][]中删除[]时=$auctionImage
,我的上传图像功能无法再工作了。如果我添加这一行“($\u SESSION[“auctionImages”]=array();)`…当我上传3张照片时,它只保留一条路径。当我在上传功能中添加代码时,无法work@ChHong获取
delete.php的输出,让我们@ChHong没问题。:)