Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Przycisk Sibmit z funkcją edycji danych w tabeli
tomkot1992
post 7.07.2019, 14:35:12
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.06.2019

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


Cześć,

sporządzoną mam tabelę, która pobiera mi tabelę z bazy danych

  1. <?php
  2. require_once "polaczenie.php";
  3.  
  4. $con = new mysqli("localhost","root","","tbl_zgloszenia");
  5.  
  6. //$con->error;
  7.  
  8.  
  9.  
  10. $query = "SELECT * FROM zgloszenia WHERE status='Otwarte'";
  11. $a_query = $con->query($query);
  12. //$con->error;
  13. echo "<table>";
  14. echo "<td><strong>ID</strong></td>";
  15. echo "<td><strong>Imię</strong></td>";
  16. echo "<td><strong>Nazwisko</strong></td>";
  17. echo "<td><strong>Wydział\Oddział</strong></td>";
  18. echo "<td><strong>Numer_wew</strong></td>";
  19. echo "<td><strong>Numer_pok</strong></td>";
  20. echo "<td><strong>Adres e-mail</strong></td>";
  21. echo "<td><strong>Opis</strong></td>";
  22. echo "<td><strong>Data_zgłoszenia</strong></td>";
  23. echo "<td><strong>Data_zamknięcia</strong></td>";
  24. echo "<td><strong>Przyp_osoba</strong></td>";
  25. echo "<td><strong>Status</strong></td>";
  26. echo "<td><strong>Czynność</strong></td>";
  27.  
  28. while($result = $a_query->fetch_assoc())
  29. {
  30.  
  31. echo "<tr><form action=aktualizuj.php method=post>
  32.  
  33. <td>".$result['id']."</td>
  34. <td>".$result['imie']."</td>
  35. <td>".$result['nazwisko']."</td>
  36. <td>".$result['wydzial']."</td>
  37. <td>".$result['numer_wew']."</td>
  38. <td>".$result['numer_pok']."</td>
  39. <td>".$result['e_mail']."</td>
  40. <td>".$result['opis']."</td>
  41. <td>".$result['data_dodania']."</td>
  42. <td>".$result['data_zakonczenia']."</td>
  43. <td>".$result['przyp_osoba']."</td>
  44. <td>".$result['status']."</td>
  45. <td><input type=submit value=Zamknij>
  46. </form></tr>";
  47.  
  48.  
  49. }
  50.  
  51. echo "</table>";
  52.  
  53. $con->close();
  54. ?>
  55.  


Jak widać w przykładzie w każdym wierszu dodawany jest przycisk "Zamknij", który ma na celu zmianę Statusu zgłoszenia na rozwiązany. Z kolei takie rozwiązane zgłoszenie jest wyświetlane w innym formularzu przy pomocy zapytania:
  1. $query = "SELECT * FROM zgloszenia WHERE status='Rozwiązane'";


Mój problem polega na tym, że jak chcę zamknąć dane zgłoszenie, zamykają mi się wszystkie które się znajdują w bazie.

Zrzut ekranu jak to wygląda:

https://ifotos.pl/zobacz/Beztytulu_qsnaxaq.png

Poniżej zawartość pliku aktualizuj.php, odpowiedzialnego za zmianę danych w tabeli.

  1. <?php
  2. require_once "polaczenie.php";
  3.  
  4. $con = new mysqli("localhost","root","","tbl_zgloszenia");
  5.  
  6. //$con->error;
  7.  
  8.  
  9.  
  10. $query = "UPDATE zgloszenia SET status='Rozwiązane'";
  11. $a_query = $con->query($query);
  12.  
  13. echo "Zgłoszenie zamknięto";
  14.  
  15. $con->close();
  16. ?>


Tak myślę, że mój błąd polega na tym, że ta funkcja po prostu zmienia we wszystkich wpisach w tabeli, status na rozwiązany, ponieważ nie mam tak jakby przypisane, że chodzi mi konkretnie o ten wiersz w tabeli...
Ale nie wiem jak to zrobić...

Ten post edytował tomkot1992 7.07.2019, 14:36:45
Go to the top of the page
+Quote Post
viking
post 7.07.2019, 14:43:59
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Każdy wiersz powinien mieć swoje unikalne id. Wtedy dodajesz where id=liczba i na tym operujesz. Statusu raczej powinny też być liczbowe.


