mysqli_num_rows не показывает желаемых результатов - PullRequest
0 голосов
/ 06 апреля 2019

В моей базе данных есть таблица «пользователи» (в настоящее время 4 пользователя), которая содержит разные роли (1 = пользователь, 2 = администратор, 3 = модератор).Я хочу показать некоторые строки моего php-скрипта только администраторам и модераторам, поэтому я сделал этот запрос: (я знаю, что это небезопасно)

$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
$stuff = 'SELECT * FROM `users` WHERE role > 0';
$result = mysqli_query($conn, $stuff);

В этом запросе перечислены все пользователи с ролью более 0.

require_once('link_to_script.php');
if (mysqli_num_rows($result) >1){
echo "Admin area";
}else{
echo "No Permissions";
}

Это должно быть самоочевидно (показывать «Область администратора» только пользователям с ролью выше 1)

Я не знаю, в чем моя ошибка, и я надеюсь, что кто-то может помочьменя немного :) 1009 *

Ответы [ 3 ]

0 голосов
/ 06 апреля 2019

Вы говорите, что хотите более 1 строки, вы, вероятно, хотите сказать, более 0 строк или просто 1 строка ...

if (mysqli_num_rows($result) >1){

Должно быть

if (mysqli_num_rows($result) >0){

или

if (mysqli_num_rows($result) == 1){

Что касается Я знаю, что это небезопасно - поскольку нет связанных параметров, SQL не может быть подвержен влиянию каких-либо входных данных, поэтому в этом случае нет проблем с безопасностью.,НО вы, возможно, захотите добавить вошедшего в систему пользователя в какой-то момент, это должно быть сделано с подготовленными утверждениями.

0 голосов
/ 06 апреля 2019

Сейчас я беру текущего пользователя с:

$userID = $page->users->currentUserId();
$stuff = 'SELECT role FROM `users` WHERE id = $userID';
$result = mysqli_query($conn, $stuff;
if (mysqli_num_rows($result) >2){
....

Захват текущего идентификатора пользователя работает, но как я могу сравнить его с той ролью, которая необходима?

0 голосов
/ 06 апреля 2019

Вы можете использовать IN в своем запросе SQL, например, если вам нужны администратор и модератор, используйте следующее

 SELECT * FROM `users` WHERE role IN ('2','3')

mysqli_num_rows возвращение количества строк в наборе результатов.

if (mysqli_num_rows($result)){
   echo "Admin and moderator area";
}else{
  echo "No Permissions";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...