Beroende på om besökaren är inloggad eller inte plockar den första if-satsen ut alla de medlemsgrupper som en användare är med i (de styr vilka forum som visas). I SQL-satsen nedanför hämtas titel och forumID för forum som har visible = 1 och där categoryID = $ID samt slutligen där usergroup-fältet för ett visst forum matchar något/någon av de grupper som en medlem är medlem i.
I nuläget misstänker jag att felet ligger i usergroup ID ".$inline."";. Jag är osäker på vilka värden som jag igentligen får med mig i den nästlade SQL-satsen.
Enligt den bifogade bilden så ska forumet "Utveckling och idéer" vara dolt i den select-lista som visas. Men i detta så är den fullt synligt. Hur felsöker jag?
Detta får jag ut i den nästlade satsen (bifogad bild)
Resultatet talar ju om vilka grupper som en medlem (jag i detta fallet) är med i. 1,2 och 3 innebär att jag kan ta del av samtliga forum. Felet verkar ju nu ligga i huvudsatsen. Jämför inte SQL-satsen usergroupID-fältet i tblforum med det resultat som kommer från tblmemberusergroups?
Så ser den dagsaktuella varianten av funktionen ut med "IN". Får det fortfarande inte att fungera:
function showShortcutForumList($ID) {
if($_SESSION["uid"] <> '') {
$inline = "(SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")";
} else {
$inline = 1;
}
$sqlSelect = "SELECT title, forumID FROM tblforum AS t1 WHERE categoryID = $ID AND visible = 1 AND usergroupID IN (".$inline.")";
$RSobj = mysql_query($sqlSelect) or die (mysql_error());
#$row = mysql_fetch_array($RSobj);
return $RSobj;
}
I den bifogade bilden syns nu enbart det forum som har ett usergroupID = 3. Alla de andra forumen har usergroupID = 1. Dessa världen verkar inte följa med från...
$inline = "(SELECT MAX(usergroupID) FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")";
} else {
$inline = 1;
}
I den bifogade bilden syns nu enbart det forum som har ett usergroupID = 3. Alla de andra forumen har usergroupID = 1. Dessa världen verkar inte följa med från...
$inline = "(SELECT MAX(usergroupID) FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")";
} else {
$inline = 1;
}
Det är för att max() returnerar ett värde (3 i det här fallet).
Sedan borde det väl se ut så här:
function showShortcutForumList($ID) {
if($_SESSION["uid"] <> '') {
$inline = [b]"SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"];[/b]
} else {
$inline = 1;
}
$sqlSelect = "SELECT title, forumID FROM tblforum AS t1 WHERE categoryID = $ID AND visible = 1 AND usergroupID IN (".$inline.")";
$RSobj = mysql_query($sqlSelect) or die (mysql_error());
#$row = mysql_fetch_array($RSobj);
return $RSobj;
}
Vad får du för resultat med
SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"];
Jag missade att korrigera på den del jag hade kopierat och klistrat in i inlägget. MAX() är alltså borttaget i min nuvarande variant.
När jag kör sql-frågan utan MAX() får jag ut 1,2,3. Det är märkligt att jag sedan inte kan matcha det resultatet mot respektive usergroupID för varje forum
"SELECT title, forumID FROM tblforum AS t1 WHERE usergroupID IN (SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"
...respektive
"SELECT title, forumID FROM tblforum AS t1 WHERE visible = 1 AND usergroupID IN (SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"
Undersöker saken nu...categoryID = $ID behöver jag för i en while-slinga i php-filen matar jag funktionen function showShortcutForumList($ID) med categoryID som varje forum tillhör. Den behöver jag nog ha kvar.
"SELECT title, forumID FROM tblforum AS t1 WHERE usergroupID IN (SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"
När jag kört denna sql-sats med mitt användarID på sidan (jag tillhör både grupp 1,2,3) så får jag 18 träffar (dvs samtliga forum visas för mig) medan en "vanlig" användare med behörighet 1 endast får 17 träffar. Då verkar det stämma för det finns enbart 1 forum som kräver behörighet 3.
Peter S skrev:
"SELECT title, forumID FROM tblforum AS t1 WHERE visible = 1 AND usergroupID IN (SELECT usergroupID FROM tblmemberusergroups WHERE memberID = ".$_SESSION["uid"].")"
För mig som tillhör samtliga grupper får jag upp samtliga forum (17 st) där visible = 1. Ett forum har visible = 0. Då stämmer resultatet så här långt när jag fyller i sql-frågan med mitt användarID. Användare med enbart behörighet 1 får upp 16 st forum.
Den sista av de två föreslagna sql-satserna fungerade fint. Sedan provade jag att lägga till categoryID = 1 för att få alla forum under den sektionen. Då fick jag error. CategoryID återfinns i tabellen tblforum. Det verkar vara här felet uppstår.
258 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a