Привет, У меня есть рабочая ссылка для удаления строки из моей базы данных.
<a href="?action=delete&id=<? echo $id ?>" onclick="return confirm('Are you sure you want to delete?')"><strong>Delete this Case</strong></a></td> <?php if($_POST['action']=="delete") { $id = $_POST['id']; mysql_query("DELETE FROM rmstable2 WHERE id= '$id'"); echo("> Case # $id has been deleted as requested. To see your changes please click <a href='/martinupdate.php?id=$id'>here</a></b><br>"); } ?>
то, что я хочу сделать, вместо того, чтобы иметь ссылку, я хочу иметь кнопку, которая при нажатии вызывает подтверждение, а затем удаляет строку, если это правда.
Я не хочу случайных удалений.
<form> <input type="button" value="Delete this Case" onclick="return confirm('Are you sure you want to delete?')"; <a href="?action=delete&id=<? echo $id ?>"> </form>
Попробуйте это в верхней части файла:
<?php if ($_SERVER['REQUEST_METHOD'] == 'DELETE' || ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['_METHOD'] == 'DELETE')) { $id = (int) $_POST['id']; $result = mysql_query('DELETE FROM rmstable2 WHERE id='.$id); if ($result !== false) { // there's no way to return a 200 response and show a different resource, so redirect instead. 303 means "see other page" and does not indicate that the resource has moved. header('Location: http://fully-qualified-url/martinupdate.php?id='.$id, true, 303); exit; } }
При этом как форме:
<form method="POST" onsubmit="return confirm('Are you sure you want to delete this case?');"> <input type="hidden" name="_METHOD" value="DELETE"> <input type="hidden" name="id" value="<?php echo $id; ?>"> <button type="submit">Delete Case</button> </form>
вы должны подтвердить свое подтверждение в событии onSubmit формы
поэтому, если пользователь отменит подтверждение, форма не будет отправлена
<form onSubmit="return confirm('Are you sure you want to delete?')"> <button type="submit" ...> </form>
HTML:
<form id="delete-<?php echo $id; ?>" action="?action=delete" method="post"> <input type="hidden" name="id" value="<?php echo $id; ?>" /> <input type="submit" value="Delete this Case" /> </form>
JS im принимает jquery для удобства:
$("#delete-<?php echo $id; ?>").submit(function() { return confirm("Are you sure you want to delete?"); });
Это предотвращает действие отправки по умолчанию, если подтверждение js возвращает false (не отправляет), в противном случае разрешает регулярный пост.
Примечание. Вы действительно не должны использовать атрибуты html для объявления обработчиков событий, этот код разделяет логику.
Это не-jquery-решение. Я не тестировал его, и я не верю, что preventDefault работает в IE <= 8, поэтому я, вероятно, не буду использовать его в производстве, но это можно сделать без слишком большого кода jquery, просто заставляет его переходить через браузер и проще ,
function loaded() { document.getElementById("delete-<?php echo $id; ?>").addEventListener( "submit", function(event) { if(confirm("Are you sure you want to delete?")) { event.preventDefault(); } return false; }, false ); } window.addEventListener("load", loaded, false);