Hallo,

Ik heb twee query's:
Query 1: haalt de gehele lijst met groepen op
Query 2: haalt de lijst op van groepen waar een gebruiker lid van is

Beide haal ik door een while en heb ik dus 2 lijstjes:
Lijstje 1: Groep_1, Groep_2, Groep_3, Groep_4 en Groep_5
Lijstje 2: Groep_1 en Groep_5

Nu wil ik dus in PHP een overzicht creëren wat er dus zo uit komt te zien:

Overzicht - Gebruiker_1 - Lid van groepen:
[x] Groep_1
[ ] Groep_2
[ ] Groep_3
[ ] Groep_4
[x] Groep_5

Hoe kan ik dit simpel doen? Ik kan er echt even niet op komen.
Uhm, even kortgedacht zou ik dit denk ik oplossen met:

<?
$lijstje1 = array('1','2','3','4','5');
$lijstje2 = array('3','4');

foreach ( $lijstje1 as $key) {
if ( in_array($key, $lijstje2) ) {
echo "[X] - ". $key. "<br>";
}
else {
echo "[ ] - ". $key. "<br>";
}
}
?>

Hopelijk kun je hier wat mee.
Kan ook in SQL:

SELECT g.gebruikers_naam,
	gr.groeps_naam,
	IF(gg.gebruikers_id IS NULL,0,1) AS lidmaatschap
FROM
	(SELECT ge.gebruikers_id,
		go.groeps_id
	FROM gebruikers AS ge
	CROSS JOIN groepen AS go
	) ggr
JOIN
	gebruikers g ON ggr.gebruikers_id = g.gebruikers_id
JOIN
	groepen gr ON ggr.groeps_id = gr.groeps_id
LEFT JOIN gebruikers_groepen gg
	ON ggr.gebruikers_id = gg.gebruikers_id
	AND ggr.groeps_id = gg.groeps_id
ORDER BY g.gebruikers_id, gr.groeps_id
D B op 12/02/2014 17:24:51

Uhm, even kortgedacht zou ik dit denk ik oplossen met:

<?
$lijstje1 = array('1','2','3','4','5');
$lijstje2 = array('3','4');

foreach ( $lijstje1 as $key) {
if ( in_array($key, $lijstje2) ) {
echo "[X] - ". $key. "<br>";
}
else {
echo "[ ] - ". $key. "<br>";
}
}
?>

Hopelijk kun je hier wat mee.


Bedankt voor jullie snelle reacties.

Alleen zijn bij mij lijstje1 en lijstje2 query's. Hoe ga ik dit dan toepassen met die foreach?
<?
$sql="SELECT groep FROM tabel";
$res=mysql_query($sql);
$lijstje1=array();
while ($row = mysql_fetch_array($res)){
$lijstje1[]=$row['groep'];
}

$sql="SELECT groep2 FROM tabel";
$res=mysql_query($sql);
$lijstje2=array();
while ($row = mysql_fetch_array($res)){
$lijstje2[]=$row['groep2'];
}

foreach ( $lijstje1 as $key) {
if ( in_array($key, $lijstje2) ) {
echo "[X] - ". $key. "<br>";
}
else {
echo "[&nbsp;&nbsp;&nbsp;] - ". $key. "<br>";
}
}
?>

Kun je hier wat mee?
Thx, dit werkt mooi.

Maar wat als ik in lijstje 1 nou een groepnaam en een groepid wil? Hoe krijg ik dit dan in die foreach?

[size=xsmall]Toevoeging op 18/02/2014 09:49:35:[/size]

Iemand een idee hoe ik bij lijstje1 een extra veld kan meegeven in de foreach? Dus bijvoorbeeld het groepid (&groepnaam)?
Iemand enig idee? Zit nu al een paar dagen te klooien zeg maar, maar het is steed trial and error... En helaas heb ik niet zoveel verstand van PHP dat me dit nou een makkie is.

