Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL + PHP] Dodawanie array z db do db.
Forum PHP.pl > Forum > PHP
lukafight
Witam,
Prosze o pomoc w rozwiązaniu pewnego problemu.

Sytuacja wygląda następująco: mam 4 tabele
1. Menu (menu_id, menu_item)
2. Permission (per_lvl_id, per_name)
3. User_Permission user_per_id, menu_id(FK), per_lvl_id(FK), user_id(FK)
4. User (user_id, user_name, user_pass)


Chce aby to wyglądało następująco:
skrypt PHP generuję formularz:

- Menu1 (Combobox - do wyboru Permissionname)
- Menu2 (Combobox - do wyboru Permissionname)
- Menu3 (Combobox - do wyboru Permissionname)

Ma on przesylac user_id, powyzsze menu_id i per_lvl_id do tabeli user_permission
Następnie klikam wyślij i dodaje te 3 rekordy do bazy danych.

Jak to mogę rozwiązać?
Kostek.88
Cytat
skrypt PHP generuję formularz:


Pokaż co masz smile.gif
lukafight
  1. $userid = '';
  2. $combo_list = '';
  3. $menu_list = '';
  4. //SELECT PERMISSION
  5. $mysql_select_combo = "SELECT PER_LVL_ID, PER_NAME FROM PERMISSION_LEVEL";
  6. $combo_qry = mysql_query($mysql_select_combo);
  7.  
  8. $mysql_select = "SELECT MENU_ID, MENU_ITEM FROM MENU_ITEMS";
  9. $menu_qry = mysql_query($mysql_select);
  10.  
  11. //SELECT MENU
  12. while($menu_row = mysql_fetch_assoc($menu_qry))
  13. {
  14. while ($combo_row = mysql_fetch_assoc($combo_qry))
  15. {
  16. $permission_id = $combo_row['PER_LVL_ID'];
  17. $permission_name = $combo_row['PER_NAME'];
  18. $combo_list .= "<option>". $permission_name ."</option>";
  19.  
  20. }
  21. $menu_id = $menu_row['MENU_ID'];
  22. $menu_name = $menu_row['MENU_ITEM'];
  23. $menu_list .= "<table>";
  24. $menu_list .= "<tr>";
  25. $menu_list .= "<td>" .$menu_name."</td>";
  26. $menu_list .= "</tr>";
  27. $menu_list .= "</table>";
  28. $menu_list .= "<select>";
  29. $menu_list .= "<table>";
  30. $menu_list .= "<tr>";
  31. $menu_list .= "<td>" . $menu_id .$combo_list . "</td>";
  32. $menu_list .= "</tr>";
  33. $menu_list .= "</table>";
  34. $menu_list .= "</select>";
  35. }
  36.  
  37. //Wysyla dane do bazy danych
  38. if(isset($_POST['submit']))
  39. {
  40. $userid = $_POST['user_id'];
  41. $mysql_insert = "INSERT INTO USER_PERMISSION SET USER_ID = '$userid', MENU_ID = '$menu_id', PER_LVL_ID ='$permission_id'";
  42. $insert_qry = mysql_query($mysql_insert);
  43. }
  44.  
  45.  
  46.  


Nie wiem poprostu co dalej... a może macie inny pomysł by się za to zabrać?
Kostek.88
A co chcesz z tym dokładnie zrobić? Chcesz, żeby każdy user miał różne uprawnienia na menu, które są dodane do tabeli? A skąd wiemy któremu userowi aktualnie przydzielasz prawa? Może brakuje nam strony/dodatkowego menu, gdzie najpierw wybierasz usera, a potem wybierasz do którego menu ma mieć odpowiedni poziom uprawnień?

Ja bym zrobił

1) 2 selecty

menu -------------- uprawnienie
menu -------------- uprawnienie
menu -------------- uprawnienie
menu -------------- uprawnienie

i dobierał parami. Wtedy masz wysyłane pary menu -> uprawnienie

ew.

2) 1 select, ale jako value przy każdej opcji dałbym np. idMenu_idUprawnienie, np. 1_2, albo 1_3, albo 4_3, a potem bym rozbijał to funcją explode.

Ale jak masz zamiar wybrać do tego usera? Może tak jak na początku napisałem? Wtedy zapamiętujesz gdzieś id usera, np. w input hidden, a potem pobierasz z selecta/ów resztę danych... i dodajesz do tabeli user_permission(id, permission_id, menu_id, user_id):

- id (auto)
- permission_id (pobrane z selecta po rozbiciu poprzez explode lub z 2ch selectów)
- menu_id (jak wyżej)
- user_id (wstawiona wartość z input hidden)

Po prostu w Twoim designie nie ma miejsca na usera ani menu smile.gif Ew. możesz trzymać menu_id w hidden.

