PHP & amp; MySQL — путаница в запросах

Я пытаюсь создать строку таблицы с PHP для каждого значения в моей базе данных MySQL.
SiteName и siteId вытащены правильно, и отображают хорошо, как они.

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

$results = mysqli_query($conn, "SELECT * FROM folders WHERE hidden = 0 ORDER BY siteName asc");
while ($row = mysqli_fetch_assoc($results)) {
<tr>
<td>
<span>
<?php echo($row["siteName"] . ' (' . $row["siteId"] . ')') ?>
</span>
<form method="POST">
<button name="deleteFolder">CLICK</button>
</form>

<?php
$conn = mysqli_connect($server, $username, $password, $database);
if (isset($_POST['deleteFolder']))
{
// deletes everything?
$testing = mysqli_query($conn, "DELETE FROM folders WHERE siteId = '".$row['siteId']."'");
}
?>
</td>
</tr>
<?php } ?>

-1

Решение

Этот код в настоящее время удаляет все, потому что вы выполняете запрос на удаление внутри цикла, который отображает все папки, использует идентификатор каждой папки и удаляет их, как только она их получает.

Передайте идентификатор сайта для удаления в качестве значения кнопки и удалите перед отображением таблицы, если это значение установлено.

<?php
$conn = mysqli_connect($server, $username, $password, $database);

// delete first if the button was clicked
if (isset($_POST['deleteFolder']))
{
// use the value from $_POST here
$testing = mysqli_query($conn, "DELETE FROM folders WHERE siteId = '".$_POST['deleteFolder']."'");
}

$results = mysqli_query($conn, "SELECT * FROM folders WHERE hidden = 0 ORDER BY siteName asc");

while ($row = mysqli_fetch_assoc($results)): ?>
<tr>
<td>
<span>
<?php echo($row["siteName"] . ' (' . $row["siteId"] . ')') ?>
</span>
<form method="POST">
<!-- use the site id as the value of this button -->
<button type="submit" name="deleteFolder" value="<?= $row['siteId'] ?>">CLICK</button>
</form>

</td>
</tr>
<?php endwhile; ?>

Кроме того, я не обращался к этому здесь, но этот запрос уязвим для внедрения SQL. Посмотрите, как связать значение идентификатора сайта с подготовленным оператором, а не объединять значение в ваш SQL.

1

Другие решения

Первый; Я предполагаю, что у вас уже есть соединение с БД для выполнения первого запроса, поэтому вам не нужно создавать новое соединение для каждой строки.

Во-вторых, Когда вы нажимаете кнопку, он должен отправить запрос POST с данными в php-файл, который будет выполнять запрос (удаление) — как предложено @ Don’t Panic. Какова ваша логика сейчас, вы запускаете проверку удаления внутри цикла, когда страница загружается.

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector