php订单价格更新

时间:2013-12-29 18:00:00

标签: php html mysql forms

我有一个完美的PHP订单,直到价格开始变化太频繁而且管理变得很痛苦。我的订单使用html表单上的复选框值和processorder.php页面将$_POST值插入数据库。如果复选框值和processorder.php值不=则没有任何内容插入到db中(参见下面的processorder.php示例)

if(isset($_POST['MainMeal']) && $_POST['MainMeal'][2] == '75')
{
$MainM2 = "ToastedHamCheese";
}

问题是如何管理每周都在变化的价目表。然后我将进入并更改html复选框值和php代码。我想我的php不正确。请指出一种方法,我可以从一个地方管理物品和价格。 我试图用输入框构建一个gui页面并使用sql update语句。理想情况是有一个易于使用的页面,以便其他人可以管理价格表而不必知道php。请提前帮助和谢谢。

2 个答案:

答案 0 :(得分:1)

在一个地方拥有信息来源总是一个好主意。如果你有“不懂php”的人,我会建议你在网站的受保护部分设置一个“管理价格”页面,以便授权人员更新数据库中的价格。

然后使用php生成实际的订单页面,并从数据库中提取最新价格。

它需要重写您的网站 - 但只需执行一次,将来管理起来会更容易。

更新我创建了一个更完整的示例 - 这允许您检查列表中的项目,然后它将对这些项目进行一些简单的处理。您将看到如何将此应用于您的情况。关键是给复选框一个以[]结尾的名称 - 这使得_POST变量成为一个包含所有已设置复选框的数组,并允许您循环遍历所有元素。另请注意,我在生成价格表时复制了所有价格 - 这使我可以快速添加价格(索引是每个复选框的值,这使得这是一种非常方便的做事方式)。 php非常适合自动调整数组的大小......

最后 - 我检查了哪些项目已经过检查,所以当我重新生成表单时,我会填充之前设置的复选框。

显然,有很多方法可以修饰它 - 例如你可以添加过滤器以在菜单中仅显示“素食”选项......等等。

http://www.floris.us/SO/priceList.php

工作时看到这一点

这是一个前/后屏幕截图:

提交前:

enter image description here

提交后:

enter image description here

用于生成这些代码的代码:

<html>
<body>
  <?php
    $server = mysql_connect ('localhost', 'name', 'password');
    mysql_select_db("db", $server);

    $query = mysql_query("SELECT * FROM `priceList`;");
    $prices = array();
    echo '<center><h1>Dynamic price list</h1><br>';
    echo '<table><TD></TD><TD>ITEM</TD><TD>PRICE</TD>';
    echo "<form action='./priceList.php' method='post'>";
    while ($row = mysql_fetch_assoc($query))
    {
        echo '<TR><TD><input type="checkbox" name="order[]" value="' . $row['ID'] . '" ';
        // check the box if we are processing form:
        if (isset($_POST['order'])) {
          if (in_array($row['ID'],$_POST['order'])) echo "checked=checked";
        }
        echo '></TD>';
        echo "<TD>".$row['ITEM'] . '</TD><TD align=right>$ ' . $row['PRICE'] . '</TD>';
        $prices[$row['ID']] = $row['PRICE'];

    }
    echo '</TABLE>';
    mysql_close($server);
  ?>
  <input type="submit"><br>
  <?php
  if(isset($_POST['order'])) {
    // add the value of the items:
    $orderTotal = 0;
    //print_r($_POST['order']);
    foreach($_POST['order'] as $val) {
      $orderTotal = $orderTotal + $prices[$val];
      echo "Price of item " . $val . " is " . $prices[$val] ."<br>";
    }
    setlocale(LC_MONETARY, 'en_US');
    echo 'Order total: ' . money_format('%i', $orderTotal) . '<br>';
  }
    else {
    // do nothing
  }
  ?>
  </center>
</body>
</html>

代码不知道有多少项,或者它们将被调用什么 - 然而,它产生了一个包含所有项目的(相当简单的格式化)价格表。当您下订单时,它会显示订单列表下方各个项目的价格加上它们的总数(仅显示如何完成)。

实际上,我为此示例创建的表只有三列(ID,ITEM,PRICE)。显然,您可能希望添加更多列以使其更多 - 但同样,如果您事先考虑数据库结构,您将能够最小化所需的HTML数量以及所需的维护量。这就是关键所在:

信息来源应仅存在于一个地方

其他一切从那里引用它。一旦违反该规则,就会造成维护噩梦。每一次。

答案 1 :(得分:0)

<?php
/*
 * This is just to give an idea ! 
 * You could put data in a separate file or in a database table as individual
 * rows . Just for example sake I've included it here directly .
 */
    $data ='
75:ToastedHamCheese,
76:ToastedCheese,
';
    // Parse data and put into an array
    foreach( explode( ',' ,$data ) as $value )
    {
        $value = trim( $value );
        if( $value <> '' )
        {
            $temp = explode( ':' ,$value );
            $dataValuesArray[ $temp[0] ] = $temp[1];
        }
    }

//  var_dump( $dataValuesArray );

    $_POST['MainMeal'][2] = 75; // For test purpose

    if( isset( $_POST['MainMeal'] )
        and
        array_key_exists( $_POST['MainMeal'][2] ,$dataValuesArray )
    )
    {
        $MainM2 = $dataValuesArray[ $_POST['MainMeal'][2] ];
        echo $MainM2; // For test purpose
    }
?>