--------------------
Go to the top of the page
+Quote Post
tomkot1992
post 7.07.2019, 14:59:03
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.06.2019

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


Ok,
a jak wtedy przypisać taki unikalne ID do każdego z wierszy ?
Go to the top of the page
+Quote Post
Neutral
post 7.07.2019, 15:06:10
Post #4





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


Można jeszcze chyba limit 1 offset 1, itp., ale co wtedy jak dodasz nowy record do bazy? Wszystko się przesunie. Albo i nie, może to też byłby nawet dobry pomysł, ale raczej tak się nie robi (zła praktyka - bad practice). viking chyba dobrą radę napisał. Dodaj id kolumnę do swojego projektu w bazie.

  1. ALTER TABLE `tbl` ADD COLUMN `col` INT AUTO_INCREMENT PRIMARY KEY;


Ten post edytował Neutral 7.07.2019, 15:20:57
Go to the top of the page
+Quote Post
tomkot1992
post 7.07.2019, 15:10:21
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.06.2019

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


Cytat(Neutral @ 7.07.2019, 16:06:10 ) *
Można jeszcze chyba limit 1 offset 1, itp., ale co wtedy jak dodasz nowy record do bazy? Wszystko się przesunie. Albo i nie, może to też były nawet dobry pomysł, ale raczej tak się nie robi (zła praktyka - bad practice). viking chyba dobrą radę napisał. Dodaj id kolumnę do swojego projektu w bazie.

  1. ALTER TABLE `tbl` ADD COLUMN `col` (id int(11) AUTO_INCREMENT);



Hmm.. ale już jedną kolumnę z ID mam.. to czy na pewno jest mi potrzebna druga?

Tak wygląda moja baza

  1. REATE TABLE `zgloszenia` (
  2. `id` int(11) NOT NULL,
  3. `imie` text COLLATE utf8_polish_ci NOT NULL,
  4. `nazwisko` text COLLATE utf8_polish_ci NOT NULL,
  5. `wydzial` text COLLATE utf8_polish_ci NOT NULL,
  6. `numer_wew` text COLLATE utf8_polish_ci NOT NULL,
  7. `numer_pok` text CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  8. `e_mail` text COLLATE utf8_polish_ci NOT NULL,
  9. `opis` text COLLATE utf8_polish_ci NOT NULL,
  10. `data_dodania` date NOT NULL,
  11. `data_zakonczenia` date NOT NULL,
  12. `przyp_osoba` text COLLATE utf8_polish_ci NOT NULL,
  13. `status` text COLLATE utf8_polish_ci NOT NULL
  14. )
  15.  


Ten post edytował tomkot1992 7.07.2019, 15:12:44
Go to the top of the page
+Quote Post
Neutral
post 7.07.2019, 15:24:39
Post #6





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


Nie widzę, żebyś miał przy id auto_increment, wiec może napisz tak

  1. ALTER TABLE `tbl` DROP COLUMN `col`;


i później

  1. ALTER TABLE `tbl` ADD COLUMN `col` INT AUTO_INCREMENT PRIMARY KEY;


Później napisz WHERE `id`=...

Id powinno być unikatowe jak sama nazwa wskazuje.

Ten post edytował Neutral 7.07.2019, 15:26:17
Go to the top of the page
+Quote Post
tomkot1992
post 7.07.2019, 15:30:03
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.06.2019

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


Aa przepraszam nie zauważyłem, że wkleiłem podstawowy kod a ALTER'Y nie przesłałem.

Kolumna ID była od początku AUTO_INCREMENT smile.gif

  1.  
  2. ALTER TABLE `zgloszenia`
  3. MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
  4. COMMIT;
  5.  


W takim razie do każdego wiersza mam przypisany unikatowy ID.
To teraz jak mu to wskazać aby wiedział ,który wiesz chcę zamknąć ?
Go to the top of the page
+Quote Post
viking
post 7.07.2019, 15:33:49
Post #8





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


W poście przesyłasz to id zatem dodajesz tylko warunek jak napisałem. Czy id jest kluczem głównym?


