2016-07-22 3 views
0

세션에 여러 항목을 저장하려고합니다. 따라서 위세션에 여러 항목 저장

<?php 
    if (isset($_POST['Submit'])) { 
     $_SESSION['product_img'] = $_POST['product_img']; 
     $_SESSION['product_id'] = $_POST['product_id']; 
     $_SESSION['product_name'] = $_POST['product_name']; 
     $_SESSION['product_price'] = $_POST['product_price']; 
     $_SESSION['product_sku'] = $_POST['product_sku']; 
     $_SESSION['product_description'] = $_POST['product_description']; 
    } 
?> 

을 현재 세션에 항목 (그래서 내가 믿는)를 설정한다 :

<?php 
$product_id = $_GET['product_id']; 
$sql = "SELECT * FROM Products WHERE product_id = $product_id"; 
    $result = $conn->query($sql); 

    if($result->num_rows > 0){ 
     while($row = $result->fetch_assoc()){ 
      echo '<img src=' . $row['product_img'] . ' />'; 
      echo '<div class="title">'. $row['product_name'] .'</div>'; 
      echo '<div class="title">'. $row['product_price'] .'</div>'; 
      echo '<div class="title">'. $row['product_sku'] .'</div>'; 
      echo '<div class="title">'. $row['product_description'] .'</div>'; 
      echo '<form action="addToCart.php" method="post"> 
        <input type="hidden" name="product_img" value="' . $row['product_img'] . '" /> 
        <input type="hidden" name="product_id" value="' . $row['product_id'] . '" /> 
        <input type="hidden" name="product_name" value="' . $row['product_name'] . '" /> 
        <input type="hidden" name="product_price" value="' . $row['product_price'] . '" /> 
        <input type="hidden" name="product_sku" value="' . $row['product_sku'] . '" /> 
        <input type="hidden" name="product_description" value="' . $row['product_description'] . '" /> 
        <input type="submit" name="Submit"> 
        </form>'; 
     } 
    } else{ 
    echo "0 Results"; 
    } 
?> 

addToCart.php는 다음과 같습니다 : 그래서 같은 형태에서 항목을 게시하고있다. 그런 다음 basket.php에 저장된 데이터에서 항목을 출력합니다.

<?php echo '<img src=' . $_SESSION['product_img'] . ' />'; ?> 
<?php echo $_SESSION['product_id'];?> 
<?php echo $_SESSION['product_name'];?> 
<?php echo $_SESSION['product_price'] ?> 
<?php echo $_SESSION['product_sku']; ?> 
<?php echo $_SESSION['product_description']; ?> 

문제점 이전 항목을 덮어 쓰는 다른 항목을 추가 할 때마다 문제가 있습니까? 배열을 사용하여 여러 항목을 저장해야하지만 몇 가지 다른 방법을 시도했지만 이해하기가 힘듭니다.

+0

당신이 배열의 배열을 포함 할 수 있습니다'$ _SESSION [ 'foo는'] [1] = $ _SESSION, 'someval'[ 'foo는'] [ 2] = 'otherval';'그리고 [sql injection attacks] (http://bobby-tables.com)에 취약하다는 것에주의하십시오. –

+0

@MarcB 귀하의 의견에 감사드립니다. 조금 더 설명해 주시겠습니까? 이해하기가 힘듭니다. ew to this) – PhpDude

+0

최상위 배열 키로 제품 ID를 사용하십시오 :'$ _SESS [ 'cart'] [$ prodID] [ 'name'] => 'foo'' –

답변

1

당신은 배열에 저장 []를 사용할 수 있습니다

var_dump($_SESSION['product_id']); 
+0

그래서 이것을 광산으로 바꿨습니다. 단품이라도? – PhpDude

+0

@ 단, 안돼. 나는 당신이 단 하나의 아이템을 추가했다는 것을 확신합니다. 몇 가지 항목을 추가하려고하면 내가 언급 한 var_dump를 사용하려고합니다 – Mojtaba

+0

그래서 addToCart.php의 코드를 바꿨고 var_dump는 내가 추가 한 제품의 ID 인'string (1) "2"을 보여줍니다. 바구니 – PhpDude

1

중첩로 세션 데이터를 저장 할 수 있습니다 : 이제

$_SESSION['product_img'][] = $_POST['product_img']; 
$_SESSION['product_id'][] = $_POST['product_id']; 
$_SESSION['product_name'][] = $_POST['product_name']; 
$_SESSION['product_price'][] = $_POST['product_price']; 
$_SESSION['product_sku'][] = $_POST['product_sku']; 
$_SESSION['product_description'][] = $_POST['product_description'] 

를, 각 배열에 무엇을 보려고 정렬. 귀하의 경우에는 장바구니이므로 Product ID를 사용하여 Array를 구축 할 수 있습니다. 다른 곳

<?php 
    //FIRST CHECK IF SESSION EXIST BEFORE STARTING IT: 
    if (session_status() == PHP_SESSION_NONE || session_id() == '') { 
     session_start(); 
    } 
    if (isset($_POST['Submit'])) { 
     $product_id    = htmlspecialchars(trim($_POST['product_id'])); 
     $product_img   = htmlspecialchars(trim($_POST['product_img'])); 
     $product_sku   = htmlspecialchars(trim($_POST['product_sku'])); 
     $product_name   = htmlspecialchars(trim($_POST['product_name'])); 
     $product_price   = htmlspecialchars(trim($_POST['product_price'])); 
     $product_description = htmlspecialchars(trim($_POST['product_description'])); 

     if(!isset($_SESSION['products'])){ 
      $_SESSION['products'] = array(); 
     } 
     if(!isset($_SESSION['products'][$product_id])){ 
      $_SESSION['products'][$product_id] = array(); 
     } 
     $_SESSION['products'][$product_id]['product_id']   = $product_id; 
     $_SESSION['products'][$product_id]['product_img']   = $ $product_img; 
     $_SESSION['products'][$product_id]['product_name']   = $product_name; 
     $_SESSION['products'][$product_id]['product_price']   = $product_price; 
     $_SESSION['products'][$product_id]['product_sku']   = $product_sku; 
     $_SESSION['products'][$product_id]['product_description'] = $product_description;  
    } 

그리고 : 더 제품들이 같은 product_id 값을 가지고 있지 않는 한 너무 오래 (다른 사람을 무시 없다는 것을 확신하는 방법은 .... 다음은 그렇게 할 수있는 방법의 예입니다 (다른 스크립트 아마도) 그렇게처럼 데이터에 액세스 할 수 있습니다 :.

<?php 

    $output    = ""; 
    $storedProductData = $_SESSION['products']; 
    if(!empty($storedProductData)){ 
     foreach($storedProductData as $product_id=>$productData){ 
      $output .= "<img src='{$productData['product_img']}' />"       . PHP_EOL; 
      $output .= "<span id='generic-class'>{$productData['product_id']}</span>"   . PHP_EOL; 
      $output .= "<span id='generic-class'>{$productData['product_name']}</span>"   . PHP_EOL; 
      $output .= "<span id='generic-class'>{$productData['product_price']}</span>"  . PHP_EOL; 
      $output .= "<span id='generic-class'>{$productData['product_sku']}</span>"   . PHP_EOL; 
      $output .= "<span id='generic-class'>{$productData['product_description']}</span>" . PHP_EOL; 
     } 
    }