@user1213

Почему не происходит удаление записи с помощью AJAX?

Пытаюсь удалить запись из базы данных и скрыть элемент с помощью AJAX , но почему то удаление не происходит .
На странице выводятся классы с именами картинок , при нажатии на кнопку удаления соответствующий класс должен скрываться .
Файл страницы .
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="style2.css">
<script>
$('.but').on('click', function() {
  // действия, которые будут выполнены при наступлении события...
  var count=$(this).attr("id");
});
function del(){
    var name = count;
    
    $.ajax({
        type: "POST",
        url: "delete.php",
        data: {fname:name}
		success: function() {
                $("."+name).remove();
            },
	})
}
		</script>
</head>
<body>
<?php
$delet=$_GET[name];
$category=$_GET[category];
$host = 'localhost'; // адрес сервера 
$database = 'imagess'; // имя базы данных
$user = 'admin'; // имя пользователя
$password = '12345'; // пароль
$link = mysqli_connect($host, $user, $password, $database) 
    or die("Ошибка " .  mysqli_error($link));
	
if ($delet!='')
{
mysqli_query($link,"delete FROM imagess WHERE name='".$delet."'");
}

$res = mysqli_query($link,"SELECT name,showname FROM imagess WHERE category='".$category."'");

  
  
  ?>  
 	<div class="wrap">
	<?php
 while($row = mysqli_fetch_array($res)) {
$src='upload/'.$row['name'];
?>
<div class="<?php echo $row['showname']; ?>">
<div class="block">
<div   style="height:400px;width:450px;overflow:hidden; text-align: center;float:left;background-color:#8c95a3;">
 <img style="max-height:400px;" src="<?php echo $src; ?>"/>
 
</div>
<input type="button" class="but" id="<?php echo $row['name'];?> " value="Удалить" onClick = "del()" />

</div>
</div>

<?php		
}
?>

</div>
<?php
mysqli_close($link);
?>
</body>
</html>

Файл delete
<?php
$name=$_POST['fname'];

$host = 'localhost'; // адрес сервера 
$database = 'imagess'; // имя базы данных
$user = 'admin'; // имя пользователя
$password = '12345'; // пароль
$link = mysqli_connect($host, $user, $password, $database) 
    or die("Ошибка " .  mysqli_error($link));
	if ($name!='')
{
mysqli_query($link,"delete FROM imagess WHERE name='".$name."'");
}
?>
  • Вопрос задан
  • 218 просмотров
Пригласить эксперта
Ответы на вопрос 2
Sanovskiy
@Sanovskiy
Веб-разработчик с 2005 года
Я хотел бы начать с того, что в процессе чтения этого кода у меня неоднократно текла кровь из глаз.
Я уже молчу про салат из PHP и HTML .

По порядку.
1. Читайте про области видимости в JS
var count=$(this).attr("id");
Эта переменная не будет доступна далее по коду, так не попадет в общую область видимости. Объявите её вне коллбэка.
https://habrahabr.ru/post/78991/

2. Зачем вам дублирующийся код? Удаление и в основном файле и в ajax-обработчике.
https://kb.mista.ru/article.php?id=273

3. Код уязвим к инъекциям
mysqli_query($link,"delete FROM imagess WHERE name='".$name."'");

Допустим, я вызову delete.php?name=' OR 1 OR name!='
Как думаете, что произойдет?
https://habrahabr.ru/post/148151/

Это далеко не все проблемы в вашем коде, но начните с исправления хотя бы этих.

И отказывайтесь уже от MySQLi. Это расширение давно уже морально устарело. Используйте PDO
Ответ написан
flapflapjack
@flapflapjack
на треть я прав
Так у вас при клике выполняется только var count=$(this).attr("id");
а функция дел висит в воздухе и не выполняется вообще никогда.

Вы скобку передвиньте.

$('.but').on('click', function() {
  // действия, которые будут выполнены при наступлении события...
  var count=$(this).attr("id");


    var name = count;
    
    $.ajax({
        type: "POST",
        url: "delete.php",
        data: {fname:name}
    success: function() {
                $("."+name).remove();
            },
  })

});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы