0

我正在尝试使用 PHP 创建一个在线订单。

我已经使用 PHP Checkboxes 为每个项目工作了。

但现在我想删除复选框 - 将它们替换为每个项目的数量框和消息框。

这是我目前使用复选框设置订单的方式(我从第一项“墨西哥玉米饼”中删除了复选框,并添加了数量和消息框作为示例)。

解决此问题的最佳方法是什么,以便只有在数量框(和消息框)中输入了数据的项目才会发送到我的电子邮件?

HTML:

<div class ="item_left">
<img src="images/mexicantortas.jpg" border="2" width="200px" height="150px"><br>
Mexican Torta - $8.50<input name="item" type="hidden" value="Mexican Torta"/><br>
How Many? <input name="quantity" type="text" style="width: 20px; height: 12px;"/><br>
<input name="message" type="text" value="Enter special order instructions here..."   style="max-width: 200px; height: 30px;"/>
</div><!-- ITEM_LEFT -->

<div class ="item_center">
<img src="images/fishsandwich.jpg" border="2" width="200px" height="150px"><br/>
Fish Sandwich - $8.50<input name="item" type="hidden" value="Fish Sandwich"/><br>
<input type="checkbox" name="check[]" value="Fish Sandwich"><br/>
</div><!-- ITEM_CENTER -->

<div class ="item_right">
<img src="images/hamburgers.jpg" border="2" width="200px" height="150px"><br/>
Hamburger w/ Fries - $7.00
<input type="checkbox" name="check[]" value="Hamburger"><br/>
</div><!-- ITEM_RIGHT -->

PHP:

<?php
if(isset($_POST['submit'])) {

$to = "test@websitehere.com"; 
$subject = "Form Tutorial";
$name_field = $_POST['name'];
$email_field = $_POST['email'];
$message = $_POST['message'];
$option = $_POST['radio'];
$dropdown = $_POST['drop_down'];

foreach($_POST['check'] as $value) {
$check_msg .= "Checked: $value\n";
}

$body = "From: $name_field\n E-Mail: $email_field\n $check_msg
    Option:$option\n    Drop-Down: $dropdown\n Message:\n $message\n";

echo "Data has been submitted to $to!";
mail($to, $subject, $body);

 } else {
echo "blarg!";
}
?>
4

2 回答 2

0

首先,你有一堆同名的东西,不允许你在服务器端区分它们。其次,如果他们选择超过 1 个项目,您是否希望每封电子邮件只向您发送 1 个项目或超过 1 个项目?

无论哪种方式,我认为您想要做的是验证并检查值是否等于“”或 0,具体取决于您的选择框。其次,获取这些变量并将它们填充到一个数组中。然后,您可以循环遍历数组,使用 html 将项目附加到 $message 以将它们分开。

于 2012-08-20T04:51:48.533 回答
0

请注意,这只是我在大约 10 分钟内快速输入的内容,所以我确信有更好的方法可以做到这一点,但是,它可以完成工作。

PHP:

if(isset($_POST['submit'])) {
    $to = "test@websitehere.com"; 
    $subject = "Form Tutorial";
    $name_field = $_POST['name'];
    $email_field = $_POST['email'];

    $order = array();
    foreach($_POST['item'] as $item => $name) {
        if ($_POST['quantity_'.$name] > 0) {
            $add_order = array('pretty'=>$_POST['pretty-name_'.$name],'qty'=>$_POST['quantity_'.$name],'message'=>$_POST['message_'.$name]);
            array_push($order,$add_order);
        }
    }

    $body = "From: $name_field\nE-Mail: $email_field\n";

    $body .= "Their Order:\n";
    foreach ($order as $item){
        $body .= "--".$item['qty']."x ".$item['pretty']."\n
        Extra: ".$item['message']."\n\n";
    }

    echo "Data has been submitted to $to!";
    mail($to, $subject, $body);
}

HTML:

<form action="test.php" method="post">
<div class ="item_left">

Mexican Torta - $8.50<input name="item[]" type="hidden" value="torta"/>
<input name="pretty-name_torta" type="hidden" value="Mexican Torta"/><br>
How Many? <input name="quantity_torta" type="text" /><br>
<input name="message_torta" type="text" value="Enter special order instructions here..." />
</div><!-- ITEM_LEFT -->
<br />
<div class ="item_center">

Fish Sandwich - $8.50<input name="item[]" type="hidden" value="fish"/>
<input name="pretty-name_fish" type="hidden" value="Fish Sandwhich"/><br>
How Many? <input name="quantity_fish" type="text" /><br>
<input name="message_fish" type="text" value="Enter special order instructions here..." />
</div><!-- ITEM_CENTER -->
<br />
<div class ="item_right">

Hamburger w/ Fries - $7.00<input name="item[]" type="hidden" value="hamburger"/>
<input name="pretty-name_hamburger" type="hidden" value="Hamburger"/><br>
How Many? <input name="quantity_hamburger" type="text" /><br>
<input name="message_hamburger" type="text" value="Enter special order instructions here..." />
</div><!-- ITEM_RIGHT -->
<br /><br />
<input type="submit" name="submit" value="Order" />
</form>

输出:(类似于)

Their Order:
--22x Mexican Torta
Extra: Enter special order instructions here...

--1x Fish Sandwhich
Extra: Lots of stuff

--2x Hamburger
Extra: Mmmm Fries

杰瑞德是对的。您需要有一种方法来区分不同的项目。因此,为什么我在那里添加了一个额外的隐藏输入。

长话短说,每个项目都被放入一个数组中。PHP 遍历这个数组并挑选出数量值大于 0 的内容。如果有,则将该项目信息添加到第二个数组中。后半部分,通过那个新数组,让它看起来对你来说很好很漂亮。

如果您需要我澄清或解决任何问题,请让我知道。

编辑:继续并将其添加到邮件功能中(无聊)。

PS:我注意到您使用的是未经处理的变量。我可能不需要,但我还是会说。在对用户输入进行大量操作之前,请确保您正在检查和清理用户输入。在这里可能没什么大不了的,但在某些情况下它仍然可能变坏。

于 2012-08-20T05:45:39.977 回答