我有一个完美的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。请提前帮助和谢谢。
答案 0 :(得分:1)
在一个地方拥有信息来源总是一个好主意。如果你有“不懂php”的人,我会建议你在网站的受保护部分设置一个“管理价格”页面,以便授权人员更新数据库中的价格。
然后使用php生成实际的订单页面,并从数据库中提取最新价格。
它需要重写您的网站 - 但只需执行一次,将来管理起来会更容易。
更新我创建了一个更完整的示例 - 这允许您检查列表中的项目,然后它将对这些项目进行一些简单的处理。您将看到如何将此应用于您的情况。关键是给复选框一个以[]
结尾的名称 - 这使得_POST
变量成为一个包含所有已设置复选框的数组,并允许您循环遍历所有元素。另请注意,我在生成价格表时复制了所有价格 - 这使我可以快速添加价格(索引是每个复选框的值,这使得这是一种非常方便的做事方式)。 php非常适合自动调整数组的大小......
最后 - 我检查了哪些项目已经过检查,所以当我重新生成表单时,我会填充之前设置的复选框。
显然,有很多方法可以修饰它 - 例如你可以添加过滤器以在菜单中仅显示“素食”选项......等等。
在http://www.floris.us/SO/priceList.php
工作时看到这一点这是一个前/后屏幕截图:
提交前:
提交后:
用于生成这些代码的代码:
<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
}
?>