2013-05-02 54 views
0

我對PHP和編程相對較新,所以請原諒我的無知和語言。對一個表單使用相同的腳本多次(使用PHP)

我有一個具有相同輸入字段的多個實例的窗體(請參見下文)。我有一個處理輸入數據的腳本,但前提是它一次提交一套(也在下面)。我希望在表單的按鈕上有一個提交按鈕,這個按鈕可以爲頁面上的數據集的多個倍數執行腳本。

有沒有人有任何想法我可以得到這個工作?我無法重命名變量(我嘗試過),因爲接收服務器需要數據標籤完全按照以下方式顯示。任何幫助/方向將不勝感激。謝謝!

我的形式:

<form method="post" action="<?php echo (AUTHORIZENET_SANDBOX ? AuthorizeNetDPM::SANDBOX_URL : AuthorizeNetDPM::LIVE_URL)?>" id="checkout_form"> 
    <?php 
    $time = time(); 
    $fp_sequence = $time; 
    $fp = AuthorizeNetDPM::getFingerprint(AUTHORIZENET_API_LOGIN_ID, AUTHORIZENET_TRANSACTION_KEY, $amount, $fp_sequence, $time); 
    $sim = new AuthorizeNetSIM_Form(
     array(
     'x_amount'  => $amount, 
     'x_fp_sequence' => $fp_sequence, 
     'x_fp_hash'  => $fp, 
     'x_fp_timestamp' => $time, 
     'x_relay_response'=> "TRUE", 
     'x_relay_url'  => $coffee_store_relay_url, 
     'x_login'   => AUTHORIZENET_API_LOGIN_ID, 
     'x_test_request' => TEST_REQUEST, 
     ) 
    ); 
    echo $sim->getHiddenFieldString(); 
} 
?> 
    <fieldset> 
    <H3>Card #1</H3> 
    <div> 
     <label>Amount</label> 
     <input type="text" class="text required" size="4" name="amount" value=""></input> 
    </div> 
    <div> 
     <label>Credit Card Number</label> 
     <input type="text" class="text required creditcard" size="15" name="x_card_num" value="6011000000000012"></input> 
    </div> 
    <div> 
     <label>Exp.</label> 
     <input type="text" class="text required" size="4" name="x_exp_date" value="04/15"></input> 
    </div> 
    <div> 
     <label>CCV</label> 
     <input type="text" class="text required" size="4" name="x_card_code" value="782"></input> 
    </div> 
    </fieldset> 
    <fieldset> 
    <div> 
     <label>First Name</label> 
     <input type="text" class="text required" size="15" name="x_first_name" value="John"></input> 
    </div> 
    <div> 
     <label>Last Name</label> 
     <input type="text" class="text required" size="14" name="x_last_name" value="Doe"></input> 
    </div> 
    </fieldset> 
    <fieldset> 
    <div> 
     <label>Address</label> 
     <input type="text" class="text required" size="26" name="x_address" value="123 Four Street"></input> 
    </div> 
    <div> 
     <label>City</label> 
     <input type="text" class="text required" size="15" name="x_city" value="San Francisco"></input> 
    </div> 
    </fieldset> 
    <fieldset> 
    <div> 
     <label>State</label> 
     <input type="text" class="text required" size="4" name="x_state" value="CA"></input> 
    </div> 
    <div> 
     <label>Zip Code</label> 
     <input type="text" class="text required" size="9" name="x_zip" value="94133"></input> 
    </div> 
    <div> 
     <label>Country</label> 
     <input type="text" class="text required" size="22" name="x_country" value="US"></input> 
    </div> 
    </fieldset> 
    <fieldset> 
     <H3>Card #2</H3> 
     <div> 
     <label>Amount</label> 
     <input type="text" class="text required" size="4" name="amount" value=""></input> 
    </div> 
    <div> 
     <label>Credit Card Number</label> 
     <input type="text" class="text required creditcard" size="15" name="x_card_num" value="6011000000000012"></input> 
    </div> 
    <div> 
     <label>Exp.</label> 
     <input type="text" class="text required" size="4" name="x_exp_date" value="04/15"></input> 
    </div> 
    <div> 
     <label>CCV</label> 
     <input type="text" class="text required" size="4" name="x_card_code" value="782"></input> 
    </div> 
    </fieldset> 
    <fieldset> 
    <div> 
     <label>First Name</label> 
     <input type="text" class="text required" size="15" name="x_first_name" value="John"></input> 
    </div> 
    <div> 
     <label>Last Name</label> 
     <input type="text" class="text required" size="14" name="x_last_name" value="Doe"></input> 
    </div> 
    </fieldset> 
    <fieldset> 
    <div> 
     <label>Address</label> 
     <input type="text" class="text required" size="26" name="x_address" value="123 Four Street"></input> 
    </div> 
    <div> 
     <label>City</label> 
     <input type="text" class="text required" size="15" name="x_city" value="San Francisco"></input> 
    </div> 
    </fieldset> 
    <fieldset> 
    <div> 
     <label>State</label> 
     <input type="text" class="text required" size="4" name="x_state" value="CA"></input> 
    </div> 
    <div> 
     <label>Zip Code</label> 
     <input type="text" class="text required" size="9" name="x_zip" value="94133"></input> 
    </div> 
    <div> 
     <label>Country</label> 
     <input type="text" class="text required" size="22" name="x_country" value="US"></input> 
    </div> 
    </fieldset> 
    <input type="submit" value="BUY" class="submit buy"> 
