невозможно удалить одну указанную c запись из таблицы - PullRequest
0 голосов
/ 17 января 2020

Я в настоящее время разочарован поиском, и никакая статья не могла мне помочь. Я хочу удалить только одну строку или запись, но в итоге я удаляю всю запись в таблице

<?php
   // include database connection file
   $databaseHost = 'localhost';
   $databaseName = 'ceksaldo';
   $databaseUsername = 'root';
   $databasePassword = '';

   $conn = mysqli_connect($databaseHost, $databaseUsername, $databasePassword, $databaseName); 

   // Get id from URL to delete that saldo
   $id = $_GET['id'];

   // Delete saldo row from table based on given id
   //$result = mysqli_query($mysqli, "DELETE FROM saldo WHERE id=$id");
   $result ="DELETE FROM saldo WHERE id";
   if (mysqli_query($conn, $result)) {
       echo "Record deleted successfully";
   } else {
       echo "Error deleting record: " . mysqli_error($conn);
   }

   mysqli_close($conn);

   // After delete redirect to Home, so that latest saldo list will be displayed.
   echo "<a href=index.php>Home</a>"
?>

Скриншот пары строк

Я хочу это автоматически удалять указанные данные c. В какой-то статье я обнаружил, что они используют идентификационный номер для удаления записи. Есть идеи, что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 17 января 2020
$result ="DELETE FROM saldo WHERE id";

не говорит, каким должен быть идентификатор. Это удалит каждую строку!

Вы должны обновить запрос к этому, указав, какую запись удалить.

$result ="DELETE FROM saldo WHERE id = $id";

Большая проблема в том, что на рисунке вашего кода у вас нет 'id' столбец, поэтому вам нужно t ie ваш запрос к чему-то, что уникально идентифицирует каждую строку. Возможно, вам придется обновить таблицу, или вы не можете показать нам всю таблицу.

ПРЕДУПРЕЖДЕНИЕ

Маленький Бобби говорит ваш сценарий подвержен риску SQL инъекционных атак. Узнайте о подготовленных утверждениях для MySQLi . Даже экранирование не безопасно!

1 голос
/ 18 января 2020

Если вам нужно удалить указанную строку c, вам нужно использовать идентификатор в WHERE

DELETE FROM saldo WHERE id=?

Поскольку вам нужно передать переменную в запрос, mysqli_query() не подходит. Вы должны использовать подготовленное заявление. Затем вы можете связать значение и выполнить.

Чтобы отправить значение на PHP, вы можете использовать либо ссылку, либо форму.

Ссылка:

<a href="delete.php?id=123">Delete item with ID 123</a>

или с формой:

<form method="get">
<input type="text" name="id" />
<input type="submit" value="Delete" />
</form>

Ваш фиксированный код должен выглядеть примерно так. Обратите внимание, что я включил отчеты об ошибках, которые вы всегда должны иметь. Я также добавил оператор if, потому что вы хотите выполнить запрос только в том случае, если в ваш скрипт передан указанный c ID.

<?php

// include database connection file
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = mysqli_connect('localhost', 'root', '', 'ceksaldo');
$conn->set_charset('utf8mb4'); // always set the charset

// Get id from URL to delete that saldo
if (isset($_GET['id'])) {
    $id = $_GET['id'];

    // Delete saldo row from table based on given id
    $stmt = $conn->prepare('DELETE FROM saldo WHERE id=?');
    $stmt->bind_param('s', $id);
    $stmt->execute();
    echo "Record deleted successfully";
}

echo 'No ID selected. No record deleted!';

// After delete redirect to Home, so that latest saldo list will be displayed.
echo "<a href=index.php>Home</a>";
...