PS. Nie czytałem Twojego kodu wink.gif
lukafight
Przepraszam zapomnialem zapodac reszte kodu tzn. HTML a wyglada to tak:
UserID pobieram na samym poczatku formularza.

Nastepnie skrypt php wyciaga mi z bazy danych wszystkie menu ktore mam z tabeli Menu. Kazde menu dostaje obok <select> do wyboru z poziomami uprawnien ktore pobieram z innej tabeli Permission.

Tak kazdy user ma miec rozne uprawnienia do menu. Cos takiego ma mi wysylac do bazy. Formularz dotyczy tylko jednego usera.
- User_Permission_id = 1, User = 1 , Menu = 1, Permisson = 1
- User_Permission_id = 2, User = 1 , Menu = 2, Permisson = 1
- User_Permission_id = 3, User = 1 , Menu = 3, Permisson = 1

Nastepny user dostaje cos takiego.
- User_Permission_id = 4, User = 2 , Menu = 1, Permisson = 3
- User_Permission_id = 5, User = 2 , Menu = 2, Permisson = 3
- User_Permission_id = 6, User = 2 , Menu = 3, Permisson = 3

Gdzie Permission = 1 to Read-Only a 3 to Full Control

Poniewaz menuid i permissionid to array myslalem nad foreach ale nie wiem jak go skonstruowac
a nastepnie FOR loop gdzie bedzie dodawal mi rekordy.

Dziekuje za powyzsze wskazowki.
Kostek.88
A gdzie masz właściwy kod z formularza HTML? To co podajesz wyżej ma tylko tagi OPTION, bez SELECT. Ogólnie to możesz zrobić coś takiego:

  1. <select name="menu[id_menu]">
  2. <option value="1">1</option>
  3. <option value="2">2</option>
  4. <option value="3">3</option>


gdzie id_menu to po prostu ID danego menu pobierane z bazy danych. Później

  1. foreach($_POST['menu'] as $id_menu => $wartosc) { // może być też $_GET['menu'], zależnie od tego jaki method ustawiłeś w formularzu
  2. // dodawanie, zwykły INSERT do bazy... masz już ID wybranego menu oraz jego wartość, czyli to co jest w value przy OPTION.
  3. }


Załatwiasz to 1 pętlą foreach i nie potrzebujesz FOR i innych cudów. Zerknij na konstrukcję foreach w manualu smile.gif
lukafight
Po skonstruowaniu FOREACH dodaje mi on tylko ostatnie wartosci do bazy danych:

  1. foreach($_POST['ID_MENU'] as $MENU => $VALUE_MNU)
  2. {
  3. foreach($_POST['ID_PRM'] as $PRM => $VALUE_PRM)
  4. {
  5. $VALUE_PRM = $PERMISSION_ID;
  6. }
  7. $VALUE_MNU = $MENU_ID;
  8. $qry_uap = "INSERT INTO TBL_USER_ACCESS_POLICY SET
  9. UAP_USERID = '$USERID',
  10. UAP_MENUID = '$VALUE_MNU',
  11. UAP_PERMISSIONID = '$VALUE_PRM'";
  12. $result_uap = mysql_query($qry_uap);
  13. }


Generowanie formularza
  1. //Selecting Permission Array from database
  2. $qry_select_per = "SELECT * FROM TBL_PERMISSIONS";
  3. $result_select_per = mysql_query($qry_select_per);
  4. //Selecting Menu's Array from database
  5. $qry_select_mnu = "SELECT * FROM TBL_MENU";
  6. $result_select_mnu = mysql_query($qry_select_mnu);
  7.  
  8. //Displaying results of the both tables
  9. while($mnu_row = mysql_fetch_array($result_select_mnu))
  10. {
  11. while($per_row = mysql_fetch_array($result_select_per))
  12. {
  13. //Rows of Permission table into variable
  14. $PERMISSION_ID = $per_row['PRM_PERMISSIONID'];
  15. $PERMISSION_NAME = $per_row['PRM_NAME'];
  16. $PERMISSION_LIST .= "<option value=\"$PERMISSION_ID\">". $PERMISSION_NAME. "</option>";
  17. }
  18. //Rows of Menu table into variable
  19. $MENU_ID = $mnu_row['MNU_MENUID'];
  20. $MENU_NAME = $mnu_row['MNU_NAME'];
  21. $MENU_LIST .= $MENU_NAME;
  22. $MENU_LIST .= "<input type=\"hidden\" name=\"ID_MENU[$MENU_ID]\" value=\"$MENU_ID\">";
  23. $MENU_LIST .= "<select name=\"ID_PRM[$PERMISSION_ID]\" >";
  24. $MENU_LIST .= $PERMISSION_LIST;
  25. $MENU_LIST .= "</select>"."<br />";
  26.  
  27.  
  28. }


Czy jest ktoś w stanie mi pomóc?
Pozdrawiam,
lukafight
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.