用php var确认删除


Confirm delete with php var

我的代码示例:

    <form action="test.php" method="GET">
        <input type="text" name="Delete_This" value="<?php if (isset($_GET['Delete_This'])) echo $_GET['Delete_This']?>">
        <input type="submit" name="Deleting" value="Delete this">
        <?php
            // If the deleting button is pressed
            if (isset($_GET['Deleting']))
            {
                $DeleteThis = $_GET['Delete_This'];
               ?> 
                <script type='text/javascript'>
                    if (confirm('Are you sure you want to delete <?php echo $DeleteThis ?> ?'))
                        alert('<?php echo $DeleteThis ?> deleted');
                         <?php
                           $sql_delete="DELETE FROM table WHERE Name like '".$DeleteThis ."'";
                           mysqli_query($db,$sql_delete);
                        ?>
                   else
                    alert('Not deleted');

                </script>               
        <?php } ?>
    </form>

确认框正常打开。我的问题是,无论我点击OKCancel$sql_delet被执行。我知道我应该在我的文档的顶部<head>上使用Javascript,但如果我这样做,我就不能执行删除查询,我必须警告用户他要删除什么。{$DeleteThis}工作良好。我还在input上使用了onclick功能,但我不能使用{$DeleteThis}

合成:我想,如果confirm框被取消,查询不会被执行,我必须在confirmalert中使用php变量

您可能需要了解服务器端语言和客户端语言之间的区别。

php代码中的所有内容都在html和javascript代码发送到用户浏览器之前执行。

相反,javascript代码中的任何内容都不能再影响php代码。

在你的代码中发生的是php首先检查是否有一个$_GET['Deleting']变量。如果有,它会找到一些html和javascript,并记住以后应该将其输出到浏览器。然后执行删除查询。完成后,它将以下javascript(加上周围的html)发送到浏览器:

<script type='text/javascript'>
    if (confirm('Are you sure you want to delete your-deletion-value ? 'nHey'))
        alert('your-deletion-value deleted');
   else
    alert('Not deleted');

</script>

希望你们能看到两者之间的分离

你可以在

if (isset($_GET['Deleting']))
        {
            $DeleteThis = $_GET['Delete_This'];
            if(!isset($_GET['ConfirmDelete'])//if confirmation has not been initiated yet
            {
           ?> 
            <script type='text/javascript'>
            function deleteOrNot(formEle)
            {
                if (confirm('Are you sure you want to delete <?php echo $DeleteThis ?> ?'))
                    window.location += '&ConfirmDelete=yes';//casue a postback with ConfirmDelete attribute in $_GET
               else
                alert('Not deleted');
            </script>               
    <?php }
          else if($_GET['ConfirmDelete'] == 'yes')
             {
                 $sql_delete="DELETE FROM table WHERE Name like '".$DeleteThis ."'";
                 mysqli_query($db,$sql_delete);
             }
 } ?>

或者你可以在表单中使用一个带有必填属性的复选框,然后设置提交按钮,在使用onclick提交之前设置复选框的值。

<input type="checkbox" name='ConfirmDelete' 
    required <?php if(isset($_GET['ConfirmDelete']))  
        echo 'checked=' . $_GET['ConfirmDelete']; ?> >
<input type="submit" name="Deleting" onclick=
      'this.form.ConfirmDelete.checked = deleteOrNot(this.form)' value="Delete this">

并像这样修改你的脚本

<script type='text/javascript'>
    function deleteOrNot(formEle)
    {
        if(typeof formEle == 'undefined')
        {
            formEle = forms[0];
        }
        var result = confirm('Are you sure you want to delete' + formEle.Delete_This.value + ' ? 'nHey');
        if (result)
            alert(formEle.Delete_This.value + ' will be deleted');
        else
            alert('Not deleted');
        return result;
    }
</script>     

注意:我添加了表单作为deleteOrNot函数的参数,并使用它来获取文本框的值。如果未选中

,则复选框上的required将阻止表单提交。
onclick="return confirm('Are you sure you want to delete?');"