【问题标题】:php form review before email电子邮件前的php表单审查
【发布时间】:2013-05-01 19:47:51
【问题描述】:

我看到了另一个与此相关的主题,但仍然有点困惑,因为我仍然是 PHP 的基础。所以我有一个发布到我的 Order.php 的表单。这会发送电子邮件并且工作正常。我希望将表单发布到 Review.php 然后发送。下面是我的 Order.PHP(我从数组中删除了一些输入字段,因为它相当长)。我在考虑 review.php 我可以使用所有的 order.php 代码,但不是$send = mail($to, $subject, $body, $headers); 我可以在一些 html 中请求$to, $subject, $body, $headers 然后有一个 sumbit 按钮将这些发送到 order.php被简化,因为所有数据都在评论页面中处理。听起来对吗?

order.php如下

<?php 

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";

 $to = "packy@mycompany.com";
 $name = $_REQUEST['FitterName'] ; 
 $from = $_REQUEST['FitterEmail'] ; 
 $headers = "From: $from"; 
 $subject = "Online Order"; 
 $name2 = $_REQUEST['CustomerEmail'] ; 

 $grind = join(", ", $_REQUEST["grind"]);
 $woods = join(", ", $_REQUEST["woods"]);
 $hybrids = join(", ", $_REQUEST["hybrids"]);
 $iron = join(", ", $_REQUEST["iron"]);
 $wedges = join(", ", $_REQUEST["wedges"]);

 $fields = array(); 
 $fields{"AccountName"} = "Accounts's Name:  "; 
 $fields{"FitterName"} = "Fitter's Name:  "; 
 $fields{"CustomerCat"} = "__________________________CUSTOMER INFO__________________________"; 
 $fields{"CustomerName"} = "Customer's Name:  ";
 $fields{"CustomerPhone"} = "Customer's Phone:  ";
 $fields{"CustomerAddress"} = "Customer's Address:  ";



 $body = "We have received the following Online Order from www.mycompany.com:\n\n"; foreach($fields as $a => $b){   $body .= sprintf("%2s %s\n",$b,$_REQUEST[$a]); }
 $body2 = "Please Review the following Online Order from www.mycompany.com:\n\n"; foreach($fields as $a => $b){     $body2 .= sprintf("%2s %s\n",$b,$_REQUEST[$a]); }




 $headers2 = "From: noreply@mycompany.com"; 
 $subject2 = "Thank you for your order"; 
 $autoreply = "Thank you for your order. Customer service will call in the next 24 hours to review your order.";

 $autoreply2 = "Company Customer";

 if($from == '') {print "You have not entered an email, please go back and try again";} 
 else { 
 if($name == '') {print "You have not entered a name, please go back and try again";} 
 else { 
 $send = mail($to, $subject, $body, $headers); 
 $send2 = mail($from, $subject2, $autoreply, $headers2); 
 $send3 = mail($name2, $subject2, $autoreply2, $headers2); 
 if($send) 
 {header( "Location: http://fitter.henry-griffitts.com/fitter/success.php" );} 
 else 
 {print "We encountered an error sending your mail, please review your information"; } 
 }
}
 ?>

