使用Ajax删除数据库行只会删除第一行,而不是删除选定的行

时间:2016-06-15 16:58:55

标签: php jquery mysql ajax

我正在使用下面的代码遍历我的数据库行并显示信息。每个表单都有一个删除按钮,应该从数据库中删除该行:

function show_scheduled_tweets () {
    global $wpdb;
    $query = "SELECT * FROM wp_tweettweet";
    $results = $wpdb->get_results($query, ARRAY_A);

    foreach($results as $result) {
        $tweet2 =  $result[text];
        $recycleOption = $result[recycle];
        $id = $result[id];
    ?>

        <form id="tweet-<?php echo $id; ?>" class="tweetclass form-inline" action="" method="post">
            <div class="checkbox">
                <label>
                    <input type="checkbox" name="recycle" <?php if($recycleOption == 1){ echo "checked";} ?>>Recycle Tweet?
                </label>
            </div>
            <div class="form-group"><input class="form-control" type="text" name="tweet" value="<?php echo $tweet2; ?>"></div>
            <div class="form-group"><input class="form-control" type="text" name="tweetdate"></div>
            <input type="hidden" name="id" value="<?php echo $id; ?>">
            <div class="form-group"><input class="form-control" type="text" name="timepicker" class="timepicker"/></div>
            <input class="tweetsubmit" type="submit" value="Save">
            <input class="tweetdelete" type="submit" value="delete">
        </form>
    <?php
    }
}
show_scheduled_tweets();

这是我的Ajax:

jQuery('.tweetdelete').click(function(event) {
    event.preventDefault();
    var id = jQuery('input[name="id"]').val();
    jQuery.ajax({
        type: "POST",
        url: ajaxurl,
        data: {
            'action': 'db_tables_delete',
            'id': id
        },
          beforeSend: function() {
              alert('before')
          },
          success: function(){
              alert('success')
          },
          error: function(){
              alert('error')
          },
    });
});

假设我有五行不同的数据显示。现在,无论我点击哪个删除按钮,总是会删除顶行。换句话说,如果单击第3行的删除按钮,将删除第一行。

2 个答案:

答案 0 :(得分:3)

根据您当前的代码 Official documents 返回第一个元素的值。查看val()

  

获取匹配元素集中第一个元素的当前值或设置每个匹配元素的值。

您需要根据点击的元素获取id值,使用 description from documentation

var id = jQuery(this).prevAll('input[name="id"]').val();

<小时/> 或 prevAll() 方法

var id = jQuery(this).siblings('input[name="id"]').val();

<小时/> 或 siblings() (或 closest() )和 parent()

var id = jQuery(this).closest('form').find('input[name="id"]').val();

答案 1 :(得分:0)

您对美国的选择并不特定于公司的推文。传递给JS函数的事件将携带一个目标(它将是单击的按钮),如果您将$ id回显到该按钮的数据属性,那么相关的id将在目标中可访问:< / p>

<input data-id="<?php echo $id;?>" class="tweetdelete" type="submit" value="delete">

并在你的JS中:

var id = jQuery(event.target).attr('data-id');