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 :OO
"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.
141 ms totalt · 3 externa anrop · v20260731065814-full.55e59744