【问题标题】:PHP - Deleting data with buttonsPHP - 使用按钮删除数据
【发布时间】:2014-07-03 13:20:34
【问题描述】:

我正在尝试创建一个列出数据库表中所有行的 HTML 表。然后,在每一行旁边我想要一个按钮,以便用户可以删除该条目。我已经创建了表格,但我无法让按钮工作。

我一直在四处寻找,我找到了这个帖子How to Call a PHP Function on the Click of a Button,但我无法让它工作。我以前从未使用过 ajax,所以我可能无法正确理解代码。

代码如下:

浏览表格中的所有数据并为每个条目创建一个按钮

<?php
for ($x = 0; $x < sizeof($data); $x++) {
?>
     <input type="submit" class="tableButton" name="<?php echo $x ?>" value="<?php echo $x ?>">
<?php
}    
?>

当一个 tableButton 被点击时,将它的值发送到 ajax.php

$('.tableButton').click(function () {
    var clickBtnValue = $(this).val();
    var ajaxurl = 'ajax.php',
    data = { 'action': clickBtnValue };
    $.post(ajaxurl, data, function (response) {
    });
});

ajax.php

获取被按下按钮的值并对其进行操作

<?php
if (isset($_POST['action'])) {
    $data = $_POST['action'];
    echo $data;
}
?>

目前我只是让它回显值来测试它,但它什么也没显示。我要做的是运行这个查询:

 DELETE from myTable WHERE id = $data;

或者如果有人知道更好的方法,请告诉我。

编辑

在进行了更多搜索后,我发现了为什么这没有按我的预期工作。正如我所怀疑的那样,由于我在错过某些东西之前从未使用过 AJAX,所以我不知道回声不会直接打印到屏幕上。我只是将 echo 更改为删除查询并对其进行了测试,它可以工作......所以代码很好,但我认为我应该在某个时候学习 AJAX。感谢大家的回复。

我也知道这里可能的 sql 注入,这只是一个快速的模型,谢谢。

【问题讨论】:

  • 这是一个不错的 SQL 注入漏洞。
  • @André:应得的信用:至少 OP 知道 isset... 给 OP:如果用户将按钮的值更改为 "%",在您的查询中使用该值给出:DELETE FROM myTable WHERE id = "%",这不是您所说的安全,是吗?
  • 这里:How can I prevent SQL-injection in PHP? 有一个很好的防注入准备语句示例,您几乎可以将其复制/粘贴到您的 PHP 代码中,而不是 echo $data 并调整查询。
  • 您给出的代码不应该显示任何内容,因为您对发布请求的response 什么都不做

标签: php jquery ajax button


【解决方案1】:

从我们得到的这个角度来看,很难为您提供帮助。

你应该做一些调试,比如:

  1. 检查是否调用了关联的ajax.php(例如通过使用“F12”检查控制台)
  2. 如果是,请检查通过 ajax POST 传递的数据
  3. 如果不是,可能是参考链接错误

让我听听你得到了什么。

【讨论】:

  • 在这种情况下Javascript/AJAX部分看起来不错,只是作者不知道PHP部分要做什么,所以你的回答是无关紧要的。
  • 你是第二个发火的人,嗯,我以为这个社区即将变得有建设性。与其在那个声明上浪费时间,不如帮助他。顺便说一句,PHP 部分看起来也不错。问候
  • 我没有发火,我只是告诉你你的答案是无关紧要的,所以你可以在有人来之前改进它/删除它/不管它实际上激怒了你或否决了你。如果那里没有数据库查询,我不确定 PHP 部分看起来如何。
  • 对,我们无处可逃。再次阅读问题,PHP 部分是正确的,在此示例中,他只是想显示任何内容,正如他所写的那样。我猜问题的正确答案是由顶部的“最后”给出的。问候
【解决方案2】:

你可以试试这个方法。我想对你有帮助

HTML 文件

<html>
<head>
<title>Test</title>
</head>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script>
$('.tableButton').live('click', function(){
    var id = $(this).val();
    $.ajax({
        url:'ajax.php'
        ,data:{id:id}
        ,type:'post'
        ,success:function(data){
            if(data == 'success'){
                $('#' + id).remove();
            }
        }
    });
});
</script>
<?php
  for ($x = 0; $x < 5; $x++) {
?>
<input type="submit" class="tableButton" id="<?=$x?>" name="<?php echo $x ?>"value="<?php echo $x ?>">
<?php
 }
 ?>
 </body>
 </html>

ajax.php

<?php
if(isset($_POST['id'])){
    $id = $_POST['id'];
    //delete operation here
    //if(deleted) echo 'success';
}
?>

【讨论】:

    【解决方案3】:

    好的。首先,您需要创建带有行 ID 的按钮。您可以使用 mySQL 和 PHP 循环来完成。按照以下格式创建它。

    <input type="submit" name="test" data-id="23" value="Remove" class="delete_row" />            
    <input type="submit" name="test" data-id="24" value="Remove" class="delete_row" />            
    <input type="submit" name="test" data-id="25" value="Remove" class="delete_row" />            
    <input type="submit" name="test" data-id="26" value="Remove" class="delete_row" />  
    

    这里用您要删除的行的 id 替换每个按钮中的 data-id。(用数据库 id 动态替换 23,24 等)。

    Java 脚本

    $(document).ready(function(){
    
        $(".delete_row").click(function(e){
    
            e.preventDefault();
            var deleteId = $(this).attr("data-id");//unique id of the raw to be deleted
    
            var request = $.ajax({
            url: "ajax.php",
            type: "POST",
            data: { id : deleteId },
            dataType: "json"
            });
            request.done(function( msg ) {
    
               if( msg.status )
                   alert("Deleted successfully!");
               else
                   alert("Something gone wrong!!");
            });
            request.fail(function( jqXHR, textStatus ) {
               alert( "Request failed: " + textStatus );
    
    
            });
    
        });
    
    
    });
    

    ajax.php

    <?php
       /* AJAX check  */
       if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    
           $delete_id = $_POST["id"];
           if( is_numeric( $delete_id ) ){
    
                /*DELETE QUERT WHERE id = $delete_id (Try to use mysqli or PDO ) */
                /* $affected_rows = effected_rows() */
    
                if( $affected > 0 ) 
                {
                    echo json_encode( array("status" => true ) );die;
                }
    
            }
            echo json_encode( array("status" => false ) );die;
         }
         die("Get out of here!");
    ?>
    

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-05
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多