【问题标题】:PHP Contact/Order form not working (switch statement)PHP 联系人/订单表格不起作用(switch 语句)
【发布时间】:2018-03-07 23:01:13
【问题描述】:

我已经尝试找到解决此问题的方法大约一周了。我很可能遇到了一个正确的答案并且不理解它,因为坦率地说,我对 PHP 一无所知。因此,我将非常感谢您的帮助。

我正在更新我父亲的网站,并试图将我现有的联系表格代码和一些由他原来网站的人编写的代码组合在一起,我无法获得发送订单(所有联系方式都很好,但是订单本身显示为“数组”)

从本质上讲,switch 函数应该换掉商品的名称并将其添加到订单中,前提是已经给出了数量。

我希望这是有道理的!

PHP:

<?php
session_start();

$tellimus = array();

function kirjuta_mail($input){

    while ($rida = array_pop($input)){
        $vastus .= "Tellin: ".$rida[0].": ".$rida[1]." tk.\n";
    } 

    $vastus .="\n\n $name\n $email\n $tel\n $address\n\n Kommentaar: $message\n\n";

}    

    if (isset($_POST["submit"])) {
    $kaart = $_POST['kaart'];
    $name = $_POST['name'];
    $email = $_POST['email'];
    $tel = $_POST['tel'];
    $address = $_POST['address'];
    $message = $_POST['message'];
    $human = intval($_POST['human']);
    $headers = "From: Saar Graafika lehelt \r\n";
    $headers .= "Reply-To: $email \r\n";
    $to = 'email@email.com'; 
    $subject = 'Tellimus Saar Graafika lehelt';

    $body = "\n $kaart\n\n $name\n $email\n $tel\n $address\n\n Kommentaar: $message\n\n";

    if (!$_POST['name']) {
    $errName = 'Please enter your name';
}
    if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    $errEmail = 'Please enter a valid e-mail address';
}
    if (!$_POST['tel']) {
    $errTel = 'Please enter your phone number';
}
    if (!$_POST['address']) {
    $errAddress = 'Please enter your address';
}
    if ($human !== 8) {
    $errHuman = 'The anti-spam is incorrect';
}
    if (!$errName && !$errEmail && !$errTel && !$errAddress && !$errHuman) {
    if (mail ($to, $subject, $body, $headers)) {
        $result='<div class="alert alert-success">Thank you for your order - we'll be in touch soon!</div>';
    } else {
        $result='<div class="alert alert-danger">We are sorry - there's been an error. Please try again later!</div>';
    }
}
    }
        function IsInjected($str)
{
    $injections = array('(\n+)',
           '(\r+)',
           '(\t+)',
           '(%0A+)',
           '(%0D+)',
           '(%08+)',
           '(%09+)'
           );

    $inject = join('|', $injections);
    $inject = "/$inject/i";

    if(preg_match($inject,$str))
    {
      return true;
    }
    else
    {
      return false;
    }
}

if(IsInjected($email))
{
    echo "We are sorry - there's been an error!";
    exit;
}

    if($checkme) {

        for ($i = 0; $i < 139; $i++){

            if (strlen($_POST['kaart'][$i])) {

                  switch ($i) {
                      case 0:
                          array_push($tellimus,array("kaart113", $_POST['kaart'][$i]));
                          break;
                            LOTS MORE ITEMS HERE
                          case 146:
                          array_push($tellimus,array("Challenges: CD ", $_POST['kaart'][$i]));
                          break;                          
                  }
            }
        }

    if (count($input) == 0)
        kirjuta_mail($tellimus);   
    }
?>

这些位来自原始代码:

session_start();

$tellimus = array();

function kirjuta_mail($input){

    while ($rida = array_pop($input)){
        $vastus .= "Tellin: ".$rida[0].": ".$rida[1]." tk.\n";
    } 

    $vastus .="\n\n $name\n $email\n $tel\n $address\n\n Kommentaar: $message\n\n";

} 

还有:

if($checkme) {

for ($i = 0; $i < 139; $i++){

    if (strlen($_POST['kaart'][$i])) {

          switch ($i) {
              case 0:
                  array_push($tellimus,array("kaart113", $_POST['kaart'][$i]));
                  break;
                    LOTS MORE ITEMS HERE
                  case 146:
                  array_push($tellimus,array("Challenges: CD ", $_POST['kaart'][$i]));
                  break;                          
          }
    }
}

if (count($input) == 0)
    kirjuta_mail($tellimus);   
}

相关 HTML:

