尝试使用PHP中的delete按钮从表中删除整行
我试图使用函数从数据库中删除表中的整行, 我在函数中编写删除查询。但“删除”按钮不起作用。你怎么能做到 这是我的代码尝试使用PHP中的delete按钮从表中删除整行,php,phpmyadmin,Php,Phpmyadmin,我试图使用函数从数据库中删除表中的整行, 我在函数中编写删除查询。但“删除”按钮不起作用。你怎么能做到 这是我的代码 <?php include 'conn.php'; $result = ("SELECT * FROM usrdata"); $count = mysqli_query($conn, $result); echo'<table border=1px>'; // opening table tag echo'<th>id</th>
<?php
include 'conn.php';
$result = ("SELECT * FROM usrdata");
$count = mysqli_query($conn, $result);
echo'<table border=1px>'; // opening table tag
echo'<th>id</th><th>email</th><th>Password</th>';
while ($data = mysqli_fetch_array($count)) {
// we are running a while loop to print all the rows in a table
echo'<tr>'; // printing table row
echo '<td>' . $data['id'] . '</td><td>' . $data['email'] . '</td> <td>' . $data['password'] . '</td>';
echo '<td><input type="button" name="delete" value="delete"></td>';
}
echo'</tr>'; // closing table row
echo '</table>';
if ($_GET) {
if (isset($_GET['delete'])) {
delete();
}
}
function delete() {
$delete1 = ("DELETE FROM `usrdata` WHERE id = '$id'");
$result = mysqli_query($conn, $delete1) or die(mysqli_error());
echo "record deleted";
}
?>
为了说明上面的注释-函数不知道变量$id是什么,因为它没有在函数中定义。因此,您可以指定为参数。此外,delete
函数同样需要将$conn
变量定义为参数或函数本身的全局变量,我没有立即指出这一点
生成的HTML不正确-结束表行标记需要位于循环中,th
部分应该位于表行中
function delete($conn,$id){
$delete1 =("DELETE FROM `usrdata` WHERE id = '$id'");
$result = mysqli_query($conn,$delete1) or die(mysqli_error());
echo "record deleted";
}
或在函数中声明为global
function delete(){
global $id;
global $conn;
$delete1 =("DELETE FROM `usrdata` WHERE id = '$id'");
$result = mysqli_query($conn,$delete1) or die(mysqli_error());
echo "record deleted";
}
首先需要定义变量,即表单中带有ID的隐藏字段或其他定义变量的方法
更好的做法是将准备好的语句
与上述so结合使用
function delete( $conn=false, $id=false ){
if( $conn && $id ){
$sql='delete from `usrdata` where id = ?';
$stmt=$conn->prepare( $sql );
if( $stmt ){
$stmt->bind_param('i',$id);
$result=$stmt->execute();
$stmt->close();
echo $result ? 'record deleted' : 'error';
}
}
}
作为一个可能的解决方案,请原谅错误,您可以这样做:
该表完全包含在一个表单(delrecord
)中,其中有一个隐藏字段id
,该字段由一些javascript使用按钮dataset
属性数据id
分配一个值
<?php
include 'conn.php';
$result = ("SELECT * FROM usrdata");
$count=mysqli_query( $conn, $result );
if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST['id'] ) ){
function delete( $conn=false, $id=false ){
if( $conn && $id ){
$sql='delete from `usrdata` where id = ?';
$stmt=$conn->prepare( $sql );
if( $stmt ){
$stmt->bind_param('i',$id);
$result=$stmt->execute();
$stmt->close();
echo $result ? 'record deleted' : 'error';
}
}
}
$id=filter_input( INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT );
call_user_func( 'delete', $conn, $id );
}
echo'
<form name=\'delrecord\' method=\'post\'>
<input type=\'hidden\' id=\'h_id\' name=\'id\' />
<table border=1px>
<tr>
<th>id</th>
<th>email</th>
<th>Password</th>
<th> </th>
</tr>';
while( $data = mysqli_fetch_array( $count ) ) {
echo"
<tr>
<td>{$data['id']}</td>
<td>{$data['email']}</td>
<td>{$data['password']}</td>
<td><input data-id='{$data['id']}' type='button' name='delete' value='delete'></td>
</tr>";
}
echo '
</table>
</form>
<script>
var col=Array.prototype.slice.call( document.querySelectorAll("input[type=\'button\'][name=\'delete\']") );
col.forEach(function(bttn){
bttn.onclick=function(event){
document.getElementById("h_id").value=this.dataset.id;
document.forms.delrecord.submit();
}.bind(bttn)
})
</script>';
?>
1.您需要有一个id为record的表单,然后单击submit按钮才能提交内容
2.您需要将id
以及db连接对象
传递到delete
函数
您必须按照以下方式进行操作:-
<?php
include 'conn.php';
$result = ("SELECT * FROM usrdata");
$count=mysqli_query($conn,$result);
echo'<table border=1px>';
echo'<tr><th>id</th><th>email</th><th>Password</th><th>Action</th></tr>';
while($data = mysqli_fetch_array($count)){
echo'<tr>';
echo '<td>'.$data['id'].'</td><td>'.$data['email'].'</td> <td>'.$data['password'].'</td>';
echo '<td><form method="post"><input type="hidden" name = "id" value ="'.$data['id'].'"><input type="submit" name="delete" value="delete"></form></td>';//add form with id hidden field and submit button
echo'</tr>';
}
echo '</table>';
?>
<?php
if(isset($_POST['delete'])){
delete($_POST['id']); //pass the id to function
}
function delete($id,$conn)
{ // function with id as a parameter
$delete1 =("DELETE FROM `usrdata` WHERE id = '$id'");
$result = mysqli_query($conn,$delete1) or die(mysqli_error($conn));
echo "record deleted";
}
?>
出现任何错误?函数delete
不知道$id
是什么-要么将其作为参数传递,要么在函数中声明为全局。也就是说,这很容易受到sql注入的攻击--尝试两种方式都是如此,但都不起作用。我认为按钮点击事件未按下或未按下work@AlivetoDie请您解释一下如何在while循环中提交表单。我正在创建while循环中的按钮,所以如何在while循环中提交按钮。请尝试两种方法,但都不起作用。我想按钮点击事件没有被按下你有表格吗(在上面看不到)?在尝试使用delete
函数之前,您需要确保定义了变量$id,该函数还需要此变量-生成的html中有一个错误-结束
标记需要在循环中,否则您将在html中得到一个不正常的混乱,它肯定无法正常工作预期上述答案中有错误(已接受的答案),因此您需要编辑appropriately@aasifghanchi很高兴帮助你。我增加了注释和参考部分。请阅读并尝试相应地更改代码,使其免受SQL注入
的影响,当我在函数中运行没有conn.php文件的代码时,会出现此错误。那么,为什么要在函数中添加此文件并正常工作呢?@aasifghanchi请再次检查我的更新答案,因为我的HTML结构不正确。现在更正了