Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql][php] Wyświetlanie rekordów w polach <input>
Forum PHP.pl > Forum > Przedszkole
pildid
Witam wszystkich. To moje pierwsze dni z mysql i php.
Na podstawie tego forum zrobiłem prosty formularz zgłoszeniowy - DZIAŁA!
Wszystko zapisuje się w tabeli "formularz" w polach: imie, temat, lokalizacja, opis, data1.
Tabela ma też pole id auto_increment primary key.
Teraz robię mini panel do odpowiedzi na zgłoszenie.
Ale zanim zrobię formularz z polem "odpowiedź" i zapisem do tej samej tabeli w pole "edycja"
Chcę, aby nad formularzem edycji pojawiła się rozwijana lista z numerami zgłoszeń [id], a następnie po wybraniu zgłoszenia np. nr.2 dane z tabeli formularz z pól: imie, temat, lokalizacja, opis, data1 wyświetliły się w formularzu - takim samym jaki widziała osoba wysyłająca zgłoszenie.
Zrobiłem już wyświetlanie numerów zgłoszeń. Numery zgłoszeń zasysane są z tabeli formularz z pola [id] poprawnie.
Nie wiem teraz jak wyświetlić resztę danych w polach <input> - aby formularz uzupełnił się do podglądu.
Pod nim dopiero wstawię kolejny, z jednym polem dla udzielenia odpowiedzi. Ale mogę mieć problem z dopisaniem odpowiedzi do tego konkretnego numeru zgłoszenia.
Dlatego drugie pytanie: Czy może lepiej zrobić po prostu EDYCJĘ wpisu tabeli i dać tylko możliwość uzupełnienia jednego i tak pustego pola "edycja" w tabeli "formularz", które jest przygotowane dla odpowiedzi.
Myślę że ta opcja jest lepszym rozwiązaniem. Ale wraz pozostaje mi problem z uzupełnieniem formularza danymi z wybranego numeru zgłoszenia.
Myślę że temat nadaje się do tego działu. Trochę moich wypocin działa [logowanie do mini panelu] oraz wysyłanie formularza.
Brakuje mi tylko tego jednego szczegółu aby osiągnąć pełnie funkcjonalności tego małego projektu.
Bardzo proszę o pomoc.
Pozdrawiam.

  1. <form method="POST" action="edycja.php" id="form1">
  2. <table width="500" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#CCCCCC">
  3. <tr>
  4. <td><table width="600" border="0" align="center" cellpadding="3" cellspacing="1">
  5. <tr bgcolor="#FFFFFF">
  6. <td colspan="2"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>
  7.  
  8.  
  9.  
  10.  
  11.  
  12. <tr><td class="nazwa">
  13. Zgłoszenie </td>
  14. <td class="select"><select name="wybor">
  15. <?php
  16. $query = "SELECT * FROM formularz";
  17. $zapytanie = mysql_query($query);
  18. echo '<option id="0" value="0">nr.:</option>r';
  19. while($wynik = mysql_fetch_array($zapytanie)){
  20. echo "<option value=\"".$wynik['id']. "\">";
  21. echo $wynik['id'];
  22. echo "</option>";
  23. }
  24. ?>
  25.  
  26.  
  27.  
  28.  
  29. </b> </font></td>
  30. </tr>
  31.  
  32. <tr bgcolor="#FFFFFF">
  33. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Imię i nazwisko: </font></td>
  34. <td align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  35. <input name="imie" type="text" id="od" value="" readonly="readonly">
  36.  
  37. <tr bgcolor="#FFFFFF">
  38. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Temat:</font></td>
  39. <td align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  40. <input name="temat" id="temat" value="" readonly="readonly">
  41.  
  42. </font></td>
  43. </tr>
  44. <tr bgcolor="#FFFFFF">
  45. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Lokalizacja:<font size="1"><br>
  46. </font> </font></td>
  47. <td align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  48. <input name="lokalizacja" id="lokalizacja" value="" readonly="readonly">
  49.  
  50. </font></td>
  51. </tr>
  52.  
  53.  
  54. <tr bgcolor="#FFFFFF">
  55. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Dokładny opis problemu: </br> Zapotrzebowanie na:</font></td>
  56. <td align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  57. <textarea name="opis" cols="40" rows="6" value="" id="message" readonly="readonly"></textarea>
  58. </font></td>
  59. </tr>
  60.  
  61. <tr bgcolor="#FFFFFF">
  62. <td align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Data wprowadzenia: </font></td>
  63. <td align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  64. <input name="data1" type="text" value="" id="data1" readonly="readonly">
  65.  
  66.  
  67.  
  68.  
  69. </table>
  70. </td></tr></table>
  71. <p align="center"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
  72.  
  73. <br></font>
  74. </b>
  75. </form>
