首页 > 解决方案 > PHP+JS 表单 - 提交后将页面 URL 粘贴到电子邮件表单中

问题描述

我有一个基本表单,在发送表单后,我需要将页面的 URL 插入到电子邮件中,以便我知道用户填写表单的位置。

我尝试了在这个论坛中找到的更多选项,但不幸的是,它们都没有奏效。

如何编辑代码以正确发送并将 URL 添加到电子邮件中。

非常感谢您的帮助

$("#contactForm").validator().on("submit", function(event) {
  if (event.isDefaultPrevented()) {
    //handle the invalid form...
    formError();
    submitContactFormMSG(false, "Vyplňte prosím formulář správně!");
  } else {

    var filter = /^((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$/;

    if (filter.test($("#formphone").val())) {
      //everything looks good!
      event.preventDefault();
      submitcontactForm();
    } else {
      submitContactFormMSG(false, "Vložte prosím správný telefon!");
      return false;
    }
  }
});

function submitcontactForm() {
  //Variables With Form Content
  var formfname = $("#formfname").val();
  var formlname = $("#formlname").val();
  var formemail = $("#formemail").val();
  var formphone = $("#formphone").val();
  var forminfo = $("#forminfo").val();

  $.ajax({
    type: "POST",
    url: "/forms/kontaktni-formular.php",
    data: "&formfname=" + formfname + "&formlname=" + formlname + "&formemail=" + formemail + "&formphone=" + formphone + "&forminfo=" + forminfo,
    success: function(text) {
      if (text == "success") {
        contactFormSuccess();
      } else {
        formError();
        submitContactFormMSG(false, text);
      }
    }
  });
}

function contactFormSuccess() {
  $("#contactForm")[0].reset();
  submitContactFormMSG(true, "Vaše zpráva byla úspěšně odeslána :-)")
}

function formError() {
  $(".help-block.with-errors").removeClass('hidden');
}

function submitContactFormMSG(valid, msg) {
  if (valid) {
    var msgClasses = "h3 text-center col-12 text-success";
  } else {
    var msgClasses = "h3 text-center col-12 text-danger";
  }
  $("#msgContactFormSubmit").removeClass().addClass(msgClasses).text(msg);
  $('html,body').animate({
      scrollTop: $("#msgContactFormSubmit").offset().top - 80
    },
    'slow');
}
.form-control {
  border: 1px solid #99CC33;
  border-radius: 10px;
}

.has-error .form-control {
  border-color: #ff0000;
}

.help-block {
  margin: 0;
  color: #ff0000;
  font-size: 12px;
  position: absolute;
  top: 22px;
}

label:first-child {
  margin-bottom: 20px;
}

.form-group {
  position: relative;
}

.contact-form {
  width: 90%;
  margin-left: 5%;
}
<form id="contactForm" name="contactForm" data-toggle="validator" class="row" accept-charset='UTF-8'>
  <div id="msgContactFormSubmit" class="hidden"></div>
  <div class="col-sm-6">
    <div class="row pad">
      <div class="form-group col-sm-6">
        <label for="formfname"><strong>Jméno</strong><div class="help-block with-errors"></div></label>
        <input name="formfname" id="formfname" placeholder="YYY" class="form-control" type="text" required data-error="Vložte jméno">
      </div>
      <!-- end form-group -->
      <div class="form-group col-sm-6">
        <label for="formlname"><strong>Příjmení</strong><div class="help-block with-errors"></div></label>
        <input name="formlname" id="formlname" placeholder="XXX" class="form-control" type="text" required data-error="Vložte příjmení">
      </div>
      <!-- end form-group -->
      <div class="form-group col-sm-6">
        <label for="formemail"><strong>E-mailová adresa</strong><div class="help-block with-errors"></div></label>
        <input name="formemail" id="formemail" placeholder="xxx@yyy.cz" pattern=".*@\w{2,}\.\w{2,}" class="form-control" type="email" required data-error="Vložte odpovídající e-mail">
      </div>
      <!-- end form-group -->
      <div class="form-group col-sm-6">
        <label for="formphone"><strong>Telefonní číslo</strong><div class="help-block with-errors"></div></label>
        <input name="formphone" id="formphone" placeholder="+420 XXXXXXXXX" pattern="^\+?\d{9,16}" class="form-control" type="text" required data-error="Vložte správné telefonní číslo">
      </div>
      <!-- end form-group -->
    </div>
  </div>
  <div class="form-group col-sm-6">
    <label for="forminfo"><strong>Další informace</strong></label>
    <textarea class="form-control" placeholder="Informace" name="forminfo" id="forminfo" rows="5"></textarea>
  </div>
  <!-- end form-group -->
  <div class="form-group col-sm-12">
    <button type="submit" id="submit" class="btn btn-shutter-out-horizontal col-sm-6 offset-sm-3">ODESLAT</button>
  </div>
</form>

在 PHP 中我有这个:

<?php
$errormsg = "";
if (empty($_POST["formfname"])) { $errormsg .= "Jméno je povinné. ";} else {$formfname = $_POST["formfname"];}
if (empty($_POST["formlname"])) {$errormsg .= "Příjmení je povinné. ";} else {$formlname = $_POST["formlname"];}
if (empty($_POST["formemail"])) {$errormsg .= "Email je povinný. ";} else {$formemail = $_POST["formemail"];}
if (empty($_POST["formphone"])) {$errormsg .= "Telefonní číslo je povinné ";} else {$formphone = $_POST["formphone"];}

$success = '';
$body_message = '';
if (!$errormsg){
    $headers =  'From: '. $formfname .' '. $formlname .' <'. $email .'>' . "\r\n" .
                'Reply-To: ' . $email . "\r\n" .
                'X-Mailer: PHP/' . phpversion() . "\r\n" .
                'Content-type: text/html; windows-1250' ;
    $to = "xxx@yyy.cz";
    $subject = "Kontaktní formulář";

    //telo mailu
    $body_message .= "<strong>Jméno:</strong> " . $formfname."<br>\n";
    $body_message .= "<strong>Přímení:</strong> " . $formlname."<br>\n";
    $body_message .= "<strong>E-mailová adresa:</strong> " . $formemail."<br>\n";
    $body_message .= "<strong>Telefon:</strong> " . $formphone."<br>\n";
    $body_message .= "<strong>Další informace:</strong> " . $forminfo."<br>\n";

    $success = @mail($to, $subject, $body_message, $headers);
}

if ($success){
   echo "success";
}else{
    echo "Něco se pokazilo: " . $errormsg;
}?>

标签: javascriptphphtmlcssforms

解决方案


您可能正在寻找$_SERVER['HTTP_HOST']$_SERVER['REQUEST_URI']使用 PHP。假设您的地址是https://example.com/foo.php?id=1. 然后HTTP_HOST返回example.comREQUEST_URI返回/bar.php?id=1。有两种选择:


第一个选项,使用 PHP。这仅在 PHP 代码与表单位于同一站点时才有效。它可能看起来像这样:

$body_message .= "<strong>Site:</strong> ".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."<br>\n";

而不是使用 url,你可以简单地使用任何你想要的可能更具可读性的东西。喜欢:

$body_message .= "<strong>Site:</strong> Get more information about us<br>\n";

第二个选项,使用隐藏的表单域。

<?php
$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo '<input type="hidden" name="formurl" id="formurl" value="'.$url.'">';

显然,您还必须将新的表单字段添加到您的 Javascript 中:

var formurl= $("#formurl").val();
//other code...
data: "&formfname=" + formfname + "&formlname=" + formlname + "&formemail=" + formemail + "&formphone=" + formphone + "&forminfo=" + forminfo + "&formurl=" + formurl,
//other code...

编辑:您仍然必须编辑 PHP 文件。否则脚本不知道还有另一个表单域。它只有两行:

<?php
//There's a new form field, so tell PHP it's there. No $errormsg is needed because it has nothing to do with the user input
if (empty($_POST["formurl"])) {$formurl = "no url given";} else {$formurl= $_POST["formurl"];}

//other code...

//Then append the URL to the message
$body_message .= "<strong>Site:</strong> ".$formurl."<br>\n";

也就是说,我总是更喜欢第一个选项而不是第二个选项。与所有输入字段一样,用户可以轻松地操作隐藏表单字段的值。因此,即使他是从 example.com/contact.php 发送的,在邮件中看起来好像是从 example.com/thisurldoesnotexist.php 发送的。如果例如 php 代码位于与 html 表单不同的站点上,则第二种解决方案可以是一个选项。


推荐阅读