2014-07-03 521 views
0

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

我一直在寻找,我发现这个职位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,所以我不知道回声不会直接打印到屏幕上。我只是将回声更改为删除查询,并对其进行了测试,并且它可以工作...所以代码很好,但我认为我应该在某个时候学习AJAX。感谢所有的答复。

我也意识到可能在这里的SQL注入,这只是一个快速的模拟,谢谢。

+0

这是一个不错的SQL注入漏洞。 –

+0

@André:信用在何处:至少OP知道'isset' ...对于OP:如果用户将您的按钮的值更改为_“%”_,那么在查询中使用该值会给出如下结果:'DELETE FROM myTable WHERE id =“%”',那不是你要求的安全,是吗? –

+0

这里:[我怎样才能防止SQL注入在PHP?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)与一个很好的例子注入准备好的语句,你几乎可以将它复制/粘贴到你的PHP代码中而不是'echo $ data'中并调整查询。 –

回答

1

从这个角度来看,我们很难帮到你。

你应该做一些调试,如:

  1. 检查相关ajax.php被称为(用“F12”,例如检查控制台)
  2. 如果是,检查所传递的数据通过您的AJAX POST
  3. 如果没有,也许参考链接错误

让我听到你得到了什么。

+0

在这种情况下,Javascript/AJAX部分看起来不错,只是作者不知道如何处理PHP部分,所以你的回答是无关紧要的。 –

+0

你是第二个燃烧的家伙,我认为这个社区即将是建设性的。 而不是浪费时间与该声明,更好地帮助他。 PHP部分看起来不错,顺便说一句。 Greetz – Thomas

+0

我没有燃烧,我只是告诉你,你的答案是无关紧要的,所以你可以改善它/删除它/之前有人来到它实际上火焰或downvotes你。而且我不确定如果在那里没有数据库查询,PHP部分的外观如何。 –

1

好的。首先你需要创建带有行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与你正在寻找删除行的id每个按钮。(更换23,24等进行数据库ID动态)。

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!"); 
?> 

我希望这将帮助你:)

1

您可以通过这种方式尝试。我认为这将有助于你

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'; 
} 
?>