Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Edycja wyświetlonego rekordu po kliknięciu na niego
Forum PHP.pl > Forum > Przedszkole
paupa
Witam wszystkich,
Z góry przepraszam za swój język, z PHP mam do czynienia od miesiąca a muszę zrobić jakiś dla mnie osobiście ciężki projekt i napotkałam przy tym 2 problemy.

Będę wdzięczna za wszelką pomoc i mam nadzieję, że zrozumiem co macie mi do przekazania smile.gif

A więc mam pewną bazę danych, w której zajmuje się gabinetem zabiegowym dla pacjentów...

Na początku wyświetlam sobie tabelę w której znajdują się następujące kolumny(nazwa tabeli) id_pacjenta(pacjent), nazwisko(pacjent), imie(pacjent), pesel(pacjent), data_zabiegu(zabieg), komentarz(zabieg), nazwa_zabiegu(zabieg), nazwa stanu(slownik_stanu), komentarz(slownik_stanu) wyciagam te informacje odpowiednim zapytaniem umiszczonym ponizej:
  1. $zapytanie = "SELECT pacjent.id_pacjenta,
  2. nazwisko,
  3. imie,
  4. pesel,
  5. data_zabiegu,
  6. zabieg.komentarz,
  7. nazwa_zabiegu,
  8. slownik_stanu.nazwa_stanu,
  9. slownik_stanu.komentarz FROM zabieg
  10. JOIN slownik_stanu on zabieg.id_slownika_stanu=slownik_stanu.id_slownika_stanu
  11. JOIN wizyta_skierowanie on zabieg.id_wizyty_skierowania=wizyta_skierowanie.id_wizyty_skierowania
  12. JOIN wizyta on wizyta.id_wizyty=wizyta_skierowanie.id_wizyty
  13. JOIN pacjent on pacjent.id_pacjenta=wizyta.id_pacjenta
  14. JOIN slownik_zabiegow on slownik_zabiegow.id_slownika_zabiegow=zabieg.id_slownika_zabiegow
  15. WHERE slownik_stanu.nazwa_stanu = 'nwykonany' ORDER BY data_zabiegu";


Wyświetla mi się tabela: (podaje tylko 1 przykładowy rekord)
ID pacjenta Nazwisko Imie Pesel Data zabiegu Informacje dodatkowe Nazwa zabiegu Status Komentarz
1 Kowalski Jan 111111111 2015-05-22 uczulenie na coś ablacja żylaków nwykonany


I teraz moje pytania:
1. Po pierwsze czy mógłby mi ktoś wytłumaczyć jak mogę uzyskać w osobnym oknie informacje z tabeli pacjent (wiem, że zapytanie powinno wyglądać tak SELECT * FROM pacjent WHERE id='$id') po kliknięciu w ID wybranego pacjenta w przypadku powyższego wyniku oczywiście w 1. Bardzo byłabym wdzięczna za konkretne informacje, gdzie trzeba coś wkleić albo czy muszę jeszcze stworzyć jakieś funkcje etc...

2. Potrzebuję uzyskać dostęp do modyfikacji kolumn data_zabiegu, nazwa_stanu oraz komentarz i chciałabym móc również kliknąć na wybrany rekord i dokonać jego edycji.

Domyślam się, że jest to proste ale w związku z tym, że jak pisałam wyżej mam do czynienia z php od miesiąca nie rozumiem połowy kodów powrzucanych na różne fora, w których te tematy są objaśniane.

Poniżej jeszcze fragment mojego kodu do wyświetlania tabel. Jeśli będzie potrzeba czegoś więcej to proszę o informację, umieszczę jakieś dodatkowe fragmenty w razie potrzeby.
  1. $wynik = mysql_query($zapytanie);
  2. if (!$wynik)
  3. {
  4. echo "[-] Wykonanie zapytania nie powiodło się!<br /><br />";
  5. }
  6. else
  7. {
  8. echo "<table cellspacing='3' cellpadding='5'>";
  9. echo "<tr bgcolor='#dddddd' align='left'>";
  10. echo "<th>ID pacjenta</th>
  11. <th>Imie</th>
  12. <th>Nazwisko</th>
  13. <th>Pesel</th>
  14. <th>Dodatkowe informacje</th>
  15. <th>Data zabiegu</th>
  16. <th>Nazwa zabiegu</th>
  17. <th>Status</th>
  18. <th>Komentarz</th>"
  19. ;
  20. echo "</tr>";
  21.  
  22. while ($wiersz = mysql_fetch_array($wynik))
  23. {
  24. echo "<tr align='left'>";
  25. echo "<td>".$wiersz[0]."</td>";
  26. echo "<td>".$wiersz[2]."</td>";
  27. echo "<td>".$wiersz[1]."</td>";
  28. echo "<td>".$wiersz[3]."</td>";
  29. echo "<td>".$wiersz[5]."</td>";
  30. echo "<td>".$wiersz[4]."</td>";
  31. echo "<td>".$wiersz[6]."</td>";
  32. echo "<td>".$wiersz[7]."</td>";
  33. echo "<td>".$wiersz[8]."</td>";
  34. echo "</tr>";
  35. }
  36. echo "</table>";
  37. }

Pozdrawiam serdecznie,
Paupa
b4rt3kk
Potrzebujesz, przekazać w parametrze id rekordu, który chcesz edytować, dodaj więc kolejną kolumnę w tabeli z możliwymi akcjami do wykonania, np.:

  1. echo "<td><a href=\"edytuj.php?id=".$wiersz[0]."\">Edycja</a></td>";


Łatwiej też używać nazw kolumn, zamiast indeksów, czyli:

  1. echo "<td><a href=\"edytuj.php?id=".$wiersz['id']."\">Edycja</a></td>";