"Maar wat als ik in lijstje 1 nou een groepnaam en een groepid wil? Hoe krijg ik dit dan in die foreach?

Toevoeging op 18/02/2014 09:49:35:

Iemand een idee hoe ik bij lijstje1 een extra veld kan meegeven in de foreach? Dus bijvoorbeeld het groepid (&groepnaam)?"

Bumpje, *vergeet al de bovenstaande posts* maar op welke manier kan ik bij die foreach bijvoorbeeld ook de groupid in de eerste TD erbij krijgen?:


<?php
		$query = mysql_query('SELECT `group`.`groupid`, `group`.`groupname`
							  FROM `group`');

		$getGroups = array();
			
		while($row = mysql_fetch_array($query))
		{
			$getGroups[] = $row['groupname'];
		}
								 
		$query = mysql_query('SELECT `group`.`groupid`, `group`.`groupname` 
                              FROM `group` 
                              INNER JOIN usergroup ON usergroup.groupid = group.groupid 
                              WHERE usergroup.userid = "'.$_GET['user_view'].'"');

		$getUserGroups = array();						 
								 
		while($row = mysql_fetch_array($query))
		{
			$getUserGroups[] = $row['g.groupname'];
		}
		
		foreach($getGroups as $key)
		{
			$i++;
		
			echo '<tr>';
			echo '<td>'.$key.'</td>';
			echo '<td><input type="radio" name="group-'.$i.'" value="1-'.$key.'" '.(in_array($key, $getUserGroups) ? 'checked' : '').' /></td>';
			echo '<td><input type="radio" name="group-'.$i.'" value="0-'.$key.'" '.(!in_array($key, $getUserGroups) ? 'checked' : '').' /></td>';	
			echo '</tr>';		
		}
?>
Mysql functies zijn deprecated. Backticks? Sql Injection? Hm..

<?php
while($row = mysql_fetch_array($query))
{
$getUserGroups[] = Array('name'=>$row['g.groupname'],'id'=>$row['groupid']);// Waar komt g vandaan? moet dit group zijn?
}

foreach($getGroups as $group)
{
$i++;

echo '<tr>';
echo '<td>'.$group['name'].' '.$group['id'].'</td>';
echo '<td><input type="radio" name="group-'.$i.'" value="1-'.$group['name'].'" '.(in_array($group['name'], $getUserGroups) ? 'checked' : '').' /></td>';
echo '<td><input type="radio" name="group-'.$i.'" value="0-'.$group['name'].'" '.(!in_array($group['name'], $getUserGroups) ? 'checked' : '').' /></td>';
echo '</tr>';
}
?>
edit: foutje in array
Ger van Steenderen op 12/02/2014 18:37:33

Kan ook in SQL:
....

Oké de query is wellicht wat moeilijker te begrijpen, maar uiteindelijk wordt het veel simpeler als je in php met array's gaat lopen klooien.

SELECT g.gebruikers_naam,
	gr.groeps_naam,
	IF(gg.gebruikers_id IS NULL,0,1) AS lidmaatschap
FROM
	(SELECT ge.gebruikers_id,
		go.groeps_id
	FROM gebruikers AS ge
	CROSS JOIN groepen AS go
	WHERE ge.gebruikers_id = 666  
	) ggr
JOIN
	gebruikers g ON ggr.gebruikers_id = g.gebruikers_id
JOIN
	groepen gr ON ggr.groeps_id = gr.groeps_id
LEFT JOIN gebruikers_groepen gg
	ON ggr.gebruikers_id = gg.gebruikers_id
	AND ggr.groeps_id = gg.groeps_id
ORDER BY g.gebruikers_id, gr.groeps_id



Nu geeft hij niks weer? Kan ik dan nog wel de bestaande query's gebruiken?

@ Hierboven, maar hoe ga ik dat dan vervolgens in radio buttons verwerken met een Lid Ja - Lid Nee?

Reageren