ugrás a tartalomhoz

Felhasználó csoportjait jelölő checkboxok kijelölése

Anonymous · 2006. Júl. 31. (H), 14.59
Sziasztok
Adott a kovetkezo pelda:

$find   = mysql_query("SELECT * FROM register WHERE username='".$_SESSION['username']."'");
$fetch  = mysql_fetch_array($find);

$user   = mysql_query("SELECT uid,gid FROM user2groups WHERE gid='2'");
$user_num  = mysql_fetch_array($user); 
A register tablaban talalhato minden regisztralt felhasznalo.

A user2groups tabla a kovetkezo keppen nez ki:

uid  |  gid
===========
1    |   1
1    |   2
Az uid a felhasznalo szama. A GID pedig azt mutatja milyen csoportokban van a felhasznalo bent.

Ebben az esetben az en felhasznalom (1) bent van az 1 es a 2 csoportban.

Most egy kulon laprol, hozaadok meg egy csoportot, peldaul 3-as csoport. Alapertelmezeten a user nem lesz tagja az uj csoportnak, ezert azon a lapon ahol a user adatait modositom (mint admisztrator) szeretnem ha lenne 3 checkbox.

[x] 1
[x] 2
[ ] 3
Az elso ketto legyen kijelolve mert a felhasznalo tagja a csoportnak, de a 3 ne legyen bejelolve mivel nem tagja most a 3-ik csoportnak.

A csoportok a kovetkezo tablakban vannak:

groups:

id   |   name
=============
1    |  registered
2    |  second
3    |  newgroup
user2groups:

uid  |   gid
=============
1    |  1
1    |  2
Az user2groups tablaban az uid azt mondja, hogy az 1-es felhasznalo benne van az (1-registered) es a (2-second) csoportban.

A checboxokat a kov kepen listazom ki:

$group  = mysql_query("SELECT id,name FROM groups");

while ($row = mysql_fetch_array($group)) {
print "\n" . '<br /><input type="checkbox" name="'.$row['name'].'" value="'.$row['id'].'"'. ($user_num['uid'] == $row['uid'] ? ' checked="checked"' : "") .'>'.$row['name'].'</input>'; 
Hogyan tudom megcsinalni, hogy csak azokat a checkboxok legyenek kijelolve amelyben a user benne van (resze a csoportnak)

Koszonom !
 
1

in_array

Hojtsy Gábor · 2006. Júl. 31. (H), 17.11
Kérdezd le a users2groups táblából az összes felhasználóhoz kapcsolható csoportot, ezt tedd be egy $usercsoportjai tömbbe (a tömbelemek értéke legyen a csoport száma). Amikor kiírod az aktuális csoport checkboxot, akkor ott az in_array($aktualiscsoport, $usercsoportjai) használatával tudod ellenőrizni, hogy a felhasználó tagja-e a csoportnak. A változóneveket persze alakítsd ahogy szeretnéd :)
2

Koszonom

Anonymous · 2006. Júl. 31. (H), 17.47
Koszonom !
Megis megkernelek nezd meg jol adtam hozza a tombhoz ar ertekeket:

$user = mysql_query("SELECT uid,gid FROM user2groups WHERE uid='1'");
$user_num  = mysql_fetch_array($user);

$usergroups = array($user_num);
Az $aktualiscsoport-ot honnen kapom meg ?

Nagyon halas lennek ha tudnal segiteni, estere kesz kene legyek vele !
Koszonom !
3

Mukodik

Anonymous · 2006. Júl. 31. (H), 17.54
Ok, azt hiszem mukodik, eledezik a script , csak a tombot manualisan adtam hozza.

Valahogy igy:

$usergroups = array(4,6);

Tudnal segiteni egy peldaval, hogyan nyomjam be az oszes erteket amit a mysql visszakuld?
4

nem egy érték

Hojtsy Gábor · 2006. Júl. 31. (H), 21.22
Mivel nem egy értéket kérsz le, nem egy mysql_fetch_array()-t kellene lefuttatni, hanem annyit, amennyi sor van (amíg sort ad vissza a mysql_fetch_array()). Ez a mysql_fetch_array() használók alap iskolapéldája.
5

Koszonom

Anonymous · 2006. Aug. 1. (K), 00.08
Koszonom ! Sikerult, mukodik !
6

problema

Anonymous · 2006. Aug. 2. (Sze), 15.25
Egy problema van az in_array megoldasal:

in_array($aktualiscsoport, $usercsoportjai);
Ha nincs egy checkbox sem bejelolve a kovetkezo errort kapom :

Warning: in_array(): Wrong datatype for second argument in /home2/devfirst/public_html/admincp/edit.php on line 116
Megprobalom a hibat elharitani a kovetkezovel:

@in_array($aktualiscsoport, $usercsoportjai);
De nem tudom ha ez az igazi megoldas es egeseges a PHP-nek.
Kerek par tanacsot.

Koszonom !
7

$usercsoportjai = array();

Hojtsy Gábor · 2006. Aug. 2. (Sze), 22.41
Egy $usercsoportjai = array(); inicializálást kellene a ciklus elé tenni, amivel fetöltöd ezt elemekkel. Akkor ha nincs elem, akkor is tömb lesz.