Ik maak een add-to-cart-systeem in mijn website.
Als er geen items in de winkelwagen zijn, is de variabele $cart
ingesteld op NULL
.
Dit resulteert in de volgende foutmelding wanneer ik probeer het aantal items in de winkelwagentje te echelen: count(): Parameter must be an array or an object that implements Countable
implementeert.
Hier is mijn PHP-code:
<?php
if ((isset($_SESSION['active_user_type']) && $_SESSION['active_user_type'] == "consumer") || !isset($_SESSION['active_user'])) {
?>
<div class="shopping_cart">
<div class="cart_title">
<a href="view_cart.php">Shopping cart</a>
</div>
<?php
$total = 0;
if(isset($_SESSION['cart'])) {
$cart = $_SESSION['cart'];
for ($i=0; $i<count($cart); $i++) {
$item_id = $cart[$i][0];
$query = "SELECT * FROM items WHERE id=$item_id";
$result = $db->query($query);
if ($row = $result->fetch()) {
$price = ($row['price']*$cart[$i][1]) + $row['shipping_price'];
}
$total += $price;
}
} else {
$cart = NULL;
}
?>
<div class="cart_details">
// the error seems to be from the line below:
<?php echo count($cart); ?><br />
<span class="border_cart"></span> Total:
<span class="price">
<?php echo "BD " . number_format((float)$total,3,'.',''); ?>
</span>
</div>
<div class="cart_icon">
<a href="checkout.php" title="Checkout">
<img src="images/shoppingcart.png" alt="" width="48" height="48" border="0" />
</a>
</div>
</div>
<?php
}
?>
Antwoord 1, autoriteit 100%
Dit komt omdat je op ‘NULL’ rekent. Probeer het als volgt:
.
.
.
else
{
$cart = [];
}
Antwoord 2, autoriteit 33%
Het is omdat je iets probeert te tellen dat niet telbaar is (hoe kun je het aantal elementen in null tellen?). Uit de documentatie:
7.2.0: count() geeft nu een waarschuwing over ongeldige telbare typen die zijn doorgegeven aan de parameter array_or_countable.
dus vóór versie 7.2.0 werd deze waarschuwing niet gegeven. Als in alle versies obj
in count(obj)
geen geldig array/telbaar object is, retourneert de functie 1
, met uitzondering van count(null)
wat 0
oplevert.
U kunt:
- Cast het naar een array
- Stel het expliciet in op een lege array als deze leeg is
- Zet een vinkje voordat je gaat echoën
1:<?php echo count((array)$cart);?>
2:else { $cart = []; }
3:<?php ($cart == null) ? '' : echo count($cart);?>
Antwoord 3, autoriteit 33%
Wanneer $cart == NULL
(zoals het is toegewezen in uw else
-clausule) is het niet count
in staat sinds NULL
heeft geen Countable
-interface. Vanaf PHP 7.2is dit resulteert in het waarschuwingsbericht dat u hebt gezien.
Maar het lijkt erop dat je niet moet proberen een winkelwagentje uit te voeren als je er geen hebt, dus je moet die code gewoon naar je if
-blok verplaatsen, d.w.z.
$total = 0;
if(isset($_SESSION['cart']))
{
$cart = $_SESSION['cart'];
for ($i=0; $i<count($cart); $i++)
{
$item_id = $cart[$i][0];
$query = "SELECT * FROM items WHERE id=$item_id";
$result = $db->query($query);
if ($row = $result->fetch())
{
$price = ($row['price']*$cart[$i][1]) + $row['shipping_price'];
}
$total += $price;
}
?>
<div class="cart_details"> <?php echo count($cart);?> <br />
<span class="border_cart"></span> Total: <span class="price"><?php echo "BD " .
number_format((float)$total,3,'.',''); ?></span> </div>
<div class="cart_icon"><a href="checkout.php" title="Checkout"><img src="images/shoppingcart.png"
alt="" width="48" height="48" border="0" /></a></div>
</div>
<?php
}
else
{
$cart = NULL;
}
?>