Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MySQL zapytanie usuwające wiersz o konkretnym id.
Peperoni
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.08.2019

Ostrzeżenie: (0%)
-----


Witam,
piszę stronkę na zaliczenie i mam w panelu administracyjnym tabelę z menu do której ładnie się dodaje i usuwa kiedy podam konkretne ID. Zrobiłem obok wiersza w tabeli html przycisk usuń i chciałbym żeby usuwał dokładnie ten wiersz do którego jest przypisany.

Tutaj kod tworzący tabelę i wypełniający ją danymi z bazy:

  1. require_once ('../db_connect.php');
  2.  
  3. if ($result = $polaczenie->query("SELECT * FROM jadlospis ORDER BY ID")){
  4. if($result->num_rows > 0) {
  5. echo '<div class="card mb-3">';
  6. echo '<div class="card-header">';
  7.  
  8. echo 'Jadłospis</div>';
  9. echo '<div class="card-body">';
  10. echo '<div class="table-responsive">';
  11.  
  12. echo '<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">';
  13. echo '<thead>';
  14. echo "<tr>
  15. <th>ID </th>
  16. <th>Dzień </th>
  17. <th>Śniadanie </th>
  18. <th>Obiad</th>
  19. <th>Podwieczorek</th>
  20. <th>Usuń/Popraw</th>
  21. </tr>";
  22.  
  23. echo '</thead>';
  24.  
  25. while($row = $result->fetch_object()){
  26. echo '<tbody>';
  27. echo "<tr>";
  28.  
  29. echo "<td>" . $row ->id . "</td>";
  30. echo "<td>" . $row ->dzien . "</td>";
  31. echo "<td>" . $row ->sniadanie . "</td>";
  32. echo "<td>" . $row ->obiad . "</td>";
  33. echo "<td>" . $row ->podwieczorek . "</td>";
  34.  
  35. echo "<td> <input type=submit class=btn btn-primary btn-block name=idusun value=usuń> </td>";
  36.  
  37.  
  38.  
  39. echo "</tr>";
  40. echo '<tbody>';
  41.  
  42. }
  43.  
  44. echo "</table>";



Zapytanie SQL pod Submita wygląda następujaco:

  1. if (isset($_POST['idusun']))
  2. {
  3.  
  4. //Udana walidacja
  5. $wszystko_OK=true;
  6.  
  7. $userid = $_SESSION['user'];
  8.  
  9.  
  10.  
  11. [sql]$delete = "DELETE FROM `jadlospis` WHERE `ID` = id";[/sql]
  12.  
  13. //Połączenie z bazą
  14.  
  15. require_once "../db_connect.php";
  16. mysqli_report(MYSQLI_REPORT_STRICT);
  17.  
  18. try
  19. {
  20. $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
  21. if ($polaczenie->connect_errno!=0)
  22. {
  23. throw new Exception(mysqli_connect_errno());
  24. }
  25. else
  26. {
  27.  
  28. if ($polaczenie->query($delete))
  29. {
  30. $_SESSION['udanezamowienie']=true;
  31. header('Location: form-basic.php');
  32. }
  33. else
  34. {
  35. throw new Exception($polaczenie->error);
  36. }
  37.  
  38. }
  39.  
  40. }
  41.  
  42. catch(Exception $e)
  43. {
  44. echo '<span style="color:red;">Coś się popsuło!</span>';
  45. echo '<br />Informacja developerska: '.$e;
  46. }
  47.  
  48. }


Niestety usuwa ono wszystkie wiersze, a chciałbym tylko jeden.
Proszę bardzo o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Zmień to sobie najlepiej na formularz dla każdego wiersza który np w input hidden będzie zawierał id do usunięcia.
Go to the top of the page
+Quote Post
Peperoni
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.08.2019

Ostrzeżenie: (0%)
-----


Zrobiłem tak jak poradziłeś:
  1. echo "<input type=hidden name=idusun value=".$row->id.">";
  2.  
  3. $usun = $_POST['idusun'];
  4. $delete = "DELETE FROM `jadlospis` WHERE `ID` = '$usun'";


I teraz usuwa mi po kolei od najwyższego ID niezależnie od tego, w którym wierszu wcisnę usuń. W źródle strony sprawdzałem, php pokazuje po kolei wartości ID każdego wiersza.

Ten post edytował Peperoni 30.08.2019, 05:45:24
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Pokaż cały wygenerowany html tego fragmentu.
Go to the top of the page
+Quote Post
Tomplus
post
Post #5





Grupa: Zarejestrowani
Postów: 1 884
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Nie musi nic pokazywać. Zamknął w <form> wszystkie input-hidden więc wiadomo, że formularz po wysłaniu będzie odczytywał ostatnią taką zmienną.

@peperoni
Zamiast input-submit daj button-submit. Jest to lepsze rozwiązanie, i pominiesz problem który masz wyżej:
  1. echo "<td> <button type='submit' class='btn btn-primary btn-block' name='idusun' value='".$row->id."'>usuń</button> </td>";

Teraz nie potrzebujesz input-hidden, a wartość _POST[idusun] zostanie poprawnie przesłana jednym kliknięciem.

Dobrym zwyczajem jest zamykanie w cudzysłowie podwójne lub pojedyńcze wartości atrybutów tagów HTML.
Go to the top of the page
+Quote Post
Peperoni
post
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.08.2019

Ostrzeżenie: (0%)
-----


Działa jak powinno. Dzięki wielkie.
Go to the top of the page
+Quote Post
viking
post
Post #7





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Ja to wiem ale przy okazji chciałem nauczyć żeby czasami sprawdzać wygenerowany kod czy zgadza się z tym co być powinno. I też pokazać że to co zrobił nijak ma się do mojej odpowiedzi. W tym kodzie nie było też żadnego formularza co jest niepoprawne.
Jeszcze kolejna rzecz. Rzutuj to id na int chyba że chcesz atak sql injection.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 07:19