Идентификатор, отображаемый в URL, абсолютно не проблема. Это не делает операцию удаления более безопасной или небезопасной. У вас есть одна, может быть, две другие проблемы:
- Любая деструктивная операция должна использовать POST-запросы. Обычные ссылки могут свободно сканироваться поисковыми системами или предварительно загружаться браузерами. Это означает, что как только Google сканирует все ваши ссылки, ваша база данных будет пустой. Вот почему использование POST важно, потому что каждый правильно работающий HTTP-клиент понимает, что POST является деструктивным.
- Если вы задаете этот вопрос, потому что боитесь, что пользователи могут просто манипулировать идентификатором, показанным в URL, и удалять другие записей, которые они не должны удалять, тогда ваша настоящая проблема не в том, где вы передаете идентификатор, а в том, что у вас нет проверки прав на вашем сервере.
Для начала используйте форму для создать POST-запросы:
<form action="delete.php?id=<?php echo htmlspecialchars(urlencode($row['id'])); ?>"
method="post">
<input type="submit" value="Delete">
</form>
(также обратите внимание на правильный способ URL-кодирования и HTML -кодирования значения, поскольку вы встраиваете его в URL-адрес в контексте HTML.)
На стороне PHP вы бы обработали это примерно так:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$id = $_GET['id'];
// permission checking here
// delete record here
}
Вместо передачи идентификатора в качестве параметра запроса, вы также можете сделать его полем формы:
<form action="delete.php" method="post">
<input type="hidden" name="id" value="<?php echo htmlspecialchars($row['id']); ?>">
<input type="submit" value="Delete">
</form>
На сервере вы бы взяли значение из $_POST['id']
вместо $_GET['id']
.
Обратите внимание, что это ничего не меняет в корне и в основном это дело вкуса. .
* 102 5 * Вы можете настроить эту кнопку для отправки в черный цвет различными способами
или, возможно, переключиться на более интерактивный Javascript; но это всего лишь способы улучшить эту базовую c операцию.