Строка не удаляется в MySQL, а PHP не возвращает ошибки - PullRequest
0 голосов
/ 20 марта 2019

У меня есть код, который должен удалить выбранную строку идентификатора из таблицы, загрузив файл remove.php с запросом SQL.Проблема в том, что это не работает, но я не получаю ошибок или уведомлений.Кажется, моя переменная передается в remove.php в URL просто отлично, так как '<a href="remove.php?='.$Fvalue.'">' интерпретируется как

remove.php? = 1

, например, где1 является основным идентификатором строки.

Вот весь код, связанный только с вопросом:

РЕДАКТИРОВАТЬ:

Рендеринг HTML для таблицы продуктов с кнопкой УДАЛИТЬ:

    <!-- Products table -->

    <table class="table">
        <thead>
        <tr>
            <th scope='col'>id </br ></th><th scope='col'>name </br ></th><th scope='col'>price </br ></th><th scope='col'>amount </br ></th><th scope='col'>category_name </br ></th>    </tr>
        </thead>
        <tbody>

        <tr><td data-id="1"><a href="remove.php?remove_id=1"> REMOVE</a></td>
<td>iPhone 7</td>
<td>800</td>
<td>15</td>
<td>Smartphones</td>
</tr><tr>
<td data-id="42"><a href="remove.php?remove_id=42"> REMOVE</a></td>
<td>Motorola </td>
<td>3000</td>
<td>5</td>
<td>Smartphones</td>
</tr><tr><td data-id="2"><a href="remove.php?remove_id=2"> REMOVE</a></td><td>Macbook Pro 2015</td>
<td>1300</td><td>10</td>
<td>Computers</td></tr><tr><td data-id="4"><a href="remove.php?remove_id=4"> REMOVE</a></td>
<td>Dell XPS</td>
<td>1400</td>
<td>6</td><td>Computers</td>
</tr><tr><td data-id="41"><a href="remove.php?remove_id=41"> REMOVE</a></td>
<td>CHROMEBOOK</td>
<td>5600</td>
<td>8</td>
<td>Computers</td></tr></tbody>

Обновлено PHP:

 <?php
    foreach ($newArray as $value) {
        echo '<tr>';
        foreach ($value as $key => $Fvalue) {

            $remove = $value['id'] = " REMOVE";
            if($value[$key] == $value['id']) {
                echo '<td data-id="'.$Fvalue.'">' . '<a href="remove.php?remove_id='.$Fvalue.'">' . $remove . '</a>' . '</td>';  // will show all values.
            } else {
                echo '<td>' . $Fvalue . '</td>';
            }
        }
        echo '</tr>';
    }
    ?>

remove.php

<?php
require_once ("navigation.php");
require_once("database_connection.php");
$id = !empty($_GET['remove_id']) ? $_GET['remove_id'] : null;
if($id != null) {
    $deleteProducts = "DELETE FROM `products` WHERE `id` = '.$id.'";
    mysqli_query($dbc, $deleteProducts);
}

Обращайтесь за помощью ко мне, выявляйте любые проблемы, поскольку я не получаю ошибок и понятия не имею, почемукод не удаляет строку в таблице.Спасибо.

Ответы [ 2 ]

3 голосов
/ 20 марта 2019

Вам необходимо передать ключ, связанный со значением, которое вы отправляете;

<a href="remove.php?remove_id='.$Fvalue.'">' . $remove . '</a>

Обратите внимание на часть remove_id.

Теперь в вашем PHP вы можете получить это значение;

$id = !empty($_GET['remove_id']) ? $_GET['remove_id'] : null;
if($id !== null) {
    $deleteProducts = "DELETE FROM `products` WHERE `id`='{$id}'";
    mysqli_query($dbc, $deleteProducts);
}

В своем коде я также исправил проблему, которая возникла в вашем коде.У вас есть $id = (isset($_GET['$Fvalue']));, который всегда будет устанавливать $id в true или false, а не в идентификатор, который вы передали.

Вы также можете очистить переменные HTML, используя двойные кавычкивместо одинарной кавычки.

if($value[$key] == $value['id']) {
    echo "<td data-id='{$Fvalue}'><a href='remove.php?remove_id={$Fvalue}'>{$remove}</a></td>";  // will show all values.
} else {
    echo "<td>{$Fvalue}</td>";
}

БОЛЬШОЕ ПРИМЕЧАНИЕ : Маленький Бобби говорит вы можете подвергнуться риску атак SQL-инъекций .Узнайте о подготовленных заявлениях с параметризованными запросами .

0 голосов
/ 20 марта 2019

Используя метод get, вам нужны пары ключ-значение в вашем URL.

remove.php?id=1

Где id - это ключ, а 1 - это значение.

...