【问题标题】:PHP+JS Form - Paste page URL into the email form after submittingPHP+JS 表单 - 提交后将页面 URL 粘贴到电子邮件表单中
【发布时间】:2021-09-20 09:05:57
【问题描述】:

我有一个基本表单,在发送表单后,我需要将页面的 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;
}?>

【问题讨论】:

  • so that I know where the user filled in the form....为什么,你有多个表格吗?还是您的意思是它显示在多个页面上?生成页面时在表单中包含页面 ID 或隐藏字段可能是有意义的
  • 使用 $_SERVER['HTTP_REFERER'] 获取引用 URL(当您发送表单请求 vai ajax 时)。

标签: javascript php html css forms


【解决方案1】:

您可能正在 PHP 中寻找$_SERVER['HTTP_HOST']$_SERVER['REQUEST_URI']。假设您的地址是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 表单位于不同的站点。

【讨论】:

  • 我不是开发人员,所以提前抱歉。我只能使用 html 和 css。所以 PHP 和 JS 我反复试验。我需要使用第二个选项,因为我无法将 HTML 表单代码与 PHP 结合起来,即使这可能是一个更好的选择。在第二个选项中,我将所有东西从你的 JS sn-ps 放到我的 main.js 中,但是如果我把你的 php 代码的 sn-p 放到 kontaktni-formular.php,它就不起作用了。
  • 我不知道你不懂 PHP。我添加了有关第二个选项的更多信息。您仍然需要添加一点 PHP 代码,因为如果您不告诉 PHP 脚本有一个新的表单字段应该放入邮件中,它自己就不会这样做。基本上你只需添加一个新字段。首先在 html 中(将信息放入表单字段 | 由于“隐藏”,它不可见),然后在 Javascript 中(发送表单 | 你不需要 javascript 来发送表单,但你仍然使用它),最后在 PHP (获取信息并发送邮件)。
  • 我将所有内容添加到我的文件中(第一个代码到 HTML,第二个到 JS,最后一个到 PHP)。提交后每个字段都可以,但 SITE 未定义 - havic.cz/test
  • 您的测试文件的文件扩展名是什么?它必须是 .php,否则 PHP 代码将无法在其中工作。如果是 html 文件,则不能使用 PHP,而必须手动添加 URL(或站点名称)。例如:
  • 感谢您的回复。现在我明白了。因此,我将使用 value="url site" 并每次手动输入 URL。起初我以为它会自动工作(不知何故)
猜你喜欢
  • 2013-09-16
  • 2013-10-20
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 2015-11-11
  • 2014-02-27
  • 1970-01-01
  • 2011-08-01
相关资源
最近更新 更多