Php 如何在表单提交时将未知数量的POST变量处理为电子邮件

Php 如何在表单提交时将未知数量的POST变量处理为电子邮件,php,arrays,forms,post,Php,Arrays,Forms,Post,我是新的php,所以这里去 我试图用一个函数将会话变量中的所有项目输出到输入值中,这样我就可以用表单提交来处理它们。现在,已成功创建输入字段,并且所有字段都正常。 这是密码 function list_cart_items() { $num =0; $total=0; foreach($_SESSION as $name => $value) { if ($value!=0) { if (substr($name, 0, 5)

我是新的php,所以这里去

我试图用一个函数将会话变量中的所有项目输出到输入值中,这样我就可以用表单提交来处理它们。现在,已成功创建输入字段,并且所有字段都正常。 这是密码

function list_cart_items() {
    $num =0;
    $total=0;
    foreach($_SESSION as $name => $value) {
        if ($value!=0) {
            if (substr($name, 0, 5)=='cart_') {
            $id = substr($name, 5, (strlen($name)-5));
            $iget = mysql_query('SELECT id,name,price FROM items WHERE id='.mysql_real_escape_string((int)$id));
            while ($iget_row = mysql_fetch_array($iget)) {
            $num ++;
            $total += number_format(($iget_row['price']*$value),2);
            echo "<tr>
            <td><input type='text' name='order_item".$num."' value='".$num."' size='2' maxlength='2'>
            <td><input type='text' name='order_qty_item".$num."' value='".number_format($value,1)."' size='3' maxlength='3'>
            <td><input type='text' name='order_name_item".$num."' value='".$iget_row['name']."' size='30' maxlength='30'>
            <td><input type='text' name='order_value_item".$num."' value='R ".number_format(($iget_row['price']*$value), 2)."' size='6' maxlength='6'>
            </tr>";
        }   
        }
    }
}
    echo "<tr><td colspan='2'><b>Order Total</b></td><td></td><td colspan='2'><b>R ".$total."</b></td></tr>";
功能列表\购物车\项目(){
$num=0;
$total=0;
foreach($\会话为$name=>$value){
如果($value!=0){
如果(substr($name,0,5)='cart_u2;'){
$id=substr($name,5,(strlen($name)-5));
$iget=mysql\u query('SELECT id,name,price FROM items WHERE id='。mysql\u real\u escape\u string((int)$id));
while($iget\u row=mysql\u fetch\u数组($iget)){
$num++;
$total+=数字\格式($iget\ U行['price']*$value),2);
回声“
";
}   
}
}
}
回显“订单总计”.$total.“;
下面是使用submit按钮实际创建表单的代码

    echo "<div id='shoppingcart'><form action='' method='POST'>";
    echo "<table class='checkout'><caption><b>Shopping Cart</b></caption>";
    **list_cart_items();**
    echo "<div id='information'>";
    echo "<tr><th colspan='2'>Name and Surname:</th><td colspan='3'><input type='text' size='45' maxlength='50' name='Contact' id='Contact'></td><tr>";
    echo "<tr><th colspan='2'>Telephone number:</th><td colspan='3'><input type='text' size='15' maxlength='12' name='Telephone' id='Telephone'></td><tr>";
    echo "<tr><th colspan='2'>Delivery Address:</th><td colspan='3'><textarea rows='8' cols='45' id='address' name='address'>Enter Address Here:</textarea></td><tr>";
    echo "<tr><th colspan='2'>Instructions:</th><td colspan='3'><textarea rows='8' cols='45' id='instructions' name='instructions'></textarea></td><tr>";
    echo "<tr><td colspan='5' align='center'><button type='submit' name='submit' value='submit' style='border: 0; background: transparent'>
   <img src='images/buynow.jpg' class='button' alt='submit'/>
   </button></td><tr>";
   echo "</form></div></table></div>";
echo”“;
呼应“购物车”;
**列出购物车项目()**
回声“;
呼应“姓名和姓氏:”;
回声“电话号码:”;
echo“交货地址:在此处输入地址:”;
回声“指示:”;
回声“
";
回声“;
现在是百万美元的问题,因为我不知道选择和订购了多少产品,我不知道我的会话['cart_X']的最大值是多少; 因此,我不知道在我的表单上创建了多少输入字段

我试图做的是成功地处理POST数组中的每个值,并将其输出到$emailbody中(订单需要处理并通过电子邮件发送) 我尝试过使用foreach($\u POST as$entry){print$entry.
“;}
但没有成功

这是密码

if (isset($_POST['submit'])){
    $orderno = session_id();
    $contact = $_POST['Contact'];
    $telephone = $_POST['Telephone'];
    $address = $_POST['address'];
    $instructions = $_POST['instructions'];
    //Here I need to catch every POST variable (all items given as input fields in my form) values
    $to = "orders@t.co.za";
    $subject = "Order received via website";
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";
    $headers .= 'To: Johan <schoeman.jj@gmail.com>'."\r\n";
    $headers .= 'From: Order via Web <orders@triumphant.co.za>'."\r\n";
    $emailbody = "Order number :".$orderno."<br>
        Contact Person: ".$contact."<br>
    Telephone number: ".$telephone."<br>
    Delivery Address: ".$address."<br>
    Instructions: ".$instructions."<br>
//Here I need to include every POST order item
if(isset($\u POST['submit'])){
$orderno=session_id();
$contact=$_POST['contact'];
$telephone=$_POST['telephone'];
$address=$_POST['address'];
$instructions=$_POST['instructions'];
//在这里,我需要捕获每个POST变量(表单中作为输入字段给出的所有项)的值
$to=”orders@t.co.za";
$subject=“通过网站收到的订单”;
$headers='MIME版本:1.0'。“\r\n”;
$headers.=“内容类型:text/html;字符集=iso-8859-1”。“\r\n”;
$headers.='To:Johan'。“\r\n”;
$headers.=“发件人:通过Web订购”。“\r\n”;
$emailbody=“订单号:”.$orderno。”
联系人:“.$Contact.”
电话号码:“.$电话。”
送货地址:“.$地址。”
说明:“.$说明。”
//在这里,我需要包括每一个邮购项目
不要在输入名称中添加
$num
,而是创建一个数组:

function list_cart_items() {
    // .....
        <td><input type='text' name='order_item[]' value='".$num."' size='2' maxlength='2'>
        <td><input type='text' name='order_qty_item[]' value='".number_format($value,1)."' size='3' maxlength='3'>
        <td><input type='text' name='order_name_item[]' value='".$iget_row['name']."' size='30' maxlength='30'>
        <td><input type='text' name='order_value_item[]' value='R ".number_format(($iget_row['price']*$value), 2)."' size='6' maxlength='6'>

不要将
$num
添加到输入的名称中,而是创建一个数组:

function list_cart_items() {
    // .....
        <td><input type='text' name='order_item[]' value='".$num."' size='2' maxlength='2'>
        <td><input type='text' name='order_qty_item[]' value='".number_format($value,1)."' size='3' maxlength='3'>
        <td><input type='text' name='order_name_item[]' value='".$iget_row['name']."' size='30' maxlength='30'>
        <td><input type='text' name='order_value_item[]' value='R ".number_format(($iget_row['price']*$value), 2)."' size='6' maxlength='6'>

执行
foreach($\u POST as$name=>$value){
就像对会话数组所做的那样。需要将字段名设置为数组,如$\u POST['product']您将拥有一个产品数组。同样,您可以获得可以重复的元素。您似乎没有通过post提交购物车条目。这就是您尝试
foreach($\u post…
)失败的原因,但购物车似乎已经存储在$\u会话中,所以您可以执行
foreach($\u SESSION…
就像您在第一次发布的代码中创建字段输入一样。没有steven,因为您需要能够在发布之前更改购物车中的项目。请执行
foreach($\u post as$name=>$value){
就像您在会话数组中所做的那样。需要将字段名称设置为数组,例如$\u post['product']您将拥有一个产品数组。同样,您可以获得可以重复的元素。您似乎没有通过post提交购物车条目。这就是您尝试
foreach($\u post…
)失败的原因,但购物车似乎已经存储在$\u会话中,所以您可以执行
foreach($\u SESSION…
就像您在第一次发布的代码中创建字段输入一样。没有steven,因为您需要能够在发布之前更改购物车中的项目。感谢您的回答,非常感谢。然后如何从for中获取这些值($_POST数组并将其输出到$EmailBody中查看我的第二段代码。这4个是变量。只需添加一行即可将内容添加到电子邮件正文。(编辑我的答案)嗨,斯蒂恩·马滕斯,再次感谢..我完全不知道这里..要捕获POST变量..我知道你应该设置一个svvariable=$_POST['variable']然后您可以使用$emailbody中的$variable,这是否意味着我可以直接接受$u POST['order\u item'][$key]作为$emailbody中的我的变量…如果是这样,它如何知道需要包含多个变量,因为for循环在$emailbody中不起作用您实际上不需要设置变量,如
$variable=$\u POST['variable']
,您可以直接使用
$\u POST['variable']
(编辑我的答案)太棒了!!!谢谢,现在我100%理解了一个问题:-)…我得到了这个错误解析错误:语法错误,意外的T_AS,在C:\wamp\www\Triumph\cart.php的第40行应该是“;”,第40行读作($\u POST['order\u item']AS$key=>$value)的-40{完全按照您所说的复制了代码,在某个地方我遗漏了一些东西;感谢您的回答,非常感谢。然后如何从for($_POST数组捕获这些值并将它们输出到$EmailBody中请参阅我的第二段代码。这4个是变量。只需添加一行即可将内容添加到电子邮件正文中。(编辑了我的答案)嗨,Stijn Martens,再次感谢..我在这里完全不知道..要捕获POST变量..我知道您应该设置一个svvariable=$\u POST['variable'],然后您可以使用$emailbody中的$variable,这是否意味着我可以直接获取$\u POST['order\u item'][