A possible duplicate of this link
但是我似乎无法使用该论坛中的相同逻辑来解决此问题。
我正在使用预订模块,它具有确认或取消预订的功能。这是我的PHP
代码,告诉您预订是否已确认,取消或尚未确认。 Status==0
(尚未确认)-默认值Status==1
(已确认)和Status==2
(已取消)
<?php
session_start();
error_reporting(0);
include('includes/config.php');
if(strlen($_SESSION['alogin'])==0)
{
header('location:index.php');
}
else{
if(isset($_REQUEST['eid']))
{
$eid=intval($_GET['eid']);
$status="2";
$sql = "UPDATE tblbooking SET Status=:status WHERE id=:eid";
$query = $dbh->prepare($sql);
$query -> bindParam(':status',$status, PDO::PARAM_STR);
$query-> bindParam(':eid',$eid, PDO::PARAM_STR);
$query -> execute();
$msg="Booking Successfully Cancelled";
}
if(isset($_REQUEST['aeid']))
{
$aeid=intval($_GET['aeid']);
$status=1;
$sql = "UPDATE tblbooking SET Status=:status WHERE id=:aeid";
$query = $dbh->prepare($sql);
$query -> bindParam(':status',$status, PDO::PARAM_STR);
$query-> bindParam(':aeid',$aeid, PDO::PARAM_STR);
$query -> execute();
$msg="Booking Successfully Confirmed";
}
<?php $sql = "SELECT tblbooking.Status";
$query = $dbh -> prepare($sql);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0){
foreach($results as $result){
?>
if($result->Status==0){
echo htmlentities('Not Confirmed yet');
} else if ($result->Status==1) {
echo htmlentities('Confirmed');
}
else{
echo htmlentities('Cancelled');
}
这是原始代码,它将通过基本的Javascript
提醒
<td><button class="btn btn-sm btn-primary"><a href="manage-bookings.php?aeid=<?php echo htmlentities($result->id);?>" onclick="return confirm('Do you really want to Confirm this booking')"> <i style="color: #fff;" class='fa fa-check'></i></a></button>
<button class="btn btn-sm btn-danger"><a href="manage-bookings.php?eid=<?php echo htmlentities($result->id);?>" onclick="return confirm('Do you really want to Cancel this booking')"> <i style="color: #fff;" class='fa fa-close'></i></a></button></td>
但是我想使用sweetalert,所以我对此进行了修改(首先使用锚点对其进行测试)
<a href="manage-bookings.php?aeid=<?php echo htmlentities($result->id);?>" onclick="confirmation(event)">Confirm</a>
这是script
<script>
function confirmation(ev) {
ev.preventDefault();
var urlToRedirect = ev.currentTarget.getAttribute('href'); //use currentTarget because the click may be on the nested i tag and not a tag causing the href to be empty
console.log(urlToRedirect); // verify if this is the right URL
swal({
title: "Are you sure you want to tag this booking as confirmed",
text: "You will not be able to revert this!",
icon: "warning",
buttons: true,
dangerMode: true,
})
.then((willDelete) => {
// redirect with javascript here as per your logic after showing the alert using the urlToRedirect value
if (willDelete) {
swal("Your booking as been confirmed!", {
icon: "success",
});
} else {
swal("You booking hasn't been confirmed.");
}
});
}
</script>
问题是,警报起作用。它会创建一个弹出确认,但不会完全确认/取消预订,尽管
href
链接与原始内容说的是一样的东西,但原始内容会重新加载页面并进行标记。
答案 0 :(得分:1)
在我看来,您从未真正将任何数据发送回服务器。
内置的javascript确认对话框会中断您的超链接,然后在您单击“确定”后恢复它。
Sweetalerts似乎不这样做。因此,您永远不会重定向到需要访问的页面。您可以使用javascript重定向到正确的URL,或者可以为要执行的操作编写服务器端API,然后在“ willDelete”案例中从AJAX调用该API。
这是以前的选择:
<script>
function confirmation(ev) {
ev.preventDefault();
var urlToRedirect = ev.currentTarget.getAttribute('href'); //use currentTarget because the click may be on the nested i tag and not a tag causing the href to be empty
console.log(urlToRedirect); // verify if this is the right URL
swal({
title: "Are you sure you want to tag this booking as confirmed",
text: "You will not be able to revert this!",
icon: "warning",
buttons: true,
dangerMode: true,
})
.then((willDelete) => {
if (willDelete) {
// redirect with javascript here as per your logic after showing the alert using the urlToRedirect value
window.location.href = urlToRedirect;
} else {
swal("You booking hasn't been confirmed.");
}
});
}
</script>