</form> 

我的腳本:

<?php 

require_once 'coffee_store_settings.php'; 

if ($METHOD_TO_USE == "AIM") { 
    $transaction = new AuthorizeNetAIM; 
    $transaction->setSandbox(AUTHORIZENET_SANDBOX); 
    $transaction->setFields(
     array(
     'amount' => $amount, 
     'card_num' => $_POST['x_card_num'], 
     'exp_date' => $_POST['x_exp_date'], 
     'first_name' => $_POST['x_first_name'], 
     'last_name' => $_POST['x_last_name'], 
     'address' => $_POST['x_address'], 
     'city' => $_POST['x_city'], 
     'state' => $_POST['x_state'], 
     'country' => $_POST['x_country'], 
     'zip' => $_POST['x_zip'], 
     'email' => $_POST['x_email'], 
     'card_code' => $_POST['x_card_code'], 
     ) 
    ); 
    $response = $transaction->authorizeAndCapture(); 
    if ($response->approved) { 
     // Transaction approved! Do your logic here. 
     header('Location: thank_you_page.php?transaction_id=' . $response->transaction_id); 
    } else { 
     header('Location: error_page.php?response_reason_code='.$response->response_reason_code.'&response_code='.$response->response_code.'&response_reason_text=' .$response->response_reason_text); 
    } 
} elseif (count($_POST)) { 
    $response = new AuthorizeNetSIM; 
    if ($response->isAuthorizeNet()) { 
     if ($response->approved) { 
      // Transaction approved! Do your logic here. 
      // Redirect the user back to your site. 
      $return_url = $site_root . 'thank_you_page.php?transaction_id=' .$response->transaction_id; 
     } else { 
      // There was a problem. Do your logic here. 
      // Redirect the user back to your site. 
      $return_url = $site_root . 'error_page.php?response_reason_code='.$response->response_reason_code.'&response_code='.$response->response_code.'&response_reason_text=' .$response->response_reason_text; 
     } 
     echo AuthorizeNetDPM::getRelayResponseSnippet($return_url); 
    } else { 
     echo "MD5 Hash failed. Check to make sure your MD5 Setting matches the one in config.php"; 
    } 
} 

回答

0

你可以在陣列中添加的形式輸入,當您運行使用的foreach碼。

<input type="text" class="text required" size="4" name="cards[0][amount]" value=""></input> 
<input type="text" class="text required creditcard" size="15" name="cards[0][x_card_num]" value="6011000000000012"></input> 

<input type="text" class="text required" size="4" name="cards[1][amount]" value=""></input> 
<input type="text" class="text required creditcard" size="15" name="cards[1][x_card_num]" value="6011000000000012"></input> 

等等等等等等

您可以通過執行

foreach($_POST['cards'] AS $c) { 
    echo $c['amount']; 
} 
+0

謝謝,弗雷迪。我認爲我可以對數組做些什麼,但不知道該怎麼做(我的大腦只是默認重命名變量,在這種情況下這不起作用)。真棒! – 2013-05-02 17:23:28

1

PHP得到的結果支持表單字段數組符號,讓你可以強制值顯示多次。例如

<input type="text" name="data[1]" value="foo" /> 
<input type="text" name="data[a]" value="bar" /> 
<input type="text" name="data[abcef]" value="baz" /> 

會給你一個$ _ POST結構,如:

$_POST['data'] = array(
    0 => 'foo' 
    'a' => 'bar' 
    'abcef' => 'baz' 
) 

既然你有多個領域的多個副本,所有需要的數據放在一起,然後構造你的形式,如:

Set #1 
<input name="somefield[1]" /> 
<input name="otherfield[1]" /> 
... 

Set #2 
<input name="somefield[2]" /> 
<input name="otherfield[2]" /> 

,然後在提交做到這一點的服務器上:

foreach(array_keys($somefield) as $key) { 
    $somefield = $_POST['somefield'][$key]; 
    $otherfield = $_POSt['otherfield'][$key]; 

    ... do something ... 
} 
+0

非常感謝!我無法等待嘗試。 – 2013-05-02 17:21:41

+0

沒問題。正如弗雷迪在他的回答中指出的那樣,你也可以用這種方式使用多維數組,'name ='card [1] [...]「'。不知道是否有任何限制,你可以採取什麼樣的「深度」,但任何需要超過2或3個維度的形式都可能需要認真重新設計 – 2013-05-02 17:30:59

相關問題