Jag får inte följande uttryck att fungera:
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."";
Vad är galet?! Borde det inte fungera men "IN"?
LarsGMedlem sedan dec. 200012 464 inlägg Och vad menas med inte fungera?
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?
LarsGMedlem sedan dec. 200012 464 inlägg Börja med att eka ut din fråga och testa den separat.
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?
Peter SMedlem sedan dec. 20025 483 inlägg Vad får du med
echo $sqlSelect;
?
Red./ Sedan bör väl else-satsen se ut så här
else {
$inline = "(1)";
}
Peter SMedlem sedan dec. 20025 483 inlägg Om du kör den direkt mot MySQL får du resultatet i inlägg #5?
Peter SMedlem sedan dec. 20025 483 inlägg Eftersom Lars gav rådet att testa den separat trodde jag att du kanske gjort just det. Om så inte var fallet är det bara att sätta igång :)
Peter S skrev:
inlägg #5?
Jag menade vad du syftade på när du sa "inlägg #5". Jag har ju en select-ruta där det slutgiltiga resultatet presenteras och där finns inget inlägg :)
@ndersMedlem sedan juni 200032 969 inlägg Jag tror att detta är inlägg #5... :o
Peter S skrev:
Om du kör den direkt mot MySQL får du resultatet i inlägg #5?
Jag fick hjärnsläpp och fattade inte vad du syftade på :e
Svaret i inlägg # 5 fick jag när jag körde direkt mot MySQL-databasen.
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;
}
Peter SMedlem sedan dec. 20025 483 inlägg
lillebror skrev:
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
Peter SMedlem sedan dec. 20025 483 inlägg Det kan inte vara
categoryID = $ID AND visible = 1
...som ställer till det? Vad får du t ex med
"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"].")"
Peter S skrev:
Det kan inte vara
categoryID = $ID AND visible = 1
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 class="select" name="forumshortcutID" size="1" onchange="f(this)">
<?php while($forumcategory = mysql_fetch_array($RSobj_forum_category)) {
$RSobj_shortcut = showShortcutForumList($forumcategory['categoryID']); ?>
Peter S skrev:
"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.