<form role="form" method="post" action="telli.php">
<div class="panel-group" id="accordion2">
    <div class="panel panel-default">
            <a class="acca" data-toggle="collapse" data-parent="#accordion2" href="#collapseInnerOne"><div class="panel-heading kaks">
        <h4 class="panel-title"> J&otilde;ulukaardid: A4 kokkumurtud <span class="glyphicon glyphicon-chevron-down ava"></span></h4>
            </div></a>
            <div id="collapseInnerOne" class="panel-collapse collapse">
                <div class="panel-body">                                         
                    <p>Formaat: A4 kokkumurtud &nbsp;&#124;&nbsp; Hind: <span class="uus">0.90&euro;</span></p>
                    <div class="tellimus">
                        <a href="img/tooted/kaardid/postkaart/kaart136_A5.jpg" data-gallery="#blueimp-gallery-collapseInnerOne"><img src="img/tooted/kaardid/postkaart/kaart136_A5.jpg" class="kesku postkaart" alt=""></a>
                    <div class="form-group">
                        <label class="col-form-label">Kogus:&nbsp;&nbsp;</label>
                            <input type="number" class="form-control kogus" id="kogus" name=kaart[15] placeholder="0">&nbsp;tk
                    </div>
                    </div>
                </div>
            </div>
    </div>
</div>          
            <div class="form-group">
                <label for="name" class="col-form-label">Name<span class="uus">&#42;</span></label>
                    <input type="text" class="form-control" id="name" name="name" placeholder="Name" value="<?php echo htmlspecialchars($_POST['name']); ?>">
                        <?php echo "<p class='text-danger'>$errName</p>";?>
            </div>
            <div class="form-group">
                <label for="email" class="col-form-label">E-mail<span class="uus">&#42;</span></label>
                    <input name="email" class="form-control" id="email" type="email" placeholder="E-mail" value="<?php echo htmlspecialchars($_POST['email']); ?>">
                        <?php echo "<p class='text-danger'>$errEmail</p>";?>
            </div>
            <div class="form-group">
                <label for="tel" class="col-form-label">Phone<span class="uus">&#42;</span></label>
                    <input name="tel" class="form-control" id="tel" type="tel" placeholder="Your Phone Number" value="<?php echo htmlspecialchars($_POST['tel']); ?>">
                        <?php echo "<p class='text-danger'>$errTel</p>";?>
            </div>
            <div class="form-group">
                <label for="address" class="col-form-label">Address<span class="uus">&#42;</span></label>
                    <textarea class="form-control" rows="4" name="address" placeholder="Your address"><?php echo htmlspecialchars($_POST['address']); ?></textarea>
                        <?php echo "<p class='text-danger'>$errAddress</p>";?>
            </div>
            <div class="form-group">
                <label for="message" class="col-form-label">Message</label>
                    <textarea class="form-control" rows="4" name="message" placeholder="Your Message"><?php echo htmlspecialchars($_POST['message']); ?></textarea>
            </div>
            <div class="form-group">
                <label for="human" class="col-form-label">&#42;How much is 3+5? (Anti-spam)<span class="uus">&#42;</span></label>
                    <input type="text" class="form-control" id="human" name="human" placeholder="Answer">
                        <?php echo "<p class='text-danger'>$errHuman</p>";?>
            </div>
            <div class="form-group">
                <input type="hidden" name="checkme" value="formmail">
                <input id="submit" name="submit" type="submit" value="Place Order">
            </div>
            <div class="form-group">
                <?php echo $result; ?>
            </div>
        </form>

【问题讨论】:

  • 您将“订单”存储在哪里? “...获取要发送的订单(所有联系方式都很好,但订单本身显示为'数组')”
  • 根据我从原始编码器的 cmets 中了解到,订单应该存储在 $tellimus = array();

标签: php email switch-statement contact-form


【解决方案1】:

订单应该存储在 $_POST['kaart'] 中,这意味着您需要一个使用相同名称组合在一起的复选框才能在表单中添加订单,客户将单击该复选框以选择要订购的商品和循环用于将所选项目添加到 $tellimus 数组中,以便将其发送到邮件函数

