Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][MySQL][PHP]Link do edycji rekordu
szydlak
post 4.10.2016, 20:35:39
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 4
Dołączył: 23.09.2016

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


Witam. Stawiam pierwsze kroki w php i pisze sobie taką aplikacje do przeprowadzania egzaminów teoretycznych z prawa jazdy (od czegoś trzeba zacząć).
Napisałem sobie skrypt, który pobiera mi z bazy mysql kursantów i wyświetla w formie tabelki. Wszystko działa. Teraz pytanko. Jak zrobić aby na końcu każdego wiersza miał np ikonę którą mogę kliknąć i przejść do edycji danego wiersza ? . Np otwiera się okienko modalne z formularzem już uzupełnionym, wprowadzam zmiany i zapisuje. Poradzę sobie z utworzeniem np ikony obok rekordu. Tylko jakie ona powinna mieć łącze ? żebym np mógł edytować dany rekord znając jego id. I czy jest możliwość że jeden formularz wykorzystam zarówno do tworzenia nowego wpisu jak i edycji rekordów?
Mój kod na obecną chwile wygląda w ten sposób. Oczywiście chciałbym dodać funkcję np newuser czyli klikam button dodaj użytkownika i wyświetla mi się formularz uzupełniam i dodaję . Z tym sobie poradzę. Ale chciałbym ten sam formularz wykorzystać do edycji danych. Mogą być linki do opisów tego typu działań.
Mój kod na obecną chwile wygląda w ten sposób
  1. <?php
  2. include 'login.php';
  3. showusers($conn);
  4. function showusers($conn)
  5. {
  6. $query='select id, CONCAT(name, " ", surname) as imie_nazwisko , pesel, pkk_number from users';
  7. $result = $conn->query($query);
  8. if (!$result) die($conn->error);
  9.  
  10. $rows = $result->num_rows;
  11. echo <<<_END
  12. <table>
  13. <thead>
  14. <tr>
  15. <th>L.p</th>
  16.  
  17. <th>Imię nazwisko</th>
  18.  
  19. <th>Nr pesel</th>
  20.  
  21. <th>Numer PKK</th>
  22. </tr>
  23. </thead>
  24. <tbody>
  25. _END;
  26.  
  27. for ($j = 0 ; $j < $rows ; ++$j)
  28. {
  29. $result->data_seek($j);
  30. $row = $result->fetch_array(MYSQLI_ASSOC);
  31. echo '<tr>';
  32. echo '<td>' . $row['id'] . '</td>';
  33. echo '<td>' . $row['imie_nazwisko'] . '</td>';
  34. echo '<td>' . $row['pesel'] . '</td>';
  35. echo '<td>' . $row['pkk_number'] . '</td>';
  36. echo '</tr>';
  37. }
  38. echo '</tbody></table>';
  39.  
  40. }
  41.  
  42. ?>

Dzięki i pozdrawiam.

Ten post edytował szydlak 4.10.2016, 20:37:04
Go to the top of the page
+Quote Post
abel1
post 5.10.2016, 00:33:52
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 17.03.2014

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


Skoro dopiero zaczynasz naukę PHP i nie masz za wiele napisane
To przepisz swój kod na PDO bo MYSQLI jest już przestarzałe
wracając do twojego pytania
Żeby edytowac userka musisz mieć wyciągnięte z bazy jego dane (co już masz )
Następnie podpinasz to do zmiennej np. tak
  1. $id_user = $row['id']

To samo musisz zrobić z pozostałymi danymi które chcesz przenieść do pliku edycji
Robisz sobie np.formularz który przeniesie cię do pliku w którym będziesz edytował userka
  1. <form method="post" action="edycja.php"><input type="hidden" name="imie" value="<?php echo $imie ?>">

Tak jak w przykładzie zamieszczasz wszystkie dane które masz pobrane z bazy
Natomiast w pliku w którym nastąpi właściwa edycja tworzysz taki sam formularz z małą różnicą przykład
  1. <form method="post" ><input type="text" name="imie" value="<?php echo $_POST['imie']; ?>">

