Как я могу удалить эту ошибку (!) Предупреждение: mysqli_query (): Пустой запрос в D: \ wamp64 \ www \ complete_blog_php \ admin \ includes \ post_functions.php в строке 28 - PullRequest
0 голосов
/ 23 октября 2018
<?php 
// Post variables
$post_id = 0;
$isEditingPost = false;
$published = 0;
$title = "";
$post_slug = "";
$body = "";
$featured_image = "";
$post_topic = "";

/* - - - - - - - - - - 
-  Post functions
- - - - - - - - - - -*/
// get all posts from DB
function getAllPosts()
{
    global $conn;

    // Admin can view all posts
    // Author can only view their posts
    if ($_SESSION['user']['role'] == "Admin") {
        $sql = "SELECT * FROM posts";
    } elseif ($_SESSION['user']['role'] == "Author") {
        $user_id = $_SESSION['user']['id'];
        $sql = "SELECT * FROM posts WHERE user_id=$user_id";
    }
    $result = mysqli_query($conn, $sql);
    $posts = mysqli_fetch_all($result, MYSQLI_ASSOC);

    $final_posts = array();
    foreach ($posts as $post) {
        $post['author'] = getPostAuthorById($post['user_id']);
        array_push($final_posts, $post);
    }
    return $final_posts;
}
// get the author/username of a post
function getPostAuthorById($user_id)
{
    global $conn;
    $sql = "SELECT username FROM users WHERE id=$user_id";
    $result = mysqli_query($conn, $sql);
    if ($result) {
        // return username
        return mysqli_fetch_assoc($result)['username'];
    } else {
        return null;
    }
}
?>

1 Ответ

0 голосов
/ 23 октября 2018

Если оба эти условия не выполняются:

 if ($_SESSION['user']['role'] == "Admin") {
    $sql = "SELECT * FROM posts";
} elseif ($_SESSION['user']['role'] == "Author") {
    $user_id = $_SESSION['user']['id'];
    $sql = "SELECT * FROM posts WHERE user_id=$user_id";
}
$result = mysqli_query($conn, $sql);

Тогда переменная $sql не определена.Если вам нужно иметь их таким образом, то вы можете проверить, установлено ли оно, и вернуть значение по умолчанию.

 if ($_SESSION['user']['role'] == "Admin") {
    $sql = "SELECT * FROM posts";
} elseif ($_SESSION['user']['role'] == "Author") {
    $user_id = $_SESSION['user']['id'];
    $sql = "SELECT * FROM posts WHERE user_id=$user_id";
}
if(!isset($sql)) return false; //or [] if you want the type to stay an array.
$result = mysqli_query($conn, $sql);

или что-то подобное, в зависимости от ваших потребностей.

Вы также можетевернуть ошибку:

}else{
     return new WP_Error( 'restricted', __( "Not an Admin or Author", "my_textdomain" ) );
}

https://codex.wordpress.org/Class_Reference/WP_Error

По сути это $_SESSION['user']['role'] не является ни Admin, ни Author.Следует отметить, что совпадения строк чувствительны к регистру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...