Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Dynamiczne wyświetlanie Pól i rekordów., Proszę o pomoc :)
mkf1
post 1.03.2011, 19:44:51
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 1.03.2011

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


Od pewnego czasu pisze skrypt, który może niektórym ułatwić życie. Zastosowań może być wiele. Na początku służył on tylko mi, ale postanowiłem go też zrobić w taki sposób, aby mogli skorzystać z niego inni. Więc chce zrobić go bardziej elastycznym, żeby jego konfiguracja odbywała się z poziomu strony, a nie źródła.

Screen, który może pomóc wyobrazić sobie problem/pytanie:


Skoro wiadomo już jak to mniej więcej wygląda przechodzę do treści pytania.

Oto Fragment kodu:
  1.  
  2. $fields = mysql_list_fields('baza', 'tabele', $connection);
  3. $columns = mysql_num_fields($fields);
  4.  
  5. for ($i = 1; $i < $columns; $i++)
  6. {
  7. echo '<td class="inny_wyglad">', mysql_field_name($fields, $i) . '</td>';
  8. }
  9.  
  10.  
  11. echo '
  12. <td class="opcje">
  13. <center>
  14. <a href="#" onClick="window.open(\'dodaj.php\', \'Nowe_okno\', \'height=400,width=180\');">ADD</a>
  15. </center>
  16. </td>
  17. </tr>';
  18.  
  19. if(mysql_num_rows($wynik) > 0) {
  20.  
  21.  
  22. while($r = mysql_fetch_object($wynik)) {
  23. echo "<tr>";
  24. echo "<td>".$r->pole1."</td>";
  25. echo "<td>".$r->pole2."</td>";
  26. echo "<td>".$r->pole3."</td>";
  27. echo "<td>".$r->pole4."</td>";
  28. echo "<td>".$r->pole5."</td>";
  29. echo "<td>".$r->pole6."</td>";
  30. echo "<td>".$r->pole7."</td>";
  31. echo "<td>".$r->pole8."</td>";
  32. echo "<td>".$r->pole9."</td>";
  33. echo "<td class=\"opcje\">
  34. <a href=\"edit.php?a=edit&amp;id={$r->id}\">EDIT</a>
  35. <a href=\"index.php?a=del&amp;id={$r->id}\">DEL</a>
  36. </td>";
  37. echo "</tr>";
  38. }
  39.  
  40. echo "</table>";
  41. }


Który jest odpowiedzialny za wyświetlenie mojej tabeli. Posługując się dokumentacją php natrafiłem na piękny skrypcik, który pozwala mi wyświetlić wszystkie pola zawarte w mojej tabeli. Widać to na screenie. Pola w bazie danych nazywają się kolejno pole1 - pole 9. Teraz potrzebuje czegoś co byłoby w stanie wyświetlać rekordy wszystkich pól w tej tabeli, bez względu na ich ilość i nazwy. ( Czyli nie ograniczać się do ilości i nazw pól które są w kodzie, tylko bazować na danych zawartych w bazie, żebym z poziomu strony mógł dodawać i edytować sobie pola, które będą potem wyświetlane na tej stronie. Można to porównać do prostej wersji phpmyadmin. Nie łatwo jest mi to wytłumaczyć, o co konkretnie mi chodzi, ale mam nadzieje że ktoś mnie zrozumie. Z góry bardzo dziękuje, za wszelką pomoc. Pozdrawiam smile.gif
Go to the top of the page
+Quote Post
ylk
post 1.03.2011, 20:35:01
Post #2





Grupa: Zarejestrowani
Postów: 194
Pomógł: 26
Dołączył: 9.01.2011
Skąd: /dev/null

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


Ja rozumiem, też kiedyś napisałem coś takiego.
Najpierw musisz wykonać zapytanie, które pobierze nazwy pól z bazy. Coś na kształt:
  1. $r=mysql_query("SELECT * FROM $table LIMIT 1");
  2. foreach ($row as $key=>$value) $this->columns[]=$key;


Dzięki temu w tablicy $columns masz nazwy wszystkich kolumn z bazy i możesz się do nich później odwoływać.
Go to the top of the page
+Quote Post
mkf1
post 1.03.2011, 20:44:35
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 1.03.2011

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


Ok dzięki, wykorzystam to wink.gif
Go to the top of the page
+Quote Post
mortus
post 1.03.2011, 21:17:19
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Czy w tej tabeli jest jeszcze pole o nazwie id lub tym podobne? Pytam, bo indeksy pól liczy się od 0, a Ty w pętli for liczysz od 1 ($i=1). W sumie to powinna wystarczyć taka drobna modyfikacja pętli while:
  1. while($r = mysql_fetch_object($wynik)) {
  2. echo "<tr>";
  3. for($i=1; $i < $columns; $i++) {
  4. $nazwa_pola = mysql_field_name($fields, $i);
  5. echo "<td>".$r->{$nazwa_pola}."</td>";
  6. }
  7. echo "<td class=\"opcje\"><a href=\"edit.php?a=edit&amp;id={$r->id}\">EDIT</a><a href=\"index.php?a=del&amp;id={$r->id}\">DEL</a></td>";
  8. echo "</tr>";
  9. }

Jak widać wszystkie potrzebne zmienne masz. Nie trzeba korzystać z tablic asocjacyjnych.
Go to the top of the page
+Quote Post
mkf1
post 2.03.2011, 11:37:43
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 1.03.2011

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


Owszem w tabeli jest jeszcze pole: ID.

Po części z pomocą kolegi poradziłem sobie, w taki sposób:
  1. if(mysql_num_rows($wynik) > 0) {
  2.  
  3.  
  4. while($r = mysql_fetch_row($wynik)) {
  5. echo "<tr>";
  6. foreach($r as $pole){
  7. echo "<td>".$pole."</td>";
  8. }
  9. echo "<td class=\"opcje\">
  10. <a href=\"edit.php?a=edit&id={$r->id}\">EDIT</a>
  11. <a href=\"index.php?a=del&id={$r->id}\">DEL</a>
  12. </td>";
  13. echo "</tr>";
  14. }
  15.  
  16. echo "</table>";
  17. }
  18.  


Jednocześnie ukrywając pierwsze pole czyli to nieszczęsne ID.
Jednakże teraz mam problem z edycją i usuwaniem rekordów, ponieważ niezczytuje mi rekordów.


@UP - ale twoje rozwiązanie działa o wiele lepiej, wielkie dzięki i pozdrawiam smile.gif

Ten post edytował mkf1 2.03.2011, 11:43:10
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: 29.03.2024 - 00:55