Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] [mysql] dużo checkboxów
Ksenia
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.06.2016

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


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>";
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
lukaskolista
post
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


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.
Go to the top of the page
+Quote Post
viking
post
Post #3





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

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


Poczytaj też o systemach uprawnień przykładowo https://github.com/zendframework/zend-permissions-acl bo takie klepanie ifów nie ma większego sensu.


--------------------
Go to the top of the page
+Quote Post
Ksenia
post
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.06.2016

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


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

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 Aktualny czas: 21.08.2025 - 14:16