0

同じ php ファイルを使用して処理しようとしているサイトに 2 つの異なる連絡先フォームがあります。コードの 1 つのセクションでこのコードを使用したいと思います。「1」は最初のフォームの隠しフィールドの値で、「2」は 2 番目のフォームの隠しフィールドの値です。

if ($_POST['process']=='1'){}

何をしても、このコードを機能させることはできません。上記のコードを削除してみましたが、お問い合わせフォームは問題なく送信されます。私が試したもう 1 つのことは、非表示の値をテキスト フィールドに変更して、実際に値が表示されていることを確認することでした。また、「プロセス」隠しフィールドの値を変数として含めて、電子メールで送信しました。その変数の値は、電子メールで空白になります。ここで何が間違っていますか?これが私のコードです:

 if(!$_POST) exit;
    function remove_non_numeric($string) {
    return preg_replace("/[^0-9.]/", "", $string);
    }

    function isEmail($email) {
    return preg_match("/^(?!.{255,})(?!.{65,}@)([!#-'*+\/-9=?^-~-]+)(?>\.(?1))*@(?!.*[^.]        {64,})(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?\.){1,126}[a-z]{2,6}$/iD", $email);
    }
    if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

    if ($_POST['process']=='1'){

$name     = $_POST['name'];
$email    = $_POST['email'];
$phone    = remove_non_numeric($_POST['phone']);
$comments = $_POST['comments'];
$verify   = $_POST['verify'];
$process  = $_POST['process'];

if(trim($name) == '') {
    echo '<div class="error_message">You must enter your name.</div>';
    exit();
} else if(trim($email) == '') {
    echo '<div class="error_message">Please enter a valid email address.</div>';
    exit();
} else if(trim($phone) == '') {
    echo '<div class="error_message">Please enter a valid phone number.</div>';
    exit();
} else if(!isEmail($email)) {
    echo '<div class="error_message">You have entered an invalid e-mail address, please try again.</div>';
    exit();
} else if(trim($comments) == '') {
    echo '<div class="error_message">Please enter your message.</div>';
    exit();
} else if(!isset($verify) || trim($verify) == '') {
    echo '<div class="error_message">Please enter the verification number.</div>';
    exit();
} else if(trim($verify) != '4') {
    echo '<div class="error_message">The verification number you entered is incorrect.</div>';
    exit();
}

if(get_magic_quotes_gpc()) {
    $comments = stripslashes($comments);
}

$address = "myemail@email.com";
$e_subject = 'You\'ve been contacted by ' . $name . '.';
$e_body = "You have been contacted by $name. Their message is below." . PHP_EOL . PHP_EOL;
$e_content = "\"$process\"" . PHP_EOL . PHP_EOL;
$e_reply = "You can contact $name via email, $email or via phone $phone";



$msg = wordwrap( $e_body . $e_content . $e_reply, 70 );

$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

if(mail($address, $e_subject, $msg, $headers)) {

    // Email has sent successfully, echo a success page.

    echo "<fieldset>";
    echo "<div id='success_page'>";
    echo "<h1>Email Sent Successfully.</h1>";
    echo "<p>Thank you <strong>$name</strong>, your message has been sent.</p>";
    echo "</div>";
    echo "</fieldset>";

} else {

    echo 'ERROR!';
}
}

簡単にするために、他のフォームを処理するコードの 2 番目のビットを削除しましたが、何をしようとしているのかを理解していただければ幸いです。「プロセス」という隠しフィールドの値が「1」の場合、このコードを処理します。値が 2 の場合は、代わりに他のコードを処理する必要があります。

コードの html 部分は次のとおりです。

<div id="contact">

            <div id="message"></div>

            <form method="post" action="http://s423839726.onlinehome.us/franklinvineyard/contact.php" name="contactform" id="contactform">

            <fieldset>

            <input type="text" name="process" id="process" size="4" value="1" />

            <label for="name">Your Name<span class="required">*</span></label>
            <input name="name" type="text" id="name" size="30" value="" />

            <br />
            <label for="email">Email<span class="required">*</span></label>
            <input name="email" type="text" id="email" size="30" value="" />

            <br />
            <label for="phone">Phone<span class="required">*</span></label>
            <input name="phone" type="tel" id="phone" size="30" value="" />


            <br />
            <label for="comments">Comments<span class="required">*</span></label>
            <textarea name="comments" cols="40" rows="15" id="comments" style="width: 350px;"></textarea>

            <label>Are you human?<span class="required">*</span></label>

            <label class="accesskey" for="verify">&nbsp;&nbsp;&nbsp;3 + 1 =</label>
            <input class="accesskey" name="verify" type="text" id="verify" size="4" value="" style="width: 30px;" /><br /><br />

            <input type="submit" class="submit" id="submit" value="submit" />

            </fieldset>

            </form>
        </div><!--end contact-->

フォームを処理するjqueryもあります...これが問題でしょうか?

jQuery(document).ready(function(){

    $('#contactform').submit(function(){

        var action = $(this).attr('action');

        $("#message").slideUp(750,function() {
        $('#message').hide();

          $('#submit')
            .attr('disabled','disabled');
     if($('#process').val()=='1'){
        $.post(action, {
            name: $('#name').val(),
            email: $('#email').val(),
            phone: $('#phone').val(),
            comments: $('#comments').val(),
            verify: $('#verify').val()
        },
            function(data){
                document.getElementById('message').innerHTML = data;
                $('#message').slideDown('slow');
                $('#contactform img.loader').fadeOut('slow',function(){$(this).remove();
                                                                      });
                $('#submit').removeAttr('disabled');
                if(data.match('success') !== null) $('#contactform').slideUp('slow');

            }
        );
    else{
        $.post(action, {
            name: $('#name').val(),
            email: $('#email').val(),
            phone: $('#phone').val(),
            friend: $('#friend').val(),
            search: $('#search').val(),
            signage: $('#signage').val(),
            vineyard: $('#vineyard').val(),
            newspaper: $('#newspaper').val(),
            other: $('#other').val(),
            comments1: $('#comments-survey1').val(),
            comments2: $('#comments-survey2').val(),
            comments3: $('#comments-survey3').val(),
            verify: $('#verify').val()
        },
        function(data){
                document.getElementById('message').innerHTML = data;
                $('#message').slideDown('slow');
                $('#contactform img.loader').fadeOut('slow',function(){$(this).remove();
                                                                      });
                $('#submit').removeAttr('disabled');
                if(data.match('success') !== null) $('#contactform').slideUp('slow');

            }
        );

        });

        return false;
        });
    });

});
4

2 に答える 2

1

javascript で送信をインターセプトしており、すべてのフォーム フィールドをフォーム ハンドラーに渡していません。これを修正するには、次のように置き換えます。

$.post(action, {
            name: $('#name').val(),
            email: $('#email').val(),
            phone: $('#phone').val(),
            comments: $('#comments').val(),
            verify: $('#verify').val()
        },

これとともに:

$.post(action, $('#contactform').serialize(),
于 2013-03-06T13:06:03.407 に答える