Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用PHP中的delete按钮从表中删除整行_Php_Phpmyadmin - Fatal编程技术网

尝试使用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>&nbsp;</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结构不正确。现在更正了