w ten sposób formularz na stronie edycji wypełni się danymi usera którego chcesz edytować
Jak widzisz w pierwszym przykładzie "input "ma typ "hidden" , czyli będzie niewidoczny
Widoczny powinien pozostać tylko "SUBMIT" po kliknięciu którego przeniesie cie do podstrony edycji
Oczywiście jeden plik "edycja.php" będziesz wykorzystywał do edytowania wszystkich userów
Do tworzenia nowych wpisów potrzebujesz osobnego formularza i osobnego połączenia z bazą
Edycje wykonujesz poprzez "UPDATE "do bazy a nowe wpisy "INSERT"
Go to the top of the page
+Quote Post
szydlak
post 5.10.2016, 11:06:14
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 4
Dołączył: 23.09.2016

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


Dzięki za odpowiedź. Moja koncepcja jest troszkę inna. Tzn obok każdego rekordu dodaje sobie np button którego kliknięcie pokazuje formularz w formie modalnej (java script). To wiem jak zrobić. Natomiast chciałbym aby kliknięcie ten button spowodowało uruchomienie formularza z uzupełnionymi polami. (Czyli jakoś przekazanie zmiennych pobranych z bazy do javascriptu). Formularz który by się pokazał miałby ustawione Action="users.php" . A w pliku php dwie funkcje jedna update, druga insert. W zależności jak wywołam formularz to odpowiednia funkcja by się uruchamiała. Np użyć jakiś ukrytych pól na formularzy z zaznaczeniem czy to jest insert czy update. A którą funkcje wywołać to już sprawdzę sobie w php. Wiem, że może sobie komplikuje ale wydaje mi się że tak fajnie by to wyglądało. Ale nie wiem czy jest to możliwe do zrobienia.
Go to the top of the page
+Quote Post
viking
post 5.10.2016, 11:27:00
Post #4





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

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


Jak najbardziej możliwe. Ustaw sobie np <tr data-id=1>....</tr> czy nawet możesz bezpośrednio z td. Na klika odczytaj te dane i jeśli chcesz edytować więcej to np. ajaksem doczytaj rekord o określonym id, jeżeli te same dane to po prostu je przepisz z td z formularza. Dwóch nie musisz robić. Jeżeli id jest ustawione oznacza to update (w przypadku edycji wierszy tabeli zawsze jest to update), jak nie insert.

Ten post edytował viking 5.10.2016, 11:28:12


--------------------
Go to the top of the page
+Quote Post
szydlak
post 5.10.2016, 11:50:01
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 4
Dołączył: 23.09.2016

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


A można ta w ten sposób?: Obok rekordu wstawiam ( w dodatkowej kolumnie) wstawiam np <button onclick="moja_funkcja(parametry z bazy)">Edycja</button>
a moja funkcja pokazuje formularz z uzupełnionymi polami.

Ten post edytował szydlak 5.10.2016, 11:51:28
Go to the top of the page
+Quote Post
viking
post 5.10.2016, 11:55:55
Post #6





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

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


Można tylko raczej nie rób onclick a zdarzenia. W czystym JS addEventListener, w jquery .on().


--------------------
Go to the top of the page
+Quote Post
szydlak
post 5.10.2016, 12:34:36
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 4
Dołączył: 23.09.2016

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


Ale wtedy nie mogę do funkcji w jquery przekazać parametrów (danych do edycji).
Czyli jeśli korzystam z jquery to po kliknięciu w button pobieram sobie dane z mojej tabelki używając np wcześniej ustawione id danego wiersza i ustawiam je w formularzu ? A tak spytam dlaczego nie korzystać z javascript onclick ?

Ten post edytował szydlak 5.10.2016, 12:35:16
Go to the top of the page
+Quote Post
viking
post 5.10.2016, 12:46:12
Post #8





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

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


https://en.wikipedia.org/wiki/Unobtrusive_JavaScript

Nie robisz sobie bałaganu w kodzie, pomyśl ile było by nadmiarowego htmla dla np 5000 rekordów. Możesz zastosować delegację zdarzeń, masz wszystko w jednym miejscu czyli pliku JS. Do funkcji nic nie potrzebujesz np.

  1. <table id=r>
  2. <tr><td>1</td><td>Jan</td><td>Kowalski</td><td><a href="#" class=actions>akcje</a></td>
  3.  
  4. $('#r tbody').on('click', 'a.actions', function(e){
  5. e.preventDefault();
  6. console.log($(this), $(this).parents('tr'), e);
  7. });


