Ich richte eine Webanwendung mit mehreren Benutzerrollen ein, die bestimmen, welche Ansicht ein bestimmter Benutzer beim Besuch bestimmter Abschnitte erhält (oder ob diese Abschnitte ihnen überhaupt zur Verfügung stehen). Ich habe eine Tabelle ("Benutzer"), die Spalten für "Benutzername" und "Rolle" enthält. Ich habe eine zweite Tabelle ("Rollen"), die Spalten für "Rolle" sowie eine Spalte für jeden Abschnitt enthält, wobei jede mehrere mögliche Werte enthält, die die Benutzererfahrung für jede Rolle verbessern. Die Spalte, um die es hier geht, heißt "useradminview", aber ich habe das gleiche Problem mit allen anderen Spalten.
Ich habe kein Problem damit, die Rolle eines bestimmten Benutzers zu erhalten, wenn er sich anmeldet. Wenn ich jedoch versuche, die dieser Rolle zugeordnete Benutzeradministrationsansicht abzurufen, gibt meine Abfrage den Spaltennamen und nicht den erwarteten Wert zurück.
Ich habe mehrere Beiträge zu Stackoverflow und anderen Websites gefunden, die dasselbe Symptom aufweisen, aber die Abfragen sind anders eingerichtet als meine. Jede Hilfe wird sehr geschätzt!
//function to get role for user - this returns the expected value
function getUserRole($username) {
include($_SERVER["DOCUMENT_ROOT"] . "/sharedinc/db.php");
try {
$sql = "SELECT role FROM users WHERE username = :username";
$s = $pdoUsers->prepare($sql);
$s->bindValue(":username", $username);
$s->execute();
} catch (PDOException $e) {
$error = "Error obtaining user role";
include($_SERVER["DOCUMENT_ROOT"] . "/sharedinc/dboutput.php");
exit();
}
$role = $s->fetch();
return $role[0];
}
//function to check page view for that role - this returns the column name
function getPageView($role, $page) {
include($_SERVER["DOCUMENT_ROOT"] . "/sharedinc/db.php");
try {
$sql = "SELECT :page FROM roles WHERE role = :role";
$s = $pdoUsers->prepare($sql);
$s->bindValue(":role", $role);
$s->bindValue(":page", $page);
$s->execute();
} catch (PDOException $e) {
$error = "Error obtaining pageview for role";
include($_SERVER["DOCUMENT_ROOT"] . "/sharedinc/dboutput.php");
exit();
}
$pageview = $s->fetch();
return $pageview[0];
}
//end-goal query needs to be able to store the values as session variables
$_SESSION["username"] = $_POST["username"];
$_SESSION["role"] = getUserRole($_SESSION["username"]);
$_SESSION["useradminview"] = getPageView($_SESSION["role"], "useradminview");
Sie können den Zeilennamen nicht über bind eingeben. ändere es in:
try {
$sql = "SELECT $page FROM roles WHERE role = :role";
$s = $pdoUsers->prepare($sql);
$s->bindValue(":role", $role);
$s->execute();
} catch (PDOException $e) {
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen