基于嵌套if语句的PHP邮件重定向头部位置

3

你好,我正在为一位客户设计一个网站。我已经设计了这个表单。

    <form action="inc/email.php" method="POST" onSubmit="alert('Email send successfully!');">
    <div class="col-md-6">
        <input type="text" id="contact-name" name="contact-name" value="" placeholder="Your name" required/>
        <input type="email" id="contact-email" name="contact-email" value="" placeholder="Your email" required/>
        <input type="number" id="contact-phone" name="contact-phone" value="" placeholder="Your phone" required/>
    </div>
    <div class="col-md-6">
        <select name="cars">
            <option value="volvo">Volvo</option>
            <option value="saab">Saab</option>
            <option value="audi">Audi</option>
        </select>
    </div>
    <div class="col-md-12">
        <input type="submit" value="Send message"/></td>
    </div>
</form>

它有三个选项可供选择,第一个是Volvo,第二个是Saab,第三个是Audi。
现在我想根据用户的选择将表单提交重定向到不同的网站
例如,如果用户选择了Volvo,则重定向到facebook.com;如果他选择了Saab,则重定向到Twiiter.com。

我已经为此设计了以下PHP代码。

<?php
/*Getting submitted values from html form*/

$name = $_POST['contact-name'];
$email = $_POST['contact-email'];
$phone = $_POST['contact-phone'];
$cars= $_POST['cars'];
/* Generating Output HTML */

$output = '<html><body><div>';
$output .= '<h2 style="color: #49A020;">Newsletter Email</h2>';
$output .= '<p style="line-height: 28px;font-size: 16px; text-align: justify; color: #333;">Name: '.$name.'</p>';
$output .= 'Phone: <a style="line-height: 28px;font-size: 16px; text-align: justify; color: #333;" href="tel: '.$phone.'">'.$phone.'</a><br><br>';
$output .= 'Email: <a  style="line-height: 28px;font-size: 16px; text-align: justify; color: #333;" href="mailto:'.$email.'">'.$email.'</a>';
$output .= '</div><div>';

/*Signature */

$output .= '<hr style="border:1px solid #49A020;">';
$output .= '<p style="margin-top: 0px; margin-bottom: 0px;">Thanks & Regards,</p>';
$output .= '<p style="margin-top: 0px; margin-bottom: 0px;">South Post Fitness,</p>';
$output .= 'Phone: <a href="tel:416843 5925">(416) 843 5925</a><br>';
$output .='Email: <a href="maito: info@xx.com">info@xx.com</a>';
$output .= '</div></body></html>';

 $to = 'my email address here';  /* Receivers Email*/

$headers = "From: $email \r\n"; /*Headers*/
$headers .= 'MIME-Version: 1.0' . "\n"; /*Headers*/
$headers .= 'Content-Type: text/html; charset=ISO-8859-1' . "\r\n"; /*Headers*/

$subject = 'my subject here'; /* Subject */
mail($to, $subject, $output, $headers); /*Sending Mail*/
  if(mail) {
    if($cars=="Volvo"){
          header("Location: http://facebook.com");  /*Redirect to home after sucessfull submission*/
    }
    elseif($cars=="Saab"){
      header("Location: http://twitter.com");  /*Redirect to home after sucessfull submission*/
    }
    elseif($cars=="Audi"){
        header("Location: http://pintrest.com");  /*Redirect to home after sucessfull submission*/
    }
  }
  else {
  echo 'Error sending email'; /*If failed display error message */
  }

?>

但是这段代码只会将页面重定向到第一个链接,即facebook.com,无论选择哪个选项。
3个回答

4
mail($to, $subject, $output, $headers); /*Sending Mail*/
if(mail) {

可能应该是这样:


$mail = mail($to, $subject, $output, $headers); /*Sending Mail*/
if($mail) {

请注意变量赋值和条件判断中缺失的$符号。 此外,你检查的是大写字符串,但实际字符串是小写的。
if($cars=="Volvo")

不是同一个意思

if($cars=="volvo")

是的,问题已解决。我将实际值称为“Volvo”和“Saab”,但没有使用html value =“saab”。我用$ cars2 = $ cars替换了代码,然后用小写“v”替换了if($ cars2 ==“volvo”),现在它可以工作了,我没有替换任何其他代码。 - Wasim Sayyed

2
邮件功能的返回类型为bool,因此您应该使用结果进行检查:
$result = mail($to, $subject, $output, $headers);
if($result) {
    ...
}

应避免使用==进行字符串比较。使用strcmp('string1', 'string2') == 0进行相等性检查。

如果您更改代码的最后部分以使用strcmp,它应该可以工作。


0
非常简短的答案,但是您正在从 $_POST['cars'] 设置 $cars,而您的选择正在发布所有值,因此请更改。
 <select name="cars">

 <select name="cars[]">

这样,您将获得$_POST['cars']数组,并从选择中获取其中的所有值。否则,它只会发布第一个<option>

编辑

正如另一个答案所说,您绝对应该执行$mail_success = mail(); 因为函数邮件()返回bool。 然后,您可以执行if($mail_success) {}

编辑2header()之后添加die; - 否则脚本可能会继续并导致意外行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接