[MySQL][PHP]problem z usuwaniem rekordów |
[MySQL][PHP]problem z usuwaniem rekordów |
13.01.2023, 19:09:29
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.01.2023 Ostrzeżenie: (0%) |
Witam, mam problem z dodaniem funkcjonalności która pozwoli usuwać z tabelki konkretne rekordy. Wygląda to tak:
$mysqli = new mysqli("localhost", "root", "" , "magazyn"); $id = $_GET["id"]; $usun = "DELETE FROM zlecenia_mag WHERE id='$id'"; mysqli_query($mysqli, $usun); mysqli_close($mysqli); błąd: wyskakuje mi przy poleceniu get, mam 3 tabelki a polecenie GET pobiera id z tabeli pierwszej. Jak zrobić żeby pobierał z tabeli drugiej? Proszę o pomoc, góry dzięki! |
|
|
13.01.2023, 19:24:36
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 762 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
GET/get to nie jest polecenie, a zmienna.
W $_GET['id'] jest wartość jaką przekażesz w query string, np. index.php?id=100 Jeśli chcesz, aby znajdywała się tam wartość z id konkretnego rekordu, to taki link musisz spreparować i wstawić w kodzie HTML. -------------------- |
|
|
13.01.2023, 19:33:31
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.01.2023 Ostrzeżenie: (0%) |
Pokazuje jak to u mnie wygląda, mam wrażenie że robię jakiś głupi błąd, nie za bardzo rozumiem jak miałbym zrobić to o czym mówisz. Wstawiam więcej kodu:
Męczę się z tym od kilku dni i próbuje na różne sposoby ale już nie mam pomysłów :/ <table> <tr> <th>Nazwa towaru</th> <th>Ilość towaru w produkcji</th> <th>Ilość towarów uszkodzonych</th> <th>Ilość towarów gotowych</th> <th>Data zlecenia</th> </tr> <?php $connection = mysqli_connect('localhost', 'root', '', 'magazyn'); $result = mysqli_query($connection, "SELECT zlecenia_id nazwa, ilosc_produkcja, ilosc_uszkodzone, ilosc_gotowe, data FROM zlecenia_mag ORDER BY data DESC"); while ($row = mysqli_fetch_row($result)) { if ($row[3] > $row[4]) echo '<tr class="uszkodzone">'; else echo '<tr class="gotowe">'; echo '<td>'.$row[0].'</td>'; echo '<td>'.$row[1].'</td>'; echo '<td>'.$row[2].'</td>'; echo '<td>'.$row[3].'</td>'; echo '<td>'.$row[4].'</td>'; echo '<td><a href="index.php?id='.$row[0].'">Usuń</a></td>'; } mysqli_close($connection); $mysqli = new mysqli("localhost", "root", "" , "magazyn"); // tak nas uczą na studiach, podobny przykład był na zadaniu w uczelni tylko tam była jedna tabelka i to działało $id = $_GET["zlecenia_id"]; $usun = "DELETE FROM zlecenia_mag WHERE id='$id'"; mysqli_query($mysqli, $usun); mysqli_close($mysqli); ?> </table> Ten post edytował polkm2000 13.01.2023, 19:42:57 |
|
|
13.01.2023, 19:51:17
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
A to $id = $_GET["zlecenia_id"]; skąd się bierze? W kodzie masz index.php?id='.$row[0] przy czym indeks 0 to nazwa a nie id.
-------------------- |
|
|
13.01.2023, 19:55:57
Post
#5
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.01.2023 Ostrzeżenie: (0%) |
Sugerowałem się tym:
Undefined array key id to błąd ktory mi wyskoczył Ten post edytował polkm2000 13.01.2023, 19:56:29 |
|
|
13.01.2023, 20:05:20
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
A masz w tej tabeli w ogóle kolumnę zlecenia_mag.id? Bo wybierasz zlecenia_id i chcesz na tej podstawie kasować id. Mylisz zmienne GET. i nie zgadza się ilość th z td.
-------------------- |
|
|
13.01.2023, 20:18:59
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 762 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Tu brakuje przecinka, będziesz miał przesunięte dane w zmiennej $row; -------------------- |
|
|
13.01.2023, 23:02:15
Post
#8
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.01.2023 Ostrzeżenie: (0%) |
A masz w tej tabeli w ogóle kolumnę zlecenia_mag.id? Bo wybierasz zlecenia_id i chcesz na tej podstawie kasować id. Mylisz zmienne GET. i nie zgadza się ilość th z td. mam kolumne: "zlecenia_id" Udało mi się już rozwiązać problem usuwania: <form action="index.php" method="post"> <label>Nazwa towaru: </label> <input type="text" name="nazwa"> <br><br> <label>Ilośc gotowych towarów: </label> <input type="number" name="gotowe"> <br><br> <label>Ilość towarów uszkodzonych: </label> <input type="number" name="uszkodzone"> <br><br> <label>Ilość towarów w produkcji: </label> <input type="number" name="produkcja"> <br><br> <label>Data zlecenia </label> <input type="date" name="data"> <br><br> <button class="btn" type="submit">Wyślij</button> </form> <?php if (!empty($_POST['nazwa'])) { echo var_dump($_POST['nazwa']); $connection = mysqli_connect('localhost', 'root', '', 'magazyn'); $nazwa = $_POST["nazwa"]; $gotowe = $_POST["gotowe"]; $uszkodzone = $_POST["uszkodzone"]; $produkcja = $_POST["produkcja"]; $data = $_POST["data"]; $result = mysqli_query($connection, "INSERT INTO zlecenia_mag(nazwa, ilosc_gotowe, ilosc_produkcja, ilosc_uszkodzone, data) VALUES('$nazwa', '$gotowe', '$produkcja','$uszkodzone', '$data');"); mysqli_close($connection); unset($_POST); header("Location: ".$_SERVER['PHP_SELF']); } ?> <table> <tr> <th>ID</th> <th>Nazwa towaru</th> <th>Ilość towaru w produkcji</th> <th>Ilość towarów uszkodzonych</th> <th>Ilość towarów gotowych</th> <th>Data zlecenia</th> </tr> <?php $connection = mysqli_connect('localhost', 'root', '', 'magazyn'); $result = mysqli_query($connection, "SELECT zlecenia_id, nazwa, ilosc_produkcja, ilosc_uszkodzone, ilosc_gotowe, data FROM zlecenia_mag ORDER BY data DESC"); while ($row = mysqli_fetch_row($result)) { if ($row[3] > $row[4]) echo '<tr class="uszkodzone">'; else echo '<tr class="gotowe">'; echo '<td>'.$row[0].'</td>'; echo '<td>'.$row[1].'</td>'; echo '<td>'.$row[2].'</td>'; echo '<td>'.$row[3].'</td>'; echo '<td>'.$row[4].'</td>'; echo '<td>'.$row[5].'</td>'; echo '<td><a href="index.php?id='.$row[0].'">Usuń</a></td>'; } mysqli_close($connection); $mysqli = new mysqli("localhost", "root", "" , "magazyn"); $row[0] = $_GET["id"]; $usun = "DELETE FROM zlecenia_mag WHERE zlecenia_id='$row[0]'"; mysqli_query($mysqli, $usun); mysqli_close($mysqli); ?> </table> Ale nadal wyskakuje błąd w linijce $row[0] = $_GET["id"]; Po pierwszym kliknięciu usuń znika błąd: Undefined array key "id" Po drugim kliknięciu usuwa rekord Ale dalej nie rozumiem co jest nie tak ;(( Ten post edytował polkm2000 14.01.2023, 00:00:31 |
|
|
14.01.2023, 00:00:09
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
-------------------- |
|
|
14.01.2023, 00:18:15
Post
#10
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.01.2023 Ostrzeżenie: (0%) |
Niestety nic mi to nie mówi, mógłbyś podpowiedzieć lub dać wskazówki w którą stronę się kierować lub co powinienem zrobić a sam poszukam rozwiązania. z góry dzięki! |
|
|
14.01.2023, 15:05:51
Post
#11
|
|
Grupa: Zarejestrowani Postów: 347 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
Po pierwsze, to nie pobiera się wartości bezpośrednio z $_GET czy $_POST. Jeżeli już to robisz, bo np. się uczysz, to musisz pamiętać, że to jest po prostu globalna tablica. Jeżeli wiesz co to jest tablica w programowaniu i jak działa, to już jesteś na dobrej drodze.
Błąd, który dostajesz, informuje cię o braku wymaganego klucza - w twoim przypadku "id". Jakbyś popracował trochę z tablicami, to problem byłby błahy. Musisz pamiętać, że w tablicy może nie być klucza, który próbujesz pobrać. Dlatego zanim zrobisz przypisanie, musisz sprawdzić czy klucz w tablicy istnieje. Jest kilka rozwiązań Twojego problemu, jednak najpopularniejszym będzie to:
Ten post edytował Salvation 14.01.2023, 15:35:17 |
|
|
16.01.2023, 09:50:03
Post
#12
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.01.2023 Ostrzeżenie: (0%) |
Dzięki faktycznie pomogło, usuwa dany rekord i nie wyświetla błędu, jedynie zastanawia mnie dlaczego trzeba kliknąć 2 razy usuń aby rekord został usunięty.
Domyślam się że trzeba pokombinować przy tej linijce kodu: echo '<td><a href="index.php?id='.$row[0].'">Usuń</a></td>'; Lub zmienić coś przy przycisku wyślij Ten post edytował polkm2000 16.01.2023, 09:51:35 |
|
|
16.01.2023, 09:57:33
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Zapewne usuwa za pierwszym razem ale ponieważ kasowanie masz po wyświetlaniu to pokaże to dopiero po odświeżeniu strony.
-------------------- |
|
|
16.01.2023, 10:37:55
Post
#14
|
|
Grupa: Zarejestrowani Postów: 347 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
Przekierowanie na tą samą stronę po usunięciu powinno rozwiązać problem.
|
|
|
16.01.2023, 10:54:03
Post
#15
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.01.2023 Ostrzeżenie: (0%) |
Dzięki przekierowanie pomogło D
A mam pytanie jeszcze odnośnie dodanie klasy żeby mój link lepiej wyglądał jeżeli dodaje class="btn" to mi nie działa, oczywiście w css jest wszystko dobrze bo przycisk wyślij ma tą samą klase i działa echo '<td><a href="index.php?id='.$row[0].'" class="btn" >Usuń</a></td>'; Jakaś podpowiedź? |
|
|
16.01.2023, 10:58:38
Post
#16
|
|
Grupa: Moderatorzy Postów: 36 459 Pomógł: 6297 Dołączył: 27.12.2004 |
Cytat Dzięki przekierowanie pomogło Przekierowanie tylko zamaskowalo problem jaki masz. Przeciez to jest prosta logika: teraz najpierw wyswietlasz dane z bazy, potem kasujesz dane z bazy i sie dziwisz ze na wyswietlaniu przed kasowaniem te dane sa.... Najpierw sie kasuje, potem sie wyswietla. Przeciez to jest tak logiczne i oczywiste. Wowczas nie ma problemu ktory to zaobserwowales. Co to klasy to przeciez button i A to dwie rozne rzeczy ktore leza w innych miejscach a klasa w css jest pewnie tak skonstruwaona ze dziala tylko dla tego buttona -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
16.01.2023, 11:05:49
Post
#17
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.01.2023 Ostrzeżenie: (0%) |
tak mam przygotowany css:
.btn{ text-decoration: none; color: black; background-color: #ffffff; padding: 0px 25px; } .btn:hover{ color: white; background-color: #000000; } |
|
|
16.01.2023, 14:07:43
Post
#18
|
|
Grupa: Zarejestrowani Postów: 347 Pomógł: 70 Dołączył: 15.07.2014 Ostrzeżenie: (0%) |
@nospor ma rację co do tego skryptu na usuwanie rekordu.
Zasada główie jest taka, że najpierw wykonywalny kod PHP (najlepiej zamknięty co najmniej w funkcjach), a dopiero później echo i wyświetlenie HTML-a. A wracając do problemu z buttonem, to ciężko pomóc, bo CSS jest poprawny, ale skoro nie widać zmian, to coś musi go nadpisywać. A żeby to pomóc musielibyśmy mieć dostęp do LIVE strony, którą robisz. Ewentualnie sam to ogarnij używając "zbadaj element". |
|
|
16.01.2023, 15:50:00
Post
#19
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 13.01.2023 Ostrzeżenie: (0%) |
Udało mi się rozwiązać problem wyglądu (problem był w tym że class='btn' było w złym miejscu z usuwaniem jeszcze podziałam.
Dzięki za pomoc! |
|
|
Wersja Lo-Fi | Aktualny czas: 2.05.2024 - 22:23 |