2014-06-10 3 views
1

장바구니 프로젝트를 수행하려고합니다. 제품 목록의 항목에 대해 양식을 설정하는 방식에 따라 선택한 항목 만 장바구니에 표시되지만 대신 클릭 한 항목이 세 항목 모두 표시됩니다. 누군가 내가 바꿀 필요가있는 것을 말해 줄 수 있습니까?PHP 장바구니에서 선택하지 않은 항목 표시

제품이 나와 얻을 메인 페이지 :

<?php 
session_start(); 
?> 
<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>PHP Final Project</title> 
</head> 

<body> 
<?php 
$_SESSION['maxItems'] = 2; 
?> 
<form id="item01" method="post" action="cart.php"> 
<?php $_SESSION['cart'][0] = array('name'=>'item01','price'=>'$11'); ?> 
<label>Item 01 for sale</label> 
<input type="submit" value="Add to cart" name="item01"> 
</form> 

<br> 

<form id="item02" method="post" action="cart.php"> 
<?php $_SESSION['cart'][1] = array('name'=>'item02','price'=>'$22'); ?> 
<label>Item 02 for sale</label> 
<input type="submit" value="Add to cart" name="item02"> 
</form> 

<br> 

<form id="item03" method="post" action="cart.php"> 
<?php $_SESSION['cart'][2] = array('name'=>'item03','price'=>'$33'); ?> 
<label>Item 03 for sale</label> 
<input type="submit" value="Add to cart" name="item03"> 
</form> 

</body> 
</html> 

내 카트 페이지에 대한 PHP 코드 :

<?php 
session_start(); 
?> 
<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 

<body> 
<?php 
$max_items = $_SESSION['maxItems']; 
for($i=0; $i <= $max_items; $i++){ 
    $current_name = $_SESSION['cart'][$i]['name']; 
    $current_price = $_SESSION['cart'][$i]['price']; 
echo "item is " . $current_name . " " . $current_price . "<br>"; 
} 
?> 
</body> 
</html> 
+0

사용자가 양식을 제출하지 않은 경우에도 페이지로드에 있도록, html로에서 세션을 만들! – CMPS

답변

1

첫째, 실제로, 당신은 값을받지중인 버튼을의 단순히 클릭 만하면됩니다. 양식을 처리해야하고 세션에서 설정해야합니다. 둘째, 실제로 여러 개의 양식 태그가 필요하지 않으므로 하나만 있으면됩니다. 셋째, 초기화 (항목 목록, 세션 자체 등). 그냥 항목의 배열을 만듭니다. 거칠고 총 예 : (동일 페이지 양식 처리)

<?php 
// initializations 
session_start(); 
$_SESSION['maxItems'] = 2; 
if(!isset($_SESSION['cart'])) { 
    $_SESSION['cart'] = array(); 
} 
$item_list = array('item01' => 11, 'item02' => 22, 'item03' => 33); 

// add 
if(isset($_POST['add'])) { 
    $item = $_POST['add']; 
    $value = $item_list[$item]; 
    if(count($_SESSION['cart']) >= $_SESSION['maxItems']) { 
     echo 'Your cart is full, sorry.'; 
    } else { 
     $_SESSION['cart'][] = array('name' => $item, 'price' => $item_list[$item]); 
    } 
} 

// clear all 
if(isset($_POST['remove_all'])) { $_SESSION['cart'] = array(); header('Location: '.$_SERVER['PHP_SELF']); } 

?> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <title>PHP Final Project</title> 
</head> 
    <body> 
    <form method="POST" action=""> 
     <label>Item 01 for sale</label> 
     <button type="submit" name="add" value="item01">Add To Cart</button> 
     <br/> 
     <label>Item 02 for sale</label> 
     <button type="submit" name="add"value="item02">Add To Cart</button> 
     <br/> 
     <label>Item 03 for sale</label> 
     <button type="submit" name="add" value="item03">Add To Cart</button> 

     <br/><br/> 
     <input type="submit" name="remove_all" value="Clear Cart" /> 
    </form> 

    <?php if(isset($_SESSION['cart']) && count($_SESSION['cart']) > 0): ?> 
    <div class="chosen_items"> 
    <h3>Current Items</h3> 
    <?php foreach($_SESSION['cart'] as $key => $value): ?> 
     <p><?php echo "Item: <strong>". $value['name']. "</strong> Price: $".$value['price']; ?></p> 
    <?php endforeach; ?> 
    </div> 
    <?php endif; ?> 
</body> 
</html> 

Sample Output

+0

감사합니다. 하나의 질문. 폼에 액션 세트가 없다는 것을 알았다면, 폼에서 제출 액션에 대한 PHP의 PHP 사용 방법을 어떻게 알 수 있습니까? 그것이 내가 약간 불분명 한 부분입니다. 양식에서 선택 항목을 가져 와서 해당 정보를 세션에 넣고 처리하는 PHP 코드로 전달하는 방법. 감사. 귀하의 답변을 수락 할 계획이지만 나중에 질문하게하지 않으려면이 후속 질문을 먼저하고 싶습니다. 감사. – user3064141

+0

@ user3064141 네, 사실입니다.'action = ""'속성을 공백으로두면 같은 페이지에서 처리된다는 것을 알 수 있습니다. 선택한 항목에 관해서는 submit을 클릭하면 변수가'$ _SESSION'에 바로 가지 않습니다. 왜냐하면 양식은'method = "POST"'를 사용하기 때문에, 제출 된 값은'$ _POST' 안에 먼저 있습니다. 그래서 논리는,'$ _POST' 안에있는 항목을 가져 와서'$ _SESSION' 안에 넣는 것입니다. 그 이후부터는 세션이 설정되어있는 한 다른 페이지로 이동합니다. – user1978142

+0

$ _POST 글로벌 변수를 상기시켜 줘서 고마워. 나는 $ _SESSION을 사용함에 너무 집중하여 내 마음을 잃었다. 감사. – user3064141