Php я не могу удалить строку таблицы

0

Я не могу удалить строку, которую я выбираю, с удалением ввода. Я думаю, что мне нужно установить другие параметры в querydelete, но я точно не знаю.

Может ли кто-нибудь помочь мне, потому что я начинающий? Есть ли другой способ сделать что-то подобное?

Моя цель - нажать ввод удаления, а затем удалить клиента с определенным идентификатором (в том же сыром с вводом удаления).

Может ли кто-нибудь дать мне ссылку с примером?

 <!DOCTYPE html>
 <html>
 <head>
 <title>Table with database</title>
<style>
 table {
  border-collapse: collapse;
 width: 100%;
  color: #588c7e;
  font-family: monospace;
  font-size: 25px;
  text-align: left;
   } 
th {
  background-color: #588c7e;
  color: white;
   }
 tr:nth-child(even) {background-color: #f2f2f2}
  </style>
  </head>
  <body>
  <table>
  <tr>
  <th>ID</th> 
  <th>Room</th> 
  <th>Name</th>
  <th>Check In</th> 
  <th>Check Out</th> 
   </tr>

 <?php

  include('db_connection.php');
  $conn = OpenCon();

    //SQL query 
     $query = "Select * from ergazomenos"; 

    if(isset($_POST['delete'])){
    $querydelete = "delete from ergazomenos where trim(ID) 
    ='$_POST[hidden]'";
   $queryexee = mysqli_query($conn, $querydelete);

    }

    $result = mysqli_query($conn, $query); 

    if (!$result){
       echo("Error description: " . mysqli_error($conn));
    }


    //query database 

    while($rows = mysqli_fetch_array($result)){

         $ID = $rows['ID'] ;
            $Room = $rows['Room'] ;
         $Name = $rows['Name'];
         $CheckIn = $rows['Check In'] ;
         $CheckOut = $rows['Check Out'] ;




        //echo "</td><td>" . $ID. "</td><td>" "<input type=hidden ID=hidden 
value=" . $rows['ID'] . $Room. "</td><td>". $Name. "</td><td>" . $CheckIn. " 
</td><td>" . $CheckOut. "</td><td>";


            echo "</td><td>" . $ID. "</td><td>" . $Room. "</td><td>". $Name. 
  "</td><td>" . $CheckIn. "</td><td>" . $CheckOut. "</td><td>"; 
            </td>";


        echo ("<form action=delete.php method=post>");
        echo ("<tr><td><div align=\"center\"> $ID </div>" . "<input 
        type=hidden name=hidden value=".$rows['ID'] . "</td> <td><div 
        align=\"center\"> 
      $Room </div></td> <td><div align=\"center\"> $Name </div></td> <td><div 
  align=\"center\"> $CheckIn </div></td> <td><div align=\"center\"> $CheckOut 
  </div></td> <td><div align=\"center\">  <td><div   ");    
        echo ("<td>" . "<input type=submit name=delete value=delete"  . " 
  </td>");      
        //    
          echo ($rows['ID']);
                //echo '<td><input type="button" name="delete" 
  value="delete"></td>';
                echo ("</tr>");
       echo ($_POST['hidden']);
      }  


  CloseCon($conn);



   ?> 

    </table>


  <button type="button" onclick="alert('Hello world!')">Insert</button>
  <button type="button" onclick="alert('Hello world!')">Update</button>


</body>
</html>
  • 0
    Приведите пример строки данных в БД. Это поможет людям понять, является ли ID числовым.
Теги:

4 ответа

1

Вы должны использовать инструкцию подготовки для предотвращения SQL-инъекций

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$id = $_POST['hidden'];

// if you are using ID, make sure variable is number
if (is_numeric(id)) {

delete from ergazomenos where trim(ID) 
    ='$_POST[hidden]'

/* create a prepared statement */
if ($stmt = mysqli_prepare($link, "DELETE FROM ergazomenos WHERE trim(ID) = ?")) {

    /* bind parameters for markers */
    mysqli_stmt_bind_param($stmt, "s", $id);

    /* execute query */
    mysqli_stmt_execute($stmt);

    /* close statement */
    mysqli_stmt_close($stmt);
}

/* close connection */
mysqli_close($link);
}
?>

он более безопасен таким образом.

0

Вы должны использовать (одиночные или экранированные двойные) кавычки для значений атрибутов в ваших тегах input/input:

<input type='hidden' name='hidden' [etc.]
0

Попробуйте сменить запрос $ querydelete:

$querydelete = "delete from ergazomenos where trim(ID) 
='$_POST[hidden]'";

в

$querydelete = "delete from ergazomenos where trim(ID)=". $_POST['hidden'];

Это должно помочь. Я не тестировал код, тo.

  • 1
    я бы также добавил немного дезинфекции, например. php.net/manual/en/function.filter-input.php
  • 0
    но конечно :) это необходимо в наши дни.
0

Разделите мой стиль.

Создайте столбец в сетке с именем Action и вдоль каждой записи, управляемой db.

<td>
    <a href="delete.php?id=<?php echo $rows['ID'];?>">Delete</a>
</td>

В файле delete.php:

include('connection.php');
$id = $_GET['id'];
$query= "delete from table where id = '$id'";
mysqli_query($conn, $query); // or $dbConn->query($query);

Перенаправление на страницу сетки.

  • 0
    Это плохой стиль. Вы не должны отправлять действия, которые изменяют состояние с помощью GET , потому что браузерам разрешено предварительно выбирать ссылки, тем самым вызывая автоматическое удаление всех записей в списке.
  • 0
    Да, согласился. Может быть в стиле пост или API. Я поделился с автором вопроса и более простым способом, чем его стиль.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню