Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] [mysql] dużo checkboxów
Forum PHP.pl > Forum > Przedszkole
Ksenia
Witam,
Chce napisać swój pierwszy program w PHP.
Będzie to baza danych z uprawnieniami do aplikacji, które maja użytkownicy w firmie. Poziom szczegółowości uprawnień w poszczególnych programach jest różny i czasami wystarczy wiedzieć że użytkownik ma dostęp do danej aplikacji a czasami jedne uprawnienia w programie sa powiązane z innymi.
Program będzie zawierał bazę danych z posiadanymi przez userów uprawnieniami i na jej podstawie będzie umożliwiał generowanie nowych wniosków o nadanie uprawnień.
Wszystko to jest zrobione za pomocą checkboxów, a ponieważ programów jest sporo, a modułów w nich jeszcze więcej, jest checkboxów grubo ponad setkę.

Mam juz taka bazę (zapewne mocno niedoskonałą) napisaną w ASP i wiem jak żmudna jest obsługa każdego wyboru.
Już sam formularz z wydrukiem powoduje sporo linijek kodu, a nad baza jeszcze nie zaczęłam pracować.

Jak widzicie głównie wykorzystuję instrukcję IF.
Czy da się to zrobić prościej?

Przykład jak to wygląda u mnie teraz
Formularz:
  1. <p>Program Pierwszy <input type="checkbox" name="Pierwszy" value="Yes" /></p>
  2. <p>Program Drugi <input type="checkbox" name="Drugi" value="Yes" /></p>
  3. <p>Program Trzeci
  4. <p>Opcja I
  5. <input type="checkbox" name="Trzeci[]" value="opI" />
  6. </p>
  7. <p>Opcja II
  8. <input type="checkbox" name="Trzeci[]" value="opII" />
  9. </p>
  10. <p>Opcja III
  11. <input type="checkbox" name="Trzeci[]" value="opIII" />
  12. </p>
  13. <p>Opcja IV
  14. <input type="checkbox" name="Trzeci[]" value="opIV" />
  15. </p>
  16. <p>Program Czwarty</p>
  17. <table border="0" cellspacing="4" cellpadding="4">
  18. <tr>
  19. <td>admin</td>
  20. <td><input type="checkbox" name="Czwarty_admin" value="Yes" /></td>
  21. </tr>
  22. <tr>
  23. <td>coś extra</td>
  24. <td><input type="checkbox" name="Czwarty_extra" value="Yes" /></td>
  25. </tr>
  26. <table border="0" cellpadding="4" cellspacing="4">
  27. <tr>
  28. <td align="left">dostęp do A</td>
  29. <td width="50" align="left"><input type="checkbox" name="Czwarty_A" value="Yes" /></td>
  30. <td align="left">tylko odczyt</td>
  31. <td width="50" align="left"><input type="checkbox" name="Czwarty_A_od" value="Yes" /></td>
  32. <td align="left">wszystko</td>
  33. <td width="50" align="left"><input type="checkbox" name="Czwarty_A_w" value="Yes" /></td>
  34. </tr>
  35. <tr>
  36. <td align="left">dostęp do B</td>
  37. <td width="50" align="left"><input type="checkbox" name="Czwarty_B" value="Yes" /></td>
  38. <td align="left">tylko odczyt</td>
  39. <td width="50" align="left"><input type="checkbox" name="Czwarty_B_od" value="Yes" /></td>
  40. <td align="left">wszystko</td>
  41. <td width="50" align="left"><input type="checkbox" name="Czwarty_B_w" value="Yes" /></td>
  42. </tr>


Wydruk:
  1. <table width="100%" border="0" align="center" id="ramki" cellpadding="0" cellspacing="0" >
  2.  
  3. <? $lp=1 ?>
  4.  
  5. <tr><td width="5%"><?= $lp ?></td>
  6. <td width="37%"><strong>Program Pierwszy</strong></td><td width="58%">
  7. <?php
  8. if (isset($_POST["Pierwszy"]))
  9. echo "TAK";
  10. else
  11. echo "<h2>Brak uprawnień</h2>";
  12. $lp++
  13. ?>
  14. </td></tr>
  15.  
  16. <tr><td><?= $lp ?></td><td><strong>Program Drugi</strong></td><td>
  17. <?php
  18. if (isset($_POST['Drugi']))
  19. echo 'TAK';
  20. else
  21. echo "<h2>Brak uprawnień</h2>";
  22. $lp++
  23. ?>
  24. </td></tr>
  25.  
  26. <tr><td><?= $lp ?></td><td><strong>Program Trzeci</strong></td><td>
  27. <?php
  28. if (isset($_POST['Trzeci']))
  29. foreach($_POST['Trzeci'] as $Trzeci) echo "$Trzeci <br>";
  30. else
  31. echo "<h2>Brak uprawnień</h2>";
  32.  
  33. $lp++
  34. ?>
  35. </td></tr>
  36.  
  37. <tr><td><?= $lp ?></td><td><strong>Program Czwarty</strong></td><td>
  38. <?php
  39. $licznikCzwartyM=0;
  40. if (isset($_POST['Czwarty_admin']))
  41. {
  42. echo 'admin<br>';
  43. $licznikCzwarty=1;
  44. }
  45. if (isset($_POST['Czwarty_extra']))
  46. {
  47. echo 'extra<br>';
  48. $licznikCzwarty=1;
  49. }
  50. if (isset($_POST['Czwarty_A']))
  51. {
  52. echo 'Czwarty A: ';
  53. $licznikCzwarty=1;
  54. if (isset($_POST['Czwarty_A_od']))
  55. echo 'tylko odczyt, ';
  56. if (isset($_POST['Czwarty_A_w']))
  57. echo 'wszystko';
  58. }
  59.  
  60. if (isset($_POST['Czwarty_B']))
  61. {
  62. echo 'Czwarty B: ';
  63. $licznikCzwarty=1;
  64. if (isset($_POST['Czwarty_B_od']))
  65. echo 'tylko odczyt, ';
  66. if (isset($_POST['Czwarty_B_w']))
  67. echo 'wszystko';
  68. }
  69. if ($licznikCzwarty==0) echo "<h2>Brak uprawnień</h2>";
  70. ?>
  71. </td></tr>


I pytanie dodatkowe.
Jaki typ danych powinnam użyć w MYSQL dla chcekboxa? Jeśli dam bit(1) to dane sie zapisuja do bazy, ale juz nie wyświetlaja potem na stronie (miejsce jest puste). Z tinyint(1) nie mam takiego problemu.
używam polecenia
  1. echo "<td>" . $kolumna['test'] . "</td>";
lukaskolista
Nie powinnaś używać żadnego typu do checkboxa w bazie danych. Nie mapuj aplikacji na bazę 1:1.
Do uprawnień użyj relacji, najprościej na 3 tabelach:
- users
id, name, ...

- resources
id, name, ...

- users_resources
user_id, resource_id

To taki bardzo prosty, podstawowy schemat. Generalnie symfony ma fajny ACL.
viking
Poczytaj też o systemach uprawnień przykładowo https://github.com/zendframework/zend-permissions-acl bo takie klepanie ifów nie ma większego sensu.
Ksenia
Oglądam to co mi zasugerowaliście. Na razie jestem zupełnie zielona, ale nie jestem pewna tez czy się dobrze zrozumieliśmy... wink.gif Więc się upewnię smile.gif
Mi nie chodzi o sterowanie uprawnieniami w programie, ale o ewidencje uprawnień jakie użytkownicy maja w ogóle w programach. Nie będę wstanie tego wyciągnąć z programów bo nie ja jestem ich autorem, sa one na różnych systemach itd.
Chce po prostu jednym kliknięciem widzieć z czego dany user korzysta. Niektórzy takie informacje trzymają w tabelce w excelu a ja chce cos lepszego wink.gif

Myślę, że problem mógłby dotyczyć też jakiegoś innego projektu.

A może faktycznie sa to gotowe rozwiązania do tego co potrzebuję, ale na razie nie wiem jak to ugryźć wink.gif

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.