Php 如何根据会话变量中的值删除数据
php(当用户单击AddPhoto时)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
拍卖图像
$(函数(){
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没问题。:)