2012-02-20 2 views
0

예를 들어,이 코드는 기본 페이지에 있습니다. 다차원 세션을 사용하는 PHP 주문 양식

<?php 
session_start(); 
$_SESSION['order']=array(); 

?> 
<form name="orderform" method="post" action="e.php"> 
Product Catalog 
<table border="1"> 
<tr> 
    <td>Product</td> 
    <td>Price</td> 
    <td>Quantity</td> 
</tr> 
<? 
    for($i=0;$i<6;$i++){ 
     echo '<tr>'; 
     echo '<td><input type=hidden name="product" value="'.$i.'"> Product  '.$i.'</td>'; 
     $price=rand(1,10); 
     echo '<td><input type=hidden name="price"  value="'.$price.'">$'.$price.'</td>'; 
     echo '<td><input type=text name="quantity"></td>'; 
     echo '<tr>';   
    } 
?> 
</table> 
<br> 
<input type="submit" name="submit" value="submit"> 
</form> 

나는 다차원 세션 배열 $ _SESSION [ '주문']하고 난의 가격 및 수량과 함께 6 개 제품 품목의 주문 양식을 저장하기 위해 노력하고있어, 그래서 그것은에 검색 할 수 있습니다 POST 메소드가 수행 된 후 다음 페이지가 실행됩니다. e.php 파일에

<?php 

session_start(); 

$_SESSION['order'][] = array('product'=>$_POST['product'], 
           'price'=>$_POST['price'], 
           'quantity'=>$_POST['quantity']); 
var_dump($_SESSION['order']); 

if(count($_SESSION['order'])>0){ 
    foreach($_SESSION['order'] as $order){ 
     echo "<p>Product = ".$order['product']."</p>"; 
     echo "<p>Price = ".$order['price']."</p>"; 
     echo "<p>Quantity = ".$quantity['quantity']."</p>"; 
    } 
} 
?> 

하지만 e.php에지고있어 결과는 내가 마지막 주문 페이지의 항목이 아닌 다른 지난 5를 얻을 수있다. 내가 여기서 뭔가 잘못 했니? 당신의 생각은 무엇입니까?

답변

0

당신 동일한 name 속성을 사용하여 여러 개의 입력란을 _POST 개 입력하면 $_POST 변수에 게시 할 최종 고유 이름 만 포함됩니다. 각 입력에 대해 고유 한 이름을 만들거나 필드를 배열로 게시 할 수 있습니다.

<? 
    for($i=0;$i<6;$i++){ 
     echo '<tr>'; 
     echo '<td><input type=hidden name="product'.$i.'" value="'.$i.'"> Product  '.$i.'</td>'; 
     $price=rand(1,10); 
     echo '<td><input type=hidden name="price'.$i.'"  value="'.$price.'">$'.$price.'</td>'; 
     echo '<td><input type=text name="quantity'.$i.'"></td>'; 
     echo '<tr>';   
    } 
?> 

을 그리고 당신은 포스트 배열을 통해 루프 필요 세션 배열에 추가 할 것 : 고유 한 이름이 같을 것이다

<?php 
$i=0; 
while(isset($_POST['product'.$i])){ 
    $_SESSION['order'][] = array('product'=>$_POST['product'], 
           'price'=>$_POST['price'], 
           'quantity'=>$_POST['quantity']); 
    $i++; 
} 
?> 

당신은 또한 배열로 보낼 수 있습니다 :

<? 
    for($i=0;$i<6;$i++){ 
     echo '<tr>'; 
     echo '<td><input type=hidden name="product[$i]" value="'.$i.'"> Product  '.$i.'</td>'; 
     $price=rand(1,10); 
     echo '<td><input type=hidden name="price[$i]"  value="'.$price.'">$'.$price.'</td>'; 
     echo '<td><input type=text name="quantity[$i]"></td>'; 
     echo '<tr>';   
    } 
?> 

그리고 이런 식으로 그것을 밖으로 얻을 :

<?php 
foreach($_POST['product'] as $key => $value){ 
    $_SESSION['order'][] = array('product'=>$_POST['product'][$key], 
           'price'=>$_POST['price'][$key], 
           'quantity'=>$_POST['quantity'][$key]); 
} 
?> 
+0

좋아 보이는 @ 벤. 감사! – awongCM

0

문제는 같은 이름의 양식 필드가 여러 개있는 것입니다. 당신이 뭔가를해야 할 것 :

for($i=0; $i<6; $i++){ 
    $price = rand(1,10); 
    printf('<tr>'. 
      '<td><input type=hidden name="product[%1$d]" value="%1$d" />Product %1$d</td>'. 
      '<td><input type=hidden name="price[%1$d]" value="%2$f" />$ %2$f</td>'. 
      '<td><input type=text name="quantity[%1$d]" /></td>'. 
      '</tr>', 
      $i, $price); 
} 

for ($i = 0; $i < count($_POST['product']; $i++) { 
    $_SESSION['order'][] = array('product'=>$_POST['product'][$i], 
           'price'=>$_POST['price'][$i], 
           'quantity'=>$_POST['quantity'][$i]); 

(. 그들이 올바른 크기가 정말 존재하고 배열 인 경우 생산을 위해 당신은 또한 POST 변수를 확인해야합니다)

+0

몇 가지 부름 : 좀 더 긴 출력을 포맷팅하기 위해서'(s) printf'를 사용하는 것을 고려할 수 있습니다 (편집 된 코드 참조); void 요소의 끝에 슬래시 (예 : '')를 추가하십시오. 루프에서 테이블 행을 닫지 않고 대신 새 행을 열면 작은 오타가 생깁니다 (슬래시 추가). – Czechnology

+0

감사합니다. @ 기술. 정말 도움이됩니다. 매일 새로운 것을 배우기. – awongCM