2010-02-19 123 views
1

嘿,有人可以幫我做這個對象嗎。任何人都可以幫助我使這個對象。 (php)

顯然不是我所有的代碼都在這裏,但我相信你會得到這個主意。

<?php 
$product_name_1 = $_POST['product_name_1']; 
$region_1 = $_POST['region_1']; 
$start_date_1 = $_POST['start_date_1']; 
$end_date_1 = $_POST['end_date_1']; 
$sku_1 = $_POST['sku_1']; 

$product_name_2 = $_POST['product_name_2']; 
$region_2 = $_POST['region_2']; 
$start_date_2 = $_POST['start_date_2']; 
$end_date_2 = $_POST['end_date_2']; 
$sku_2 = $_POST['sku_2']; 

$product_name_3 = $_POST['product_name_3']; 
$region_3 = $_POST['region_3']; 
$start_date_3 = $_POST['start_date_3']; 
$end_date_3 = $_POST['end_date_3']; 
$sku_3 = $_POST['sku_3']; 
?> 



<form action="" method="post" accept-charset="utf-8"> 
<div id="product_information"> 
<table id="product_1"> 
    <tr> 
     <th><label for="product_name">Product Name</label></th> 
     <th><label for="region">Select A Region</label></th> 
     <th class="date"><label for="start_date">Start Date</label></th> 
     <th class="date"><label for="end_date">End Date</label></th> 
     <th><label for="sku">SKU</label></th> 
    </tr> 
    <tr> 
     <td><input type="text" name="product_name_1" value="" id="product_name_1"></td> 
     <td><input type="radio" name="region_1" value="upper_north" id="upper_north_1"><label for="upper_north_">Upper North Island</label><br /> 
       <input type="radio" name="region_1" value="lower_north" id="lower_north_1"><label for="lower_north_">Lower North Island</label><br /> 
       <input type="radio" name="region_1" value="south_island" id="south_island_1"><label for="south_island">South Island</label> </td> 
     <td class="date"><input type="text" class="date" name="start_date_1" value="" id="start_date_1"></td> 
     <td class="date"><input type="text" class="date" name="end_date_1" value="" id="end_date_1"></td> 
     <td><input type="text" name="sku_1" value="" id="sku_1"></td> 
    </tr> 
</table> 
<span class="product"></span> 
<div class="add-product">&nbsp;</div> 
</div> 

<script type="text/javascript" charset="utf-8"> 

var i = 1; 

$('.add-product').click(function(){ 
    i++; 
    $('span.product').replaceWith('<table id="product_'+i+'">' 
     +'<tr>' 
      +'<th><label for="product_name">Product Name</label></th>' 
      +'<th><label for="region">Select A Region</label></th>' 
      +'<th class="date"><label for="start_date">Start Date</label></th>' 
      +'<th class="date"><label for="end_date">End Date</label></th>' 
      +'<th><label for="sku">SKU</label></th>' 
     +'</tr>' 
     +'<tr>' 
      +'<td><input type="text" name="product_name'+i+'" value="" id="product_name'+i+'"></td>' 
      +'<td><input type="radio" name="region'+i+'" value="upper_north" id="upper_north'+i+'"><label for="upper_north'+i+'">Upper North Island</label><br />' 
        +'<input type="radio" name="region'+i+'" value="lower_north" id="lower_north'+i+'"><label for="lower_north'+i+'">Lower North Island</label><br />' 
        +'<input type="radio" name="region'+i+'" value="south_island" id="south_island"><label for="south_island">South Island</label> </td>' 
      +'<td class="date"><input type="text" class="date" name="start_date'+i+'" value="" id="start_date'+i+'"></td>' 
      +'<td class="date"><input type="text" class="date" name="end_date'+i+'" value="" id="end_date'+i+'"></td>' 
      +'<td><input type="text" name="sku'+i+'" value="" id="sku'+i+'"></td>' 
     +'</tr>' 
    +'</table>' 
    +'' 
    +'<span class="product"></span>'); 
}); 
</script> 

回答

0

因此,現在到實例化和使用新的對象。

我可以做一個這樣的構造嗎?

<? 
class Product { 

    private $Name; 
    private $Region; 
    private $StartDate; 
    private $EndDate; 
    private $Sku; 
    public $i; 

    function __construct($Name="product_name_$i" $Region="region_$i" $StartDate="start_date_$i" $EndDate="end_date_$i" $Sku="sku_$i") 
    { 
     $i++ 
    } 

} 
?> 

然後我將如何真正實例化對象並在我的代碼中使用它?我可以用我的JavaScript來做到這一點嗎?

5

您可以使用此對象來啓動。之後,定義保存和檢索它的方法。也許適當的構造函數,用於從後參數創建不同的產品。

class Product { 

    private $Name; 
    private $Region; 
    private $StartDate; 
    private $EndDate; 
    private $Sku; 

    public function setName($value)  
    { 
      //make some validation or manipulation on data here, if needed 
     $this->Name = $value;  
    } 

    public function getName()  
    {     
     return $this->Name;  
    }  

