PHP удаление строки из таблицы нажатием кнопки

#php #html

#php #HTML

Вопрос:

У меня возникла проблема с передачей идентификатора кнопки для удаления строки в соответствии с идентификатором. Что я должен сделать, чтобы правильно передать идентификатор?

    <form method="POST" >
                <table border="1">
                    <tr>
                        <th>Student Name</th>
                        <th>Matric Number</th>
                        <th>IC Number</th>
                        <th></th>
                        <th></th>
                    </tr>
                    <?php
                        $link=mysqli_connect("localhost","root","") or die(mysqli_error());
                        mysqli_select_db($link,"myDataBase") or die(mysqli_error());
                        $query="Select * From student" or die(mysqli_error());
                        $result=mysqli_query($link,$query);

                        if($result->num_rows > 0) {
                        while($row = $result->fetch_assoc()) {
                            echo "<tr><td>".$row["name"]."</td><td>".$row["matric"]."</td><td>".$row["ic"]."</td>
                            <td><input type=button value=Update></td><td><input type=submit value=Delete name=delete ><input type=hidden name=id value=".$row["id"]." ></td></tr>";     
                        }   
                        }else{  
                            die("0 results");
                        }
                        if (isset($_POST['delete'])){
                            echo $did=$_POST['id'];
                            $query="Delete From student where id='$did'";
                            $result=mysqli_query($link,$query);
                        }
                    ?>
                </table>
            </form>
  

Комментарии:

1. Предупреждение: вы широко открыты для SQL-инъекций и должны действительно использовать параметризованные подготовленные операторы вместо ручного построения ваших запросов. Они предоставляются PDO или MySQLi . Никогда не доверяйте никаким входным данным, особенно тем, которые поступают со стороны клиента. Даже если ваши запросы выполняются только доверенными пользователями, вы все равно рискуете повредить свои данные .

Ответ №1:

Проблема в том, что все скрытые поля, содержащие идентификаторы учащихся, помещаются в одну форму. Поэтому ID при нажатии любой кнопки удаления всегда отображается последнее скрытое поле. Поместите свой form тег внутри Delete столбца для каждой строки отдельно, тогда будет опубликован только идентификатор выбранной строки. Также размещайте SELECT запрос за DELETE запросом, чтобы обновлять таблицу HTML сразу после удаления. Вам также необходимо избегать внедрения SQL.

 <?php

$link = mysqli_connect( "localhost", "root", "" ) or die( mysqli_error() );
mysqli_select_db( $link, "myDataBase" ) or die( mysqli_error() );

// delete record
if( isset( $_POST['delete'] ) ) {

    echo $did = $_POST['id'];
    $query = $link->prepare( "DELETE FROM student WHERE id=?" );
    $query->bind_param( "s", $did );
    $query->execute();
}

// get all records
$query = "SELECT * FROM student" or die( mysqli_error() );
$result = mysqli_query( $link, $query );

?>

<table border="1">

    <tr>
        <th>Student Name</th>
        <th>Matric Number</th>
        <th>IC Number</th>
        <th>Update</th>
        <th>Delete</th>
    </tr>

    <?php

        if( $result->num_rows > 0 ) {

            while( $row = $result->fetch_assoc() ) {

                echo "<tr>";
                echo "<td>" . $row["name"] . "</td>";
                echo "<td>" . $row["matric"] . "</td>";
                echo "<td>" . $row["ic"] . "</td>";
                echo "<td><input type=button value=Update></td>";
                echo "<td><form method='POST'>
                <input type=hidden name=id value=".$row["id"]." >
                <input type=submit value=Delete name=delete >
                </form>
                </td>";
                echo "</tr>";
            }

        } else {  
            die("0 results");
        }  
    ?>

</table>
  

Вы также можете создавать ссылки на удаление (т.е. test.php?delete_id=100) для каждой строки отдельно вместо создания form и GET идентификатора для удаления на стороне сервера.

Комментарии:

1. Большое спасибо за вашу помощь, сэр! Но что вы имеете в виду под ссылками на удаление? Это для создания test.php файл и выполнить удаление там?

2. test.php может быть ваш текущий файл с этим кодом, но метод будет изменен с POST на GET . Вы должны использовать $did = $_GET['id']; , чтобы получить идентификатор удаляемой записи. Это всего лишь второй вариант. Текущая версия также работает нормально.

Ответ №2:

Вам нужно изменить свой запрос:

  $query="Delete From student where id=$did";  
  

вместо

  $query="Delete From student where id='$did'";  
  

Комментарии:

1. Если $did это целое число, довольно плохо преобразовать его в строку