Następnie w edytuj.php pobierasz dane na podstawie przekazanego id (będzie w zmiennej $_GET['id']), podstawiasz do formularza i po przesłaniu formularza robisz update wiersza na podstawie otrzymanych danych (sugeruję przez POST).
paupa
Dziękuje!

Jeśli chodzi o używanie nazw zmiennych zamiast indeksów to nie mogę... ponieważ twórca bazy zapomniał rozróżniać nazwy zmiennych w różnych tabelach i teraz np komentarz występuje w 3 tabelach i kiedy chcę z niego korzystać po nazwie zmiennej np 'zabieg.komentarz' to nie rozumie mojego polecenia smile.gif

Co do metody POST:

Kiedy na przykład chcę zrobić coś takiego:
$id=$_POST['id_pacjenta'];

to niestety wyskakuje mi błąd:
  1. Notice: Undefined index: id_pacjenta in C:\xampp\htdocs\index.php on line 52


i niestety nie wiem dlaczego, korzystam póki co z plików index.php oraz funkcje.php gdzie mam łączenie z bazą danych

Ok więc udało mi się trochę ogarnąć:

Plik wyswietl_edytowanie.php
  1. <?php
  2. $serwer = "localhost";
  3. $login = "root";
  4. $haslo = "";
  5. $baza = "baza";
  6.  
  7. $data = trim(addslashes($_POST['data_zabiegu']));
  8. $status_zabiegu = trim(addslashes($_POST['nazwa_stanu']));
  9. $komentarz = trim(addslashes($_POST['komentarz']));
  10.  
  11. if (
  12. ($data == "") ||
  13. ($status_zabiegu == "")
  14. )
  15. {
  16. echo "[-] Nie wypelniono wszystkich pol w poprzednim formularzu! Prosze powrocic do niego i sprobowac ponownie.<br /><br />";
  17. }
  18. else
  19. {
  20. $polacz_z_serwerem = mysql_connect($serwer, $login, $haslo)
  21. or die("[-] Nie można połaczyć się z serwerem bazy danych!<br /><br />");
  22.  
  23. $polacz_z_baza = mysql_select_db($baza)
  24. or die("[-] Nie mozna połaczyć się z baza danych!<br /><br />");
  25.  
  26. $zapytanie_select = "SELECT * FROM slownik_stanu";
  27.  
  28. $wynik_select = @mssql_query($zapytanie_select);
  29. if (!$wynik_select)
  30. {
  31. echo "[-] Wykonanie zapytania nie powiodło się!<br /><br />";
  32. }
  33.  
  34. $tablica = @mssql_fetch_array($wynik_select);
  35. $zapytanie_insert = "INSERT INTO slownik_stanu (nazwa_stanu, komentarz)
  36. VALUES ('$status_zabiegu', '$komentarz')";
  37.  
  38. $wynik_insert = @mssql_query($zapytanie_insert);
  39.  
  40. if (!$wynik_insert)
  41. {
  42. echo "[-] Wykonanie zapytania nie powiodło się!<br /><br />";
  43. }
  44. else
  45. {
  46. echo "[+] Nowy rekord zostal dodany do tabeli bazy danych!<br /><br />";
  47. }
  48.  
  49. @mssql_free_result($wynik_select);
  50. @mssql_free_result($wynik_insert);
  51. @mssql_close($polacz_z_serwerem);
  52. }
  53. ?>


i tutaj mam błędy, o których pisałam wcześniej typu:

  1. Notice: Undefined index: id_pacjenta in ...


i to samo jeśli chodzi o status i komentarz... nie wiem w ogole jak jeszcze wstawic zmiane daty do zapytania_insert



a tutaj mam plik edytuj.php, czyli moj formularz

  1. <form action="wyswietl_edytuj.php" method="post">
  2. <table>
  3. <tbody>
  4. <tr>
  5. <td class="td_kolor_insert_nagl">&nbsp;Dane</td>
  6. <td class="td_kolor_insert_nagl">&nbsp;Pola do wypelnienia</td></tr>
  7.  
  8. <tr>
  9. <td class="td_kolor_insert_kol1">&nbsp;Data wykonania zabiegu</td>
  10. <td class="td_kolor_insert_kol2"><input size="30" name="data_zabiegu" /></td></tr>
  11.  
  12. <tr>
  13. <td class="td_kolor_insert_kol1">&nbsp;Status zabiegu</td>
  14. <td class="td_kolor_insert_kol2"><input maxLength="20" size="30" name="nazwa_stanu" /></td></tr>
  15.  
  16. <tr>
  17. <td class="td_kolor_insert_kol1">&nbsp;Komentarz do zabiegu</td>
  18. <td class="td_kolor_insert_kol2"><input maxLength="200" size="30" name="komentarz" /></td></tr></tbody></table>
  19.  
  20. <p><input id="przycisk" type="submit" value="Edytuj rekord" /> <input id="przycisk" type="reset" value="Wyczysc pola" /></p></form><br /></div></div></body></html>
  21.  
b4rt3kk
Cytat
Jeśli chodzi o używanie nazw zmiennych zamiast indeksów to nie mogę... ponieważ twórca bazy zapomniał rozróżniać nazwy zmiennych w różnych tabelach i teraz np komentarz występuje w 3 tabelach i kiedy chcę z niego korzystać po nazwie zmiennej np 'zabieg.komentarz' to nie rozumie mojego polecenia smile.gif


To nie jest możliwe o czym piszesz. W php owszem w przypadku joina nadpisujesz wartość, ale wskazanie konkretnej kolumny jak to przytoczyłaś jest jednoznaczne, zastosuj alias.

Póki nie wyślesz requesta POST, to zmienne są puste, więc należy to sprawdzić:

  1. if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  2. // odbierz dane POST
  3. }




To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.