Member 13074487 Ответов: 2

Кнопка Удалить не работает


Всякий раз, когда я нажимаю кнопку Удалить, он удаляет все предварительные просмотры, которые я хочу удалить только этот предварительный просмотр... но на стороне сервера он удаляет только одно изображение.. для стороны сервера это не проблема... Любая помощь будет оценена по достоинству...

Что я уже пробовал:

<?php
if($_POST['image_form_submit'] == 1)
{
	$con=new PDO("mysql:host=localhost;dbname=newimg","root","");
	$images_arr = array();
	foreach($_FILES['images']['name'] as $key=>$val){
		$image_name = $_FILES['images']['name'][$key];
		$tmp_name 	= $_FILES['images']['tmp_name'][$key];
		$size 		= $_FILES['images']['size'][$key];
		$type 		= $_FILES['images']['type'][$key];
		$error 		= $_FILES['images']['error'][$key];
		$rand 		= mt_rand(1000,10000000);
		$target_dir = "uploads/";
		$target_file = $target_dir.$_FILES['images']['name'][$key];
		if(move_uploaded_file($_FILES['images']['tmp_name'][$key],$target_file)){
			$images_arr[] = $target_file;	
			$addnew=$con->prepare("INSERT INTO attempt010(link,name,size,type)VALUES('$rand','$image_name','$size','$type')");
    		$addnew->execute();
		}
		$fetch_imgid=$con->prepare("SELECT id FROM attempt010 where link='$rand'");
		$fetch_imgid->setFetchMode(PDO:: FETCH_ASSOC);
		$fetch_imgid->execute();
		$row=$fetch_imgid->fetch();
		$delid = $row['id'];
	}
	//Generate images view
	if(!empty($images_arr)){ $count=0;
		foreach($images_arr as $image_src){ $count++?>
			<span><ul class="reorder_ul reorder-photos-list" id="previewImg">
            	<li id="image_li_<?php echo $count; ?>" class="ui-sortable-handle">
                	<a href="javascript:void(0);" style="float:none;" class="image_link"><img src="<?php echo $image_src; ?>" alt=""></a>
                	<input type="text" name="imageCaption" id="imageCaption" placeholder="Enter Image Caption" />
                	<input type="submit" id="cap_btn" value="Caption Button" />
                	<?php 

                	?>
                	<input type="submit" id="del_btn" value="Delete Image" />
                	</span>
               	</li>
          	</ul>
          	<script type="text/javascript">
          		 $(document).ready(function () {
        	$("input#del_btn").click(function(){
            $.ajax({
                type: "POST",
                url: "del.php", // 
                data: {id: <?php echo $delid; ?>},
                success: function(){
                    
                    var elem = document.getElementById('previewImg');
                    elem.remove();     
                },
                error: function(){
                    alert("failure");
                }
            });
        });
    });
</script>
<script type="text/javascript">
          	$(document).ready(function () {
        	$("input#cap_btn").click(function(){
            $.ajax({
                type: "POST",
                url: "addcap.php", // 
                data: {id: imageCaption},
                success: function(){
                    
                    var elem = document.getElementById('previewImg');
                    elem.remove();     
                },
                error: function(){
                    alert("failure");
                }
            });
        });
    });
</script>
	<?php 
	}
	}
}
?>





а это html страница



<!DOCTYPE html>
<html>
<head>
<title>Multiple Images Upload Using jQuery, Ajax and PHP by CodexWorld</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="jquery.form.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	$('#images').on('change',function(){
		$('#multiple_upload_form').ajaxForm({
			target:'#images_preview',
			beforeSubmit:function(e){
				$('.uploading').show();
			},
			success:function(e){
				$('.uploading').hide();
			},
			error:function(e){
			}
		}).submit();
	});
});
</script>
</head>
<body>
    <form method="post" name="multiple_upload_form" id="multiple_upload_form" enctype="multipart/form-data" action="upload.php">
    	<input type="hidden" name="image_form_submit" value="1"/>
            <label>Choose Image</label>
            <input type="file" name="images[]" id="images" multiple >
        <div class="uploading none">
            <label> </label>
            <img src="uploading.gif"/>
        </div>
    </form>
  
	
    <div class="gallery" id="images_preview"></div>
</div>
</body>
</html>

2 Ответов

Рейтинг:
2

Patrice T

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL Injection-руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL-OWASP[^]


Рейтинг:
19

Richard Deeming

У вас есть несколько элементов в документе с одинаковыми идентификаторами. Это недопустимый HTML-код. Каждый идентификатор в документе должен быть уникальным.

Затем вы говорите браузеру удалить элемент с идентификатором previewImg Но есть несколько элементов с этим идентификатором. То, что происходит дальше, не определено и может варьироваться от браузера к браузеру и даже между различными версиями одного и того же браузера. В браузере, который вы используете, он удаляет все элементы с дублированным идентификатором.

Переместите <ul> и <script> теги снаружи из ваших foreach петля. Убедитесь, что все элементы в цикле имеют уникальные идентификаторы. Использовать data- атрибут для хранения идентификатора изображения на <li> метка. Затем измените свой обратный вызов AJAX, чтобы удалить только необходимый элемент.

if(!empty($images_arr)){ $count=0;?>
    <ul class="reorder_ul reorder-photos-list" id="previewImg">
    <?php foreach($images_arr as $image_src){ $count++ ?>
        <li id="image_li_<?php echo $count; ?>" class="ui-sortable-handle" data-image-id="<?php echo $delid; ?>">
            <a href="javascript:void(0);" style="float:none;" class="image_link"><img src="<?php echo $image_src; ?>" alt=""></a>
            <input type="text" name="imageCaption_<?php echo $count; ?>" id="imageCaption_<?php echo $count; ?>" placeholder="Enter Image Caption" />
            <input type="submit" class="cap_btn" value="Caption Button" />
            <input type="submit" class="del_btn" value="Delete Image" />
        </li>
    <?php } ?>
    </ul>
    
    <script>
    $(document).ready(function () {
        $(".del_btn").click(function(){
            var li = $(this).closest("li");
            $.ajax({
                type: "POST",
                url: "del.php",
                data: { id: li.data("imageId") },
                success: function(){
                    li.remove();
                },
                error: function(){
                    alert("failure");
                }
            });
        });
    });
    </script>
<?php 
}


Member 13074487

Спасибо @Ричард, это работает.....