-1

PHP フォームが process.php で処理されているのに、適切な $messages でフォーム ページに戻らない理由がわかりません。コード行がありませんか? 私はこれをすべて自分で書きましたが、これは初めてです。

これが私のhtmlです:

<!DOCTYPE html>
<html lang="en">
<head>
<title>Test Contact Form - jQuery</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
<script type="text/javascript" src="js/main.js"></script>

</head>
<body>    
    <h3>Contact Us</h3>
    <?php echo $contact_message; ?>
    <form id="myForm" method="post" action="process.php">
        <input name="name" type="text" value="<?php echo $_POST[name]; ?>" placeholder="Name" required/>
        <br>
        <input name="email" type="email" value="<?php echo $_POST[email]; ?>" placeholder="you@yourmail.com" required/>
        <br>
        <textarea name="message" class="message" placeholder="We can answer your questions." required>
            <?php echo $_POST[message]; ?>
        </textarea>
        <br>
        <button type="submit" name="submit" class="btn send">
            <img src="img/send.png">
        </button>
        <br>
        <?php echo $contact_success_message; ?>
    </form>
    <!--close contact form-->    
</body>
</html>

そして、これが私のものですprocess.php

<?php

//checks for valid email
function is_valid_email($email) {
    $result = true;
    $pattern = '/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])(([a-z0-9-])*([a-z0-9]))+(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+$/i';
    if(!preg_match($pattern, $email)) {
        $result = false;
    }
    return $result;
}

//when send is pressed, validate fields
if(isset($_POST['submit'])) {
    $valid = true;
    $contact_message = '';
    if ( $_POST['name'] == "" ) {
        $contact_message .= "You forgot to tell us your name. ";
        $valid = false; 
    }
    if ( !is_valid_email($_POST['email']) ) {
        $contact_message .= "A valid email is required, don't worry we don't share it with anyone. "; 
        $valid = false; 
    }
    if ( $_POST['message'] == "" ) {
        $contact_message .= "What did you want to ask us? ";
        $valid = false; 
    }
    //if everything checks out, send the message! 
    if ( $valid == true ) {
        $safe_email = str_replace("\r\n","",$_POST[email]);
        $mail = "From: $_POST[name]\n";
        $mail .= "Email: $_POST[email]\n";
        $mail .= "$_POST[message]\n";
        mail('ME@MYEMAIL.COM','New Contact from RN+',$mail,"From: $safe_email\r\n");
        $contact_success_message = 'Brilliant I say! We will be in contact with you shortly.';
        //clear form when submission is successful
        unset($_POST);
    }
}
?>

以前にこれを使用したことがあると断言できましたが、今回は連絡先ページに戻りません.

4

4 に答える 4

2

次のようなコードを使用するつもりだったようです。

フォーム.php

<?php include 'process.php'; ?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test Contact Form - jQuery</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
<script type="text/javascript" src="js/main.js"></script>

</head>
<body>

<h3>Contact Us</h3>
            <?php echo $contact_message; ?>
            <form id="myForm" method="post" action="process.php">
                <input name="name" type="text" value="<?php echo $_POST[name]; ?>" placeholder="Name" required/><br>
                <input name="email" type="email" value="<?php echo $_POST[email]; ?>" placeholder="you@yourmail.com" required/><br>
                <textarea name="message" class="message" placeholder="We can answer your questions." required><?php echo $_POST[message]; ?></textarea><br>
                <button type="submit" name="submit" class="btn send"><img src="img/se
__
formnd.png"></button><br>
                <?php echo $contact_success_message; ?>
            </form><!--close contact form-->

</body>
</html>

フォーム プロセッサは、HTML コードで出力する適切な変数を設定します。process.php はメソッドが POST かどうかをチェックするため、フォーム ページでそれを行う必要はありません。

于 2012-11-16T00:22:12.157 に答える
0

process.phpをフォームにリダイレクトする場合は、次のようなPHPヘッダーコードを追加する必要があります。header('Location: http://www.example.com/form.php');

データを元のページに戻す場合は、そのデータをGET変数としてURLに含めます。header('Location: http://www.example.com/form.php?message='.$messagetext);次に、GETを使用してフォームページでこれを取得できます。echo $contact_success_message = $_GET['message'];

exit(); or die();リダイレクト後も忘れずに!

于 2012-11-15T22:35:11.610 に答える
0

1つのPHPページを除外する理由がない場合は、2つ(フォームとプロセス)を1つのPHPページにマージできます。

<?php
//checks for valid email function
...
if(isset($_POST['submit'])) {
...
}
?>
...your HTML goes here...

これにより、データが送信されていない場合はフォームのみが表示され、フォームが送信されている場合は、ページが「再読み込み」され、アクションが実行され、適切なメッセージが表示されます。フォームアクションをに変更しaction=""て、ファイルがそれ自体に投稿されるようにします。

于 2012-11-15T23:18:39.317 に答える
-1

jQuery検証を使用することをお勧めします。それはより簡単で、メッセージを返す際に発生する可能性のある問題に役立ちます。

http://docs.jquery.com/Plugins/Validation

このようなもの...

$("#myForm").validate({
rules: {
    name: { required: true; }
},
messages: {
name: "You forgot to tell us your name.",
}

});

これは、電子メールフィールドおよびフォーム全体に対して実行できます。あなたはたくさんの例をオンラインで見つけることができます。

他のフィールドを含めるだけです。この方法で行うと、検証はクライアント側で行われ、フォームが処理されてから、お問い合わせいただきありがとうございますページに転送されます。

于 2012-11-15T22:36:07.643 に答える