【问题讨论】:

    标签: php forms review


    【解决方案1】:

    是的。

    您可以向用户展示一个评论页面并隐藏在该页面中,您可以嵌入他们在订单页面上提供的信息。

    查看页面确认按钮标记;

    <form name="review" action="order.php" method="POST">
      <input type="hidden" name="FitterName" value="Bob Smith">
      <input type="hidden" name="FitterEmail" value="a@b.com">
      <input type="submit" value="Submit">
    </form>
    

    当他们点击评论页面上的提交按钮时,他们的订单信息。将被转发到order.php 页面。

    【讨论】:

    • 因此,我会将原始 HTML 表单中的所有字段隐藏并包裹在 &lt;form&gt;&lt;/form&gt; 中,以提交到下一个流程。我如何在 review.php 上显示来自 $body 的数据,以便他们在提交之前检查数据?谢谢
    • 您可以将他们的数据放在表单外的review.php 页面上的其他位置以供审核。例如。 echo "&lt;div&gt;Name:{$_REQUEST['FitterName']}&lt;/div&gt;
    • 谢谢。我最终使用了你们的两个解决方案。
    【解决方案2】:

    这是一个非常基本的示例,说明您的 review.php 文件的外观。它将每个字段添加为表单中的隐藏输入变量。

    <p>Does everything look correct?</p>
    <form method="post" action="order.php">
        <ul>
        <?php
            if (is_array($_REQUEST)) {
                foreach ($_REQUEST as $key => $val) {
                    echo "<li><strong>" . $key . "</strong>: " . $val . "</li>";
    
                    // This code should support the checkboxes and multiple selects
                    if (is_array($val)) {
                        foreach ($val as $val2) {
                            echo "<input type='hidden' name='" . $key . "[]' value='" . $val2 . "' />";
                        }
                    }
                    else {
                        echo "<input type='hidden' name='" . $key . "' value='" . $val . "' />";
                    }
                }
            }
        ?>
        </ul>
        <input type="submit" value="Submit Info" />
    </form>
    

    现在在您的 order.php 中,让我们对其进行清理并简化一下,只是因为。

    <?php
        //define some fields
        define("HEADERS",   "MIME-Version: 1.0\r\nContent-type:text/html;charset=iso-8859-1\r\nFrom: noreply@mycompany.com\r\n");
        define("BODY_1",    "We have received the following Online Order from www.mycompany.com:");
        define("BODY_2",    "Please Review the following Online Order from www.mycompany.com:");
        define("SUBJECT_1", "Online Order");
        define("SUBJECT_2", "Thank you for your order");
        define("MY_EMAIL",  "packy@mycompany.com");
        define("REPLY",     "Thank you for your order. Customer service will call in the next 24 hours to review your order.")
    
        //sanitize your inputs. I like to remove every character that is not allowed
        $data = array(
            'name'   => preg_replace('/[^A-Za-z\\s]/', '', $_POST['FitterName']),
            'email'  => preg_replace('/[^A-Za-z0-9\\.@-_]/', '', $_POST['CustomerEmail']),
            'fitter' => preg_replace('/[^A-Za-z0-9\\.@-_]/', '', $_POST['FitterEmail']),
            'grind'  => preg_replace('/[^A-Za-z\\s,]/', '', implode(',', $_POST['grind'])),
            //the rest of your fields
        );
    
        //do your field checks here, exit out or return them to the form
    
        //send your emails
        $send = mail(MY_EMAIL, SUBJECT_1, BODY_1 . print_r($data, true), HEADERS);
        $send2 = mail($data['fitter'], SUBJECT_2, BODY_2 . print_r($data, true), HEADERS);
        $send3 = mail($data['email'], SUBJECT_2, REPLY, HEADERS);
    
        //more code and redirect
    

    【讨论】:

    • 谢谢,效果很棒。我刚刚有 2 个问题@jon_o:[ul] - 有没有办法只发布已填写信息的输入而不是全部列出? - 我这样称呼的一些数据&lt;input type="checkbox" name="grind[V-Grind]" class="grinds" value="V-Grind"&gt;V-Grind &lt;input type="checkbox" name="grind[Tour Grind]" class="grinds" value="Tour Grind"&gt;Tour Grind [/ul] 所以我可以调用多个复选框。当我测试这些数据时,review.php 上的数据看起来像“楔形:数组”。我该如何解决这个问题?再次感谢!!
    • @Packy,我更新了上面的代码,展示了如何将那些作为隐藏输入的数组字段重写。 或者,您可以只检查该字段是否像我在代码示例中那样是一个数组,然后只需内爆成一个字符串,如echo "&lt;input type='hidden' name='" . $key . "' value='" . (is_array($val) ? implode(',', $val) : $val) . "' /&gt;";,然后您只需更新您的 order.php 以接受字段作为字符串而不是数组。这有意义吗?
    • @jon_o,谢谢。但它仍然将值显示为“array”,如“grinds:array”。我尝试了顶部代码并将其更改为您上面所说的字符串。
    • 在您的第一个表单上,尝试将所有字段的名称从 grind[V-Grind] 更改为 grind[]。如果这不起作用,请在您的 review.php 页面上打印出该请求数组,看看您会得到什么:print_r($_REQUEST).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2013-11-04
    • 2016-06-07
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多