patrol114
Jeżeli chcesz wyciągnąć informacje z odpowiedniego rekordu użyj
  1. $_GET
aby wyciągnąć numer 'id' zgłoszenia.
pildid
Dziękuję za naprowadzenie. Kod działa już prawidłowo.
Pojawiają się wszystkie rekordy z bazy. Obok Przed każdym wierszem mam "EDYTUJ". Po kliknięciu go pojawia się formularz, uzupełniam wpis o swój komentarz do zgłoszenia, wysyłam i pięknie się zapisuje w bazie.

Teraz kolejne pytanie:

Tabela w której trzymam zgłoszenia jak już pisałem wcześniej ma pierwsze pole ID INT Auto_Inc Primary_Key.
Na stronie gdzie wypełniany jest formularz zgłoszeniowy wyświetla się numer zgłoszenia.
I tu pojawia się problem.
Oto kod, który pobiera numer wiersza jako numer zgłoszenia:
  1. $sql = mysql_query('SELECT id FROM formularz');
  2. $r = mysql_num_rows ($sql);
  3. echo "Formularz zgłoszenia nr.: $r";


Pierwsze zgłoszenie w formularzu przy jego uzupełnianiu wyświetla się jako numer "zero" z racji, że kolumna ID jest pusta - a to z niej pobiera numer.
Formularz zostaje wysłany i zapisany w bazie w pierwszym wierszu jako numer 1 - oczywiste.
Kolejny formularz po wejściu na stronę dostaje numer "1" - w tabeli jest już jeden wiersz, więc naturalnie musi się wyświetlić wartość "1". Pod formularzem wyciągnięte są rekordy ze wszystkimi zgłoszeniami i niestety ale zgłoszenie nr. 1 jest już na liście...

Pytanie brzmi: jak zmienić powyższy kod, aby wyświetlał numer zgłoszenia, który zaraz będzie zapisany w bazie. Coś w stylu "n+1" Rekordów nie będę nigdy kasował.
  1. $sql = mysql_query('SELECT id + 1 FROM formularz');

Zwraca ten sam wynik co bez "+1".

Proszę o pomoc.
Pozdrawiam.
ghost1511
Podczas zgłaszania nie powinieneś podawać użytkownikowi numeru zgłoszenia jeszcze przed jego zgłoszeniem. Najlepszym argumentem będzie chyba to że dwóch użytkowników może w jednym czasie może tworzyć zgłoszenie i jednemu z nich wyświetli się ID zgłoszenia, którego w rzeczywistości nie otrzyma. Po dodaniu zgłoszenia powinieneś podać jego identyfikator.
pildid
To prawda. I obejdzie się bez zbędnego kombinowania z kodem.
Po wypełnieniu formularza - Submit - przekierowuje na stronę która wysyła formularz.
Pojawia się się tam tylko na czarnym tle zdanie z podziękowaniem za dokonanie zgłoszenia i button z js na zamknięcie strony.
Mogę do tego zdania dodać ten kod odpowiadający za wyświetlanie numeru wiersza z ID. Wtedy będzie to realny numer zgłoszenia i uniknę konfliktu z wypełnianiem dwóch zgłoszeń w tym samym czasie.
Zaraz zmienię kod i opiszę skutki. Czy wyświetli już dopisany numer czy pobierze jeszcze ten poprzedni.
Dziękuję Ghost1511 za pomysł.
Pozdrawiam.
ghost1511
Dodatkowo popełniasz błąd pobierając liczbę rekordów w bazie. Nie jesteś ubezpieczony na ewentualnie usunięte rekordy. Lepiej użyj funkcji LAST_INSERT_ID()
http://dev.mysql.com/doc/refman/5.0/en/get...-unique-id.html
pildid
Umieściłem kod odpowiedzialny za pobieranie ID za skryptem do wysyłania formularza. Pobiera i wyświetla info z prawidłowym numerem zgłoszenia. Problem rozwiązany.
LAST_INSERT_ID() - kolejna cenna uwaga. Oczywiście zmienię kod. Mimo że nie będę dodawał ani usuwał żadnego rekordu.
Dziękuję raz jeszcze.
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.