【讨论】:

    【解决方案2】:

    您的脚本中有很多问题。不幸的是,我无法在这里详细解释所有内容。当您使用 HTML5 表单元素时,我在必填字段中添加了“必需”属性。因此,如果未填写,表单将不会提交。

            <form role="form" method="post"  action="telli.php">
            <div class="panel-group" id="accordion2">
                <div class="panel panel-default">
                        <a class="acca" data-toggle="collapse" data-parent="#accordion2" href="#collapseInnerOne"><div class="panel-heading kaks">
                    <h4 class="panel-title"> J&otilde;ulukaardid: A4 kokkumurtud <span class="glyphicon glyphicon-chevron-down ava"></span></h4>
                        </div></a>
                        <div id="collapseInnerOne" class="panel-collapse collapse">
                            <div class="panel-body">                                         
                                <p>Formaat: A4 kokkumurtud &nbsp;&#124;&nbsp; Hind: <span class="uus">0.90&euro;</span></p>
                                <div class="tellimus">
                                    <a href="img/tooted/kaardid/postkaart/kaart136_A5.jpg" data-gallery="#blueimp-gallery-collapseInnerOne"><img src="img/tooted/kaardid/postkaart/kaart136_A5.jpg" class="kesku postkaart" alt=""></a>
                                <div class="form-group">
                                    <label class="col-form-label">Kogus:&nbsp;&nbsp;</label>
                                        <input type="number" class="form-control kogus" id="kogus" name=kaart[15] placeholder="0">&nbsp;tk
                                </div>
                                </div>
                            </div>
                        </div>
                </div>
            </div>          
            <div class="form-group">
                <label for="name" class="col-form-label">Name<span class="uus">&#42;</span></label>
                    <input type="text" class="form-control" id="name" name="name" placeholder="Name" value="" required>
    
            </div>
            <div class="form-group">
                <label for="email" class="col-form-label">E-mail<span class="uus">&#42;</span></label>
                    <input name="email" class="form-control" id="email" type="email" placeholder="E-mail" value="" requird>
    
            </div>
            <div class="form-group">
                <label for="tel" class="col-form-label">Phone<span class="uus">&#42;</span></label>
                    <input name="tel" class="form-control" id="tel" type="tel" placeholder="Your Phone Number" value="" required>
    
            </div>
            <div class="form-group">
                <label for="address" class="col-form-label">Address<span class="uus">&#42;</span></label>
                <textarea class="form-control" rows="4" name="address" placeholder="Your address" required></textarea>
    
            </div>
            <div class="form-group">
                <label for="message" class="col-form-label">Message</label>
                    <textarea class="form-control" rows="4" name="message" placeholder="Your Message"></textarea>
            </div>
            <div class="form-group">
                <label for="human" class="col-form-label">&#42;How much is 3+5? (Anti-spam)<span class="uus">&#42;</span></label>
                    <input type="text" class="form-control" id="human" name="human" placeholder="Answer" required>
    
            </div>
            <div class="form-group">
                <input type="hidden" name="checkme" value="formmail">
                <input id="submit" name="submit" type="submit" value="Place Order">
            </div>
            <div class="form-group">
                <?php if(isset($result)) {echo $result;} ?>
            </div>
        </form>
    

    提交表单后,您的脚本甚至在处理所有这些订单元素之前就发送了电子邮件。这就是为什么您要订购 Array 的原因。我已经更改了执行的顺序,还更改了编码以处理订单元素。希望这会有所帮助..

                <?php
                session_start();
    
                if (isset($_POST["submit"])) {
                    foreach($_POST as $key=>$val) {
                       // echo "$key => $val <br/>\n";
                    }
                $kaart = $_POST['kaart'];
                $name = $_POST['name'];
                $email = $_POST['email'];
                $tel = $_POST['tel'];
                $address = $_POST['address'];
                $message = $_POST['message'];
                $human = intval($_POST['human']);
                $headers = "From: Saar Graafika lehelt \r\n";
                $headers .= "Reply-To: $email \r\n";
                $to = 'email@email.com'; 
                $subject = 'Tellimus Saar Graafika lehelt';
    
                $body = "Name = $name\n Email = $email\n Tel = $tel\n address = $address\n\n Kommentaar: $message\n\n";
    
                if(IsInjected($email))
                {
                    echo "We are sorry - there's been an error!";
                    exit;
                }
    
    
                $kart = "";
                foreach($_POST['kaart'] as $key => $val) {
                    if($val!==0){
                        $kart .= "kaart".$key."=$val\n";
                    }
                }
    
                $body .= "\n\n$kart";
    
                echo nl2br($body) ;
    
                    if (mail ($to, $subject, $body, $headers)) {
                        $result='<div class="alert alert-success">Thank you for your order - we\'ll be in touch soon!</div>';
                    } else {
                        $result='<div class="alert alert-danger">We are sorry - there\'s been an error. Please try again later!</div>';
                    }
    
                }
    
                function IsInjected($str)
                {
                $injections = array('(\n+)',
                       '(\r+)',
                       '(\t+)',
                       '(%0A+)',
                       '(%0D+)',
                       '(%08+)',
                       '(%09+)'
                       );
    
                $inject = join('|', $injections);
                $inject = "/$inject/i";
    
                if(preg_match($inject,$str))
                {
                  return true;
                }
                else
                {
                  return false;
                }
            }
    
    
            ?>
    

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多