--------------------
Go to the top of the page
+Quote Post
tomkot1992
post 7.07.2019, 15:35:06
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.06.2019

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


Tak jak podpowiadacie, jeżeli dopiszę warunek WHERE id=liczba <- to muszę wskazać konkretne ID.

  1. $query = "UPDATE zgloszenia SET status='Rozwiązane' WHERE id=...";



Cytat(viking @ 7.07.2019, 16:33:49 ) *
W poście przesyłasz to id zatem dodajesz tylko warunek jak napisałem. Czy id jest kluczem głównym?


Tak jest kluczem głównym:

  1. ALTER TABLE `zgloszenia`
  2. ADD PRIMARY KEY (`id`);


Chyba, że ja Was nie rozumiem o co chodzi smile.gif

Ten post edytował tomkot1992 7.07.2019, 15:59:14
Go to the top of the page
+Quote Post
Neutral
post 7.07.2019, 17:23:17
Post #10





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


  1. <body style="background: darkgoldenrod;">


  1. <?php
  2.  
  3.  
  4. if(isset($_POST['s'][0])) {
  5.  
  6. $_SESSION['displays'][$_POST['s'][0]] = $_POST['s'][0];
  7.  
  8. }
  9.  
  10. ?>


  1. <form method="post" action="http://127.0.0.1:8000/lisp/db1.php/" style="display: <?= (isset($_SESSION['displays'][0])) ? 'none' : 'inherit'; ?>">
  2. <input type="text"/>
  3. <input type="submit" name="s[]" value="0"/>
  4. </form>
  5.  
  6.  
  7. <form method="post" action="http://127.0.0.1:8000/lisp/db1.php/" style="display: <?= (isset($_SESSION['displays'][1])) ? 'none' : 'inherit'; ?>">
  8. <input type="text"/>
  9. <input type="submit" name="s[]" value="1"/>
  10. </form>
  11.  
  12.  
  13.  
  14. <form method="post" action="http://127.0.0.1:8000/lisp/db1.php/" style="display: <?= (isset($_SESSION['displays'][2])) ? 'none' : 'inherit'; ?>">
  15. <input type="text"/>
  16. <input type="submit" name="s[]" value="2"/>
  17. </form>
  18.  
  19.  
  20. <form method="get" action="">
  21. <input type="submit" name="unset_values" value="unset_values___"/>
  22. </form>


  1. <?php
  2.  
  3. if(isset($_GET['unset_values']) && isset($_SESSION['displays']) && count($_SESSION['displays']) == 3) { // >=3
  4. header('Location: \http://127.0.0.1:8000/lisp/db1.php/'); // without backslash, because this forum replace characters to other
  5. }
  6.  
  7. ?>


  1. </body>


Tam przy header, wyrzuć znak "\", napisałem go ponieważ forum mi na encje zamieniało tę linię.

W uproszczeniu to napisałem. Gdybyś chciał inne nazwy przycisków, to wtedy musiałbyś chyba zastosować <input type='hidden'....

To możesz wygenerować automatycznie, jeśli chcesz. Ten HTML przemieszany z PHP.

Ten post edytował Neutral 7.07.2019, 17:30:46
Go to the top of the page
+Quote Post
dublinka
post 14.07.2019, 11:06:12
Post #11





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(tomkot1992 @ 7.07.2019, 15:35:06 ) *
Tak jak podpowiadacie, jeżeli dopiszę warunek WHERE id=liczba <- to muszę wskazać konkretne ID.

  1. $query = "UPDATE zgloszenia SET status='Rozwiązane' WHERE id=...";





Tak jest kluczem głównym:

  1. ALTER TABLE `zgloszenia`
  2. ADD PRIMARY KEY (`id`);


Chyba, że ja Was nie rozumiem o co chodzi smile.gif


Musisz dodac do tsbeli auto increment ID. Podczas odczytu tabeli podstawiasz pole ID pod:

A) Przycisk z jakims parametrem np update.php?id=$row['id']
cool.gif pole radio / podobnie j/w
C) Pole ukryte hidden j/w

Mozna to wykonac na ajaxie i zwrotem (response) i automatyczna zmiana statusu (zmiana wygladu buttona np) bez odswiezenia


--------------------
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: 28.03.2024 - 16:36