首页 > 解决方案 > Parse input value to php variable on submit (clashing with other scripts running)

问题描述

I have a form that's doing various other things on top of what I want it to do, not an ideal situation but I want to tag on some extra things.

Is it possible to parse the email input field into a php variable on submit without breaking what's currently there? And then fire the php below the form?

  <form action="/event" method="POST">
    <input type="hidden" name="event" value="mc_newsletter_add">
    <input type="hidden" name="data[source]" value="newsletter">
    <input checked=checked type="checkbox" name="data[newsletter_onetime]" id="newsletter_onetime" class="newsletter-optins">
    <input checked=checked type="checkbox" name="data[promos]" id="promos" class="newsletter-optins">

    <input class="modal-newsletter-input" id="EmailAddress" name="data[customers_email_address]" placeholder="Enter your email here" required="required" type="email" value="<?php if(isset($_GET['email'])){echo $_GET['email'];}?>" aria-required="true">
    <input class="modal-newsletter-signup" id="newslettersignup" onclick="register_signup();" name="Submit" type="submit" value="Yes, sign me up" />
  </form>

Here's the php:

<?php $sib_tracking = new SIB_Tracking();
      $email = (submitted email to go here);
      $event = "marketing";
      $result = $sib_tracking->track_event($email, $event); ?>

标签: php

解决方案


Doesn't sure whats your register_signup() do. I assume it's a hook of some kind.

So what you can do, on click event - prevent form submitting. Send form data via $ajax request, then call your hook register_signup(), then remove the form from page to prevent further duplicated submitting.

  <form action="/event" method="POST" id="signupForm">
    <input type="hidden" name="event" value="mc_newsletter_add">
    <input type="hidden" name="data[source]" value="newsletter">
    <input checked=checked type="checkbox" name="data[newsletter_onetime]" id="newsletter_onetime" class="newsletter-optins">
    <input checked=checked type="checkbox" name="data[promos]" id="promos" class="newsletter-optins">

    <input class="modal-newsletter-input" id="EmailAddress" name="data[customers_email_address]" placeholder="Enter your email here" required="required" type="email" value="<?php if(isset($_GET['email'])){echo $_GET['email'];}?>" aria-required="true">
    <input class="modal-newsletter-signup" id="newslettersignup" name="Submit" type="submit" value="Yes, sign me up" />
  </form>

  <script>
    $("#signupForm").submit(function(e) {
        e.preventDefault();
        var form = $(this);

        $.ajax({
               type: "POST",
               url: form.attr('action'),
               data: form.serialize(),
               success: function(data)
               {
                   console.log(data); //data contain response from your php script
                   register_signup();
                   form.replaceWith("<div>You signed in</div>"); //This is optional - remove your form from page
               }
             });
    });
  </script>

Be aware - I add id to <form> tag, and remove onClick handler and submit button.

Hope that what you looking for.


推荐阅读