При нажатии кнопки Удаления изображение необходимо удалить из таблицы, вместо этого отображается сообщение об ошибке

#php #mysql #sql #prepared-statement

#php #mysql #sql #подготовленное утверждение

Вопрос:

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

 <?php
    $query = "SELECT * FROM `tblImage`";

    $result = $conn -> query($query);

    while($row = $result -> fetch_assoc())
    {
?>

<form method="post" action="">
    <a href="<?php echo $row['fldFilePath']; ?>" data-lightbox="gallery" data-title="<?php echo $row['fldName']; ?>"><img src="<?php echo $row['fldFilePath']; ?>" class="ImgRound"></a>
    <label>Image Name: <?php echo $row['fldName']; ?></label>
    <input name ="img-title" type ="text" placeholder="Enter New Image Title...">
    <button type="submit" value ="<?php echo $row['fldName'] ?>" name="update_title" class="ImgRound size-btn">Update</button>
    <button type="submit" value ="<?php echo $row['fldName'] ?>" name="delete" class="ImgRound size-btn">Delete</button>
</form>
<?php
    if(isset($_POST['update_title']))
        {
                $imgTitle = $_POST['img-title'];

    $stmt = $conn->prepare("UPDATE `tblImage` SET `fldName` = ? WHERE `fldName` = ?");
    $stmt->bind_param("ss", $imgTitle, $_POST['update_title']) or die($stmt->error);
        if ($stmt->execute())
            {
                header("Refresh:0");
            }   
        else {

                die($stmt->error);
             }

         }
    }
?>
  

Как только я добавлю приведенный ниже код перед последним закрытием } :

 if(isset($_POST['delete']))
    {
        $imgTitle = $_POST['img-title'];
        $stmt = $conn->prepare("DELETE FROM `tblImage` WHERE `tblImage`.`fldName` = ?"); 
        $stmt->bind_param("ss", $imgTitle, $_POST['delete']) or die($stmt->error);
        if ($stmt->execute())
            {
                header("Refresh:0");
            }   
        else {
                die($stmt->error);
            }
    }
  

Появляется ошибка: Предупреждение: mysqli_stmt::bind_param(): количество переменных не соответствует количеству параметров в подготовленном операторе

Есть какие-либо указания на то, что я сделал неправильно? Возможно, запрос, или мне, возможно, следует поместить значение в кнопку удаления пути к файлу в качестве приложения к имени изображения — fldName ?

Любая помощь была бы высоко оценена.

Комментарии:

1. Ваш второй подготовленный оператор имеет только один параметр привязки ( `fldName` = ? )

Ответ №1:

Кажется, что у вас есть только один параметр, ? однако он у вас есть "ss" , удалите один из них и повторно запустите запрос.

Ответ №2:

 $stmt = $conn->prepare("DELETE FROM `tblImage` WHERE `tblImage`.`fldImageID` = ?"); 
$stmt->bind_param("ss", $imgTitle, $_POST['delete']) or die($stmt->error);
  

У вас есть один вопросительный знак (параметр), таким образом, две переменные — это слишком много.

Это должно стать

 $stmt = $conn->prepare("DELETE FROM `tblImage` WHERE `tblImage`.`fldImageID` = ?"); 
$stmt->bind_param("s", $_POST['delete']) or die($stmt->error);
  

Комментарии:

1. Не могу поверить, что я это пропустил, большое спасибо Бену и К. Хейдоку, это было абсолютно правильно, теперь работает нормально. Мне так жаль, что я трачу ваше время.