Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]problem z usuwaniem rekordów
polkm2000
post 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!
Go to the top of the page
+Quote Post
trueblue
post 13.01.2023, 19:24:36
Post #2





Grupa: Zarejestrowani
Postów: 6 761
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.


--------------------
Go to the top of the page
+Quote Post
polkm2000
post 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
Go to the top of the page
+Quote Post
viking
post 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.


--------------------
Go to the top of the page
+Quote Post
polkm2000
post 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
Go to the top of the page
+Quote Post
viking
post 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.


--------------------
Go to the top of the page
+Quote Post
trueblue
post 13.01.2023, 20:18:59
Post #7





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Cytat(polkm2000 @ 13.01.2023, 19:33:31 ) *
  1. SELECT zlecenia_id nazwa, ilosc_produkcja,

Tu brakuje przecinka, będziesz miał przesunięte dane w zmiennej $row;


--------------------
Go to the top of the page
+Quote Post
polkm2000
post 13.01.2023, 23:02:15
Post #8





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 13.01.2023

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


Cytat(viking @ 13.01.2023, 20:05:20 ) *
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
Go to the top of the page
+Quote Post
viking
post 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%)
-----


https://www.php.net/manual/en/function.isset.php


--------------------
Go to the top of the page
+Quote Post
polkm2000
post 14.01.2023, 00:18:15
Post #10





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 13.01.2023

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


Cytat(viking @ 14.01.2023, 00:00:09 ) *


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!
Go to the top of the page
+Quote Post
Salvation
post 14.01.2023, 15:05:51
Post #11





Grupa: Zarejestrowani
Postów: 344
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:
  1. $orderId = $_GET['id'] ?? null;
  2.  
  3. if (is_int($orderId)) {
  4. $orderId = (int)$orderId;
  5. }
  6.  
  7. if ($orderId !== null && $orderId > 0) {
  8. $mysqli = ...;
  9. mysqli_query($mysqli, sprintf('DELETE FROM zlecenia_mag WHERE zlecenia_id=\'%d\'', $orderId));
  10. mysqli_close($mysqli);
  11. }


Ten post edytował Salvation 14.01.2023, 15:35:17
Go to the top of the page
+Quote Post
polkm2000
post 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
Go to the top of the page
+Quote Post
viking
post 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.


--------------------
Go to the top of the page
+Quote Post
Salvation
post 16.01.2023, 10:37:55
Post #14





Grupa: Zarejestrowani
Postów: 344
Pomógł: 70
Dołączył: 15.07.2014

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


Przekierowanie na tą samą stronę po usunięciu powinno rozwiązać problem.
Go to the top of the page
+Quote Post
polkm2000
post 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 biggrin.gifD

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ź?
Go to the top of the page
+Quote Post
nospor
post 16.01.2023, 10:58:38
Post #16





Grupa: Moderatorzy
Postów: 36 457
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

Go to the top of the page
+Quote Post
polkm2000
post 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;
}
Go to the top of the page
+Quote Post
Salvation
post 16.01.2023, 14:07:43
Post #18





Grupa: Zarejestrowani
Postów: 344
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".
Go to the top of the page
+Quote Post
polkm2000
post 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!
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 20:23