1

洗車という名前のオブジェクトを作成しました。セッションを作成し、そのオブジェクトをセッションに割り当てました。数量を入力して購入ボタンを押すと、結果が得られます (例 6):

ショッピングカートには 6 個の商品が含まれています。

しかし、何も入力しないと、次のようになります。

ショッピング カートには商品が含まれています。

どうすればいいですか?ありがとうございました!ここにすべての私のコードがあります:

index.php
PHP コード:

<?php 
    session_start();  

    require_once 'carwash.php'; 
    if (isset($_SESSION['encoded_cartopass'])) { 
        // first let's get the variable from the session 
        $encoded_cartopass = $_SESSION['encoded_cartopass']; 

        // now let's unpack it 
        $cartopass = unserialize($encoded_cartopass); 

        // echo quantity 
        echo "Your shopping cart contains {$cartopass->getQuantity()} items. <br /><br />"; 
    } 
    else { 
        echo "Your shopping cart contains 0 items. <br /><br />"; 
    } 
?> 



    <form action="process.php" method="post"> 
    Quantity: <input type="text" name="quantity" id="quantity"/> 
    <input type="submit" value="Buy" name="submit" /> 
    </form>

process.php
PHP コード:

<?php 

    require_once 'carwash.php'; 

    if (isset($_POST['submit'])) { 

        if (!isset($_SESSION['encoded_cartopass'])) { 

            // construct and set quantity 
            $cartopass = new carwash(); 
            $cartopass->setQuantity($_POST['quantity']); 

            // construct and encode session 
            session_register('encoded_cartopass'); 
            $_SESSION['encoded_cartopass'] = serialize($cartopass); 
        } 
        else { 
            // if session is existing, decode it and 
            // increment quantity 
            $encoded_cartopass = $_SESSION['encoded_cartopass']; 

            $cartopass = unserialize($encoded_cartopass); 

            $cartopass->incrementQuantity($_POST['quantity']); 

            // encode class and assign to session and 
            // session is used pass to index.php 
            $_SESSION['encode_cartopass'] = serialize($cartopass); 
        } 

    } 

    echo "<script>window.location.href='index.php'</script>"; 
?>

carwash.php
PHP コード:

<?php 
    class carwash { 

        private $carmake; 
        private $caryear; 
        private $quantity; 

        public function getCarmake() { 
            return $this->carmake; 
        } 

        public function setCarmake($carmake) { 
            $this->carmake = $carmake; 
        } 

        public function getCaryear() { 
            return $this->caryear; 
        } 

        public function setCaryear($caryear) { 
            $this->caryear = $caryear; 
        } 

        public function getQuantity() { 
            return $this->quantity; 
        } 

        public function setQuantity($quantity) { 
            $this->quantity = $quantity; 
        } 

        public function incrementQuantity($quantity = '') { 
            if (empty($quantity)) { 
                $this->quantity++; 
            } 
            else { 
                $this->quantity += $quantity; 
            } 
        } 

        public function washcar() { 
            echo "scruba, dub, dub, scruba, dub, dub <br />"; 
            echo "I'm feelling cleaner, Thank you!"; 
        } 
    } 
?>
4

2 に答える 2

0

編集:(中括弧が何をするかを調べました...)次のいずれかが機能するはずです:

echo "Your shopping cart contains ".($cartopass->getQuantity() ? $cartopass->getQuantity() : 0)." items. <br /><br />"; 

echo "Your shopping cart contains ", $cartopass->getQuantity() + 0, " items. <br /><br />"; 
于 2013-03-13T03:24:51.197 に答える
0

考えられる解決策は 2 つあります。

  1. session の値がだったかどうかを確認します"0"(「0」は false ですが、$v = "0"; isset($v)true を返します)。

  2. $_POSTだった場合、セッションを破棄し"0"ます。

index.php を - に変更します

<?php 
session_start();  

require_once 'carwash.php'; 
if (isset($_SESSION['encoded_cartopass']) && $_SESSION['encoded_cartopass']) { 
    // first let's get the variable from the session 
    $encoded_cartopass = $_SESSION['encoded_cartopass']; 

    // now let's unpack it 
    $cartopass = unserialize($encoded_cartopass); 

    // echo quantity 
    echo "Your shopping cart contains {$cartopass->getQuantity()} items. <br /><br />"; 
} 
else { 
    echo "Your shopping cart contains 0 items. <br /><br />"; 
} 
?> 

または、process.php を - に変更します。

<?php 

require_once 'carwash.php'; 

if (isset($_POST['submit']) && $_POST['quantity']) { 

    if (!isset($_SESSION['encoded_cartopass'])) { 

        // construct and set quantity 
        $cartopass = new carwash(); 
        $cartopass->setQuantity($_POST['quantity']); 

        // construct and encode session 
        session_register('encoded_cartopass'); 
        $_SESSION['encoded_cartopass'] = serialize($cartopass); 
    } 
    else { 
        // if session is existing, decode it and 
        // increment quantity 
        $encoded_cartopass = $_SESSION['encoded_cartopass']; 

        $cartopass = unserialize($encoded_cartopass); 

        $cartopass->incrementQuantity($_POST['quantity']); 

        // encode class and assign to session and 
        // session is used pass to index.php 
        $_SESSION['encode_cartopass'] = serialize($cartopass); 
    } 

} else {
    unset($_SESSION['cartopass']);
    session_destroy();
}

echo "<script>window.location.href='index.php'</script>"; 
?> 
于 2013-03-13T03:31:39.377 に答える