Отображать содержимое на основе того, является ли список желаний общедоступным c или закрытым, и если в списке желаний есть 0 или более 0 элементов - PullRequest
0 голосов
/ 11 апреля 2020

так что пользователи могут иметь список желаний, куда они могут добавлять элементы. они также могут выбрать, является ли его publi c или частным. $ wishlistisPubli c означает, что 1 - publi c, а 0 - private. что я хочу, чтобы отображать различные сообщения на основе этих условий. мой код:

$sql = "SELECT * FROM oopphp_users INNER JOIN oopphp_wishlist ON oopphp_users.userID = oopphp_wishlist.userID_fk WHERE userID = ? ORDER BY itemID_fk ASC";
$stmt = $this->connect()->prepare($sql);
$stmt->bindParam(1, $userID, PDO::PARAM_INT);
$stmt->bindColumn('wishlistIsPublic', $wishlistisPublic, PDO::PARAM_INT);
$stmt->execute();

$results = $stmt->fetchAll();
$itemCount = $stmt->rowCount();

if($wishlistisPublic == 1){
            if($itemCount > 0){
                echo "<h1 class='w-100'>There are {$itemCount} items on this users wishlist</h1>";
                return $results;
            } else {
                echo "<div class='alert alert-info'>No items in wishlist</div>";
            }
        } else {
            echo "<div class='alert alert-info'>This user has set their wishlist to private.</div>";
        }
}

, так что, прежде всего, если он опубликован c и в списке пожеланий более 0 пунктов, я его отображаю. это работает

, если список желаний является частным, он скажет, что он является личным. это работает.

, где возникает проблема, когда я проверяю, есть ли в нем более 0 элементов, ссылаясь на мою переменную $ itemCount.

, если их больше 0, они будут отображаться , если есть 0, я хочу сказать, что он пуст. однако, если список желаний - publi c, а $ itemCount - 0, он не будет отображать этот оператор else. он говорит, что список желаний является личным.

, поэтому я никогда не получаю это, чтобы показать:

else {
 echo "<div class='alert alert-info'>No items in wishlist</div>";
}

1 Ответ

1 голос
/ 11 апреля 2020

Вы не можете использовать JOIN для отображения этой информации.

В случае INNER JOIN не будет никакой информации о том, является ли список желаний общедоступным c или закрытым, когда нет элементов.
In В случае LEFT LEFT в результатах не будет ложной положительной строки, когда нет элементов.

Следовательно, вам нужно выполнить два запроса

$sql = "SELECT wishlistIsPublic FROM oopphp_users WHERE userID = ?";
$stmt = $this->connect->prepare($sql);
$stmt->execute([$userID]);
$wishlistisPublic = $stmt->fetchColumn();

$sql = "SELECT * FROM oopphp_wishlist WHERE userID_fk = ? ORDER BY itemID_fk ASC";
$stmt = $this->connect->prepare($sql);
$stmt->execute([$userID]);
$results = $stmt->fetchAll();


if($wishlistisPublic) {
    if($results) {
        echo "<h1 class='w-100'>There are {$itemCount} items on this users wishlist</h1>";
        foreach ($results as $row) {
             // display results
        }
    } else {
        echo "<div class='alert alert-info'>No items in wishlist</div>";
    }
} else {
    echo "<div class='alert alert-info'>This user has set their wishlist to private.</div>";
}

Обратите внимание, что вы никогда не должны никогда вызовите connect () более один раз . Одно соединение должно быть сделано только один раз, а затем использовано для выполнения всех запросов в скрипте

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