Przyjrzyj się obiektom w konsoli: https://jsfiddle.net/1desk69m/

Ten post edytował viking 5.10.2016, 12:56:03


--------------------
Go to the top of the page
+Quote Post
szydlak
post 6.10.2016, 22:07:58
Post #9





Grupa: Zarejestrowani
Postów: 20
Pomógł: 4
Dołączył: 23.09.2016

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


Uzyskałem efekt, o który mi chodziło. Mam modalne okno do edycji lub dodawania nowego użytkownika. Po naciśnięciu przycisku zapisz w oknie modalnym wykonują się instrukcję z pliku users.php. Mój główny plik to index.html. Jak zrobić żeby po kliknięciu przycisku zapisz czyli albo zrobię update albo insert wrócić z powrotem do pliku index.html? Jak kliknę zapisz to w pasku adresu pojawia mi się users.php. Można się tego pozbyć ?
  1. <!doctype html>
  2.  
  3. <body>
  4. <?php
  5. include 'login.php';
  6. showusers($conn);
  7. function showusers($conn)
  8. {
  9. $query='select id, firstname , lastname, pesel, pkk_number from users';
  10. $result = $conn->query($query);
  11. if (!$result) die($conn->error);
  12. $rows = $result->num_rows;
  13. echo <<<_END
  14. <table id="r">
  15. <thead>
  16. <tr>
  17. <th>L.p</th>
  18. <th>Imię</th>
  19. <th>Nazwisko</th>
  20. <th>Nr pesel</th>
  21. <th colspan="2">Numer PKK</th>
  22. <th></th>
  23. </tr>
  24. </thead>
  25. <tbody>
  26. _END;
  27.  
  28. for ($j = 0 ; $j < $rows ; ++$j)
  29. {
  30. $result->data_seek($j);
  31. $row = $result->fetch_array(MYSQLI_ASSOC);
  32. echo '<tr>';
  33. echo '<td>' . $row['id'] . '</td>';
  34. echo '<td>' . $row['firstname'] . '</td>';
  35. echo '<td>' . $row['lastname'] . '</td>';
  36. echo '<td>' . $row['pesel'] . '</td>';
  37. echo '<td>' . $row['pkk_number'] . '</td>';
  38. echo '<td><a href="#" class=actions>akcje</a></td>';
  39. echo '</tr>';
  40. }
  41. echo '</tbody></table>';
  42. }
  43. ?>
  44. <div id="dialog" title="Edycja danych">
  45. <form id="usersform" action="users.php" method="post">
  46. <label for="firstname">Imię</label>
  47. <input id="firstname" type="text" name="firstname" value="">
  48. <label for="lastname">Nazwisko</label>
  49. <input id="lastname" type="text" name="lastname" value="">
  50. <label for="pesel">Nr pesel</label>
  51. <input id="pesel" type="text" name="pesel" value="">
  52. <label for="pkk">Nr PKK</label>
  53. <input id="pkk" type="text" name="pkk" value="">
  54. <input id="hidden" type="hidden" name="hidden" value="">
  55. <br><br>
  56. <input type="submit" value="Zapisz">
  57. </form>
  58. </div>
  59. </body>
  60.  
  61. <script>
  62.  
  63. $('#dialog').dialog({
  64. modal: true,
  65. autoOpen: false
  66. });
  67.  
  68.  
  69. $('#r tbody').on('click', 'a.actions', function(e){
  70.  
  71. $('#dialog').dialog('open');
  72. var $firstname=$(this).parents('tr').children('td').eq('1').text();
  73. var $lastname=$(this).parents('tr').children('td').eq('2').text();
  74. var $pesel=$(this).parents('tr').children('td').eq('3').text();
  75. var $pkk=$(this).parents('tr').children('td').eq('4').text();
  76. var $edit=true;
  77. $("#firstname").val($firstname);
  78. $("#lastname").val($lastname);
  79. $("#pesel").val($pkk);
  80. $("#pkk").val($firstname);
  81. $('#hidden').val($edit);
  82. }
  83. );
  84. </script>
  85. </html>
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: 7.06.2025 - 10:22