使用按钮从表中删除数据行

时间:2014-07-31 13:28:33

标签: php mysql sql wordpress

我正在尝试使用“删除”按钮从数据库中删除数据。

我的数据显示在一个表格中,我添加了一个带有按钮的额外列,该按钮应该只删除该行的数据。该网站在Wordpress上运行,带有自定义的插件。

这是我创建和填充表格的方式:

<table class="table table-hover table-bordered">
    <thead>
        <tr>
            <th>Fornavn</th>
            <th>Efternavn</th>
            <th>Email</th>
            <th>Virksomhed</th>
            <th>Fjern</th>
        </tr>
    </thead>

    <?php if ($members_array){
        foreach ($members_array as $member) { ?>
            <tr>
                <td><?php echo $member['firstname'] ?></td>
                <td><?php echo $member['lastname'] ?></td>
                <td><?php echo $member['email'] ?></td>
                <td><?php echo $member['company'] ?></td>
                <form id="cancel_form_admin" method="POST" action="">
                    <td><input type="submit" value="Fjern" name="fjern_kursist"/>
                    </td>
                </form>
            </tr>
    <?php }
            }?>                         
</table>

(此表仅对管理员可见)

我的删除功能在一个单独的网站上运行,用户必须填写他们的电子邮件地址,并将从数据库中删除。

我尝试复制该功能并将其粘贴到此处,但我遇到的问题是它从连接到该course_ID的表中删除了所有数据,而不仅仅是我点击该按钮的行中的电子邮件地址。< / p>

这是我用来从数据库中删除用户的代码:

$email = $member['email']; 

if(isset($_POST['fjern_kursist'])) {
    /*delete participant from db*/
    $delete_query = "DELETE from ";
    $delete_query .= $wpdb->prefix . "member_data ";
    $delete_query .= "WHERE email = '" . $email . "' AND course_id = '" . get_the_ID() . "'";
    $wpdb->query( $wpdb->prepare( $delete_query ));
}

如何修复我的代码,所以它只删除行中的数据我按“Fjern”(删除)按钮而不是每行都有“fjern”按钮?

2 个答案:

答案 0 :(得分:1)

尝试隐藏字段ID,如下所示:

<table class="table table-hover table-bordered">
    <thead>
        <tr>
            <th>Fornavn</th>
            <th>Efternavn</th>
            <th>Email</th>
            <th>Virksomhed</th>
            <th>Fjern</th>
        </tr>
    </thead>

    <?php if ($members_array){
        foreach ($members_array as $member) { ?>
            <tr>
                <td><?php echo $member['firstname'] ?></td>
                <td><?php echo $member['lastname'] ?></td>
                <td><?php echo $member['email'] ?></td>
                <td><?php echo $member['company'] ?></td>
                <form id="cancel_form_admin" method="POST" action="">
                    <td><input type="submit" value="Fjern" name="fjern_kursist"/>
<input type="hidden" value="<?php echo  $member['id'] ?>" name="member_id"/>

                    </td>
                </form>
            </tr>
    <?php }
            }?>                         
</table>

答案 1 :(得分:1)

您需要在表单中包含该成员的身份

<input type=hidden name="member_id" value="<? echo intval($member['id']); ?>">

然后可以在删除查询中使用它

$delete_query .= "WHERE member_id = " . intval($_POST['member_id']). " AND course_id = '" . get_the_ID() . "'";

使用intval作为避免SQL和HTML注入的快速方法。您真正需要了解的内容。 (对于像电子邮件这样的字符串,应该使用像htmlentities这样的东西,对于sql,使用真正准备好的查询,或者你使用的db库的引用函数。