根据表单中的行数将商品添加到购物车

时间:2011-05-15 21:59:37

标签: php javascript forms paypal shopping-cart

我正在寻找一种方法,将表单中的行数链接到简单购物车/结帐脚本中的项目。

以下是该方案。用户正在预订会议地点。有三层定价结构,每个价格的表格部分。当用户首先导航到预订页面时,要求他在每个定价结构处将他/她希望预订的人数添加到会议中。可以使用javascript将额外的行添加到表单的每个部分。一旦完成预订的每个人的姓名/详细信息,用户点击“提交”按钮,该按钮将所有信息提交到MySQL数据库并将用户重定向到支付页面。

我希望此付款页面包含一个简单的购物车/结帐,自动填写每种费率的人数,每个费率的总数和总计。然后,用户只需点击按钮即可完成PayPal付款。

所以我坚持的部分是如何自动将表单中的信息(即每个速率的行数(人))传递给'checkout'页面,以及我可能用来生成结帐的脚本页。

我很感激能帮助你实现这个目标,

谢谢,

尼克

3 个答案:

答案 0 :(得分:1)

我使用的是一个POST数组,当添加每一行时,它会使用与格式相似的东西:

<input name='tickets[][name]' />
<input name='tickets[][email]' />

然后在PHP方面,我们可以简单地计算门票数量,并根据通过$ _POST生成的数组进行定价

<?php

$tiers = array(
    array(
        'num_people' => 3,
        'price'      => 50.00,
    ),
    array(
        'num_people' => 10,
        'price'      => 20.00,
    ),
    array(
        'num_people' => 50,
        'price'      => 10.00,
    )
}

$price = $tiers[0]['price'];

$num_people = count($_POST['tickets']);

for($i=count($tiers); $i>=0; $i--){
    if ($num_people >= $tiers[$i]['num_people']) {
        $pricing = $tiers[$i]['pricing'];
        break;
    }
}

$total = $price * $num_people;

在javascript方面,您可以公开一个计算费率的网络服务,并通过ajax或其他方式返回详细信息。

在最后一页上,您只需获取这些计算的结果(存储在会话中或数据库中的订单)并在视图中打印出来。

答案 1 :(得分:0)

听起来你已经处理了添加的用户,所以让我谈谈提交购物车。我做了类似的事情,但创建了一个PHP函数来处理每个项目的添加,它基本上回应了表单中的每个产品(desc,price等),然后只需在适当的时间将此表单提交给PayPal。

function FormatPaypal($iItemno, $sItemname, $iQty, $fPrice, $fDiscountAmount, $sCode)
{
    global $iUser;
$s1 = sprintf('<input type="hidden" name="item_name_%d" value="%s">', $iItemno, $sItemname); 
$s2 = sprintf('<input type="hidden" name="amount_%d" value="%.2f"> ', 
$iItemno, $fPrice); 
$s3 = sprintf('<input type="hidden" name="quantity_%d" value="%d"> ', 
$iItemno, $iQty); 

$s4 = sprintf('<input type="hidden" name="discount_amount_%d" value="%.2f">', $iItemno, $fDiscountAmount); 

$sCode = sprintf("%s-%d", $sCode, $iUser );
$s5 = sprintf('<input type="hidden" name="item_number_%d" value="%s">', $iItemno, $sCode); 

$sReturn = $s1.$s2.$s3.($fDiscountAmount ?  $s4 : '').$s5;
echo $s5;

return $sReturn;
}

放在标准的PayPal表格中:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" name="frmPaypal"> <input type="hidden" name="cmd" value="_cart">

使用这种方法我只需要在每次使用时增加$ iItemNo。我目前正在构建一个PHP类,通过管理项目和项目总数来进一步简化这一过程,如果有兴趣,我会记得回过头来分享它。

答案 2 :(得分:0)

Josh的想法的变化。

我使用并行数组。

Josh似乎也基于人数定价(团体折扣)...... 这不是我对问题的理解,而是你想提供差异化​​的定价结构,对吗?

<input name='tickets[][name]' />
<input name='tickets[][email]' />
<input name='tickets[][rate]' />


$rates = array(
    1 => 10,
    2 => 50,
    3 => 200,
    ...  // more as needed
);

$totals = array('all' => 0);
$people = array();

foreach ($rates as $rate) {
    $totals[$rate] = 0;
    $people[$rate] = 0;
}

foreach ($tickets as $ticket) {
    $totals['all'] += $rates[$ticket['rate']];
    $totals[$ticket['rate']] += $rates[$ticket['rate']];
    $people[$ticket['rate']]++;
}


foreach ($rates as $rate => $price) {
    print "{$totals[$rate]}";
    print "{$people[$rate]} people X $ {$price} = {$totals[$rate]}";
}

print "total = {$totals['all']} ";