我正在尝试使用“删除”按钮从数据库中删除数据。
我的数据显示在一个表格中,我添加了一个带有按钮的额外列,该按钮应该只删除该行的数据。该网站在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”按钮?
答案 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库的引用函数。