    public function setRegion($value)  
    { 
      //make some validation or manipulation on data here, if needed 
     $this->Region = $value;  
    } 

    public function getRegion()  
    {     
     return $this->Region;  
    }  
    public function setStartDate($value)  
    { 
      //make some validation or manipulation on data here, if needed 
     $this->StartDate = $value;  
    } 

    public function getStartDate()  
    {     
     return $this->StartDate;  
    }  

    public function setEndDate($value)  
    { 
      //make some validation or manipulation on data here, if needed 
     $this->EndDate = $value;  
    } 

    public function getEndDate()  
    {     
     return $this->EndDate;  
    }  

    public function setSku($value)  
    { 
      //make some validation or manipulation on data here, if needed 
     $this->Sku= $value;  
    } 

    public function getSku()  
    {     
     return $this->Sku;  
    }  
} 

希望有所幫助!

+0

好吧,酷,這樣的產品的對象模型。 Thankyou,這在事情的這一方面確實有幫助。 – mdskinner 2010-02-19 00:51:44

+0

@mdskinner祝你好運! :) – anthares 2010-02-19 00:59:25

1

您不一定需要使用對象 - 在處理表單時,關聯數組更容易(因爲這是HTML傳遞給PHP的)。在您的形式,將更有利於使用的字段名稱是這樣的:

  • product[1][name]
  • product[1][region]
  • product[1][start_date]
  • product[1][end_date]
  • product[1][sku]
  • product[2][name] ...等

當以PHP接收數據時,它將在$_POST['product']中,它本身將是每個產品的數組。您的新的PHP代碼將取決於你想用數據做什麼,但你可能循環,雖然它是這樣的:

<?php 
foreach($_POST['product'] as $prod) 
{ 
    echo $prod['name']; // outputs each product name in turn 
} 

如果你需要一個對象,你可以使用$prod_obj = (object) $prod然後$prod_obj->name等。

+0

好的,這很酷..謝謝,但我希望能夠創建無限量的「產品」不會這種方法仍然需要無休止地重複代碼? 我不想限制用戶可以添加多少產品。 – mdskinner 2010-02-19 01:25:20

+0

@mdskinner:不,沒有限制。我的意思是用'[1]'作爲你的初始字段的名字,但是當用戶添加另一個產品時,javascript會用'[2]'或'[3]'編寫相同的代碼等。 – DisgruntledGoat 2010-02-21 17:38:48

+0

順便說一下,必須有一個更簡單的方法來做javascript部分。我認爲你應該能夠克隆已經存在的代碼,並用'[2]'表單名稱替換'[1]'。目前,如果你改變任何HTML你必須做兩次。 – DisgruntledGoat 2010-02-21 17:41:03

0

anthares給你的對象; DisgruntledGoat向您展示瞭如何使用foreach來運行輸入。 :)雖然你得到的構造函數需要一些工作。如果您要單獨傳遞參數,則需要用逗號分隔每個參數;您的默認值是如果值不通過使用的東西。我會做這樣的事情(這是我的OO PHP在用數據庫中的一行填充我的對象時所做的)。

/** 
* Constructor for the product. 
* 
* @param string=>string[] An associative array used to create the object. 
*/ 
public function __construct($aData = null) { 
    if (!is_null($aData)) { 
     $this->setName  ($aData["name"]); 
     $this->setRegion ($aData["region"]); 
     $this->setStartDate($aData["start_date"]); 
     $this->setEndDate ($aData["end_date"]); 
     $this->setSku  ($aData["sku"]); 
    } 
} 

在HTML代碼,你會定義字段,如...

<input type="text" name="product[1][name]" /> 
<input type="text" name="product[1][sku]" /> 
... 

然後,在PHP中,你會做這樣的事情

$aProducts = array(); 
foreach ($_POST["product"] as $aProduct) { 
    $aProducts[] = new Product($aProduct); 
    // NOTE - here you could also make an empty object and fill it. 
    $oProduct = new Product(); 
    $oProduct->setName($aProduct["name"]); 
    // etc. - then add it to the array when you're done. 
} 

// Display the name of product 2 (if it exists). 
if (2 <= count($aProducts)) { 
    echo $aProducts[1]->getName(); 
} 

最後,我我不確定「$我」給你什麼。我通常只是創建像......

<input type="text" name="name[]" /> 
<input type="text" name="sku[]" /> 
<!-- This next one is if I need a database ID once it's posted back. --> 
<input type="hidden" name="id[]" value="something"/> 
... 
<input type="text" name="name[]" /> 
<input type="text" name="sku[]" /> 
...etc... 

然後,在服務器上,我有一堆數組,但他們的鍵都匹配。所以,我可以做類似...

$aProducts = array(); 
foreach($_POST["id"] as $iKey => $aValue) { 
    $oProduct = new Product(); 
    $oProduct->setName($_POST["name"][$iKey]); 
    $oProduct->setSku ($_POST["sku" ][$iKey]); 
    $aProducts[] = $oProduct; 
} 

6的1,其他1/2打。我的構造函數通常將PDORow對象作爲其參數,所以我在頁面文章中以這種方式進行處理,當時我正在處理關聯數組。

相關問題