2

私はPHPの連絡フォームを作成中ですが、私が持っているphpスクリプトには、メールが送信されたときに新しい「ありがとう」ページが呼び出されるという小さな問題があります。お問い合わせフォームが消えますが、私はそれが起こりたくありません。

送信ボタンが押された場合、私は自分のサイトにとどまり、空の連絡フォームを表示し、おそらく連絡フォームの下に「ありがとう.....」と1行だけ表示します。

どうすればそれを実現できますか?HTMLとPHPファイルに何を含める必要があるかを説明できるコードスニペットはありますか?うまくいけば...以下は私のphpが今どのように終了するかです。

// send Email 
if (@mail( $empfaenger, htmlspecialchars( $betreff ), $mailbody, $mailheader ))
{
    // if email was successfully send
    echo 'Thank you for your Email. We will get in touch with you very soon.';
}

@FreekOne
を 編集
現在、ありがとうやエラーパネルをスライドさせてテキストをフェードインさせたいので、少し変更を加えてコードを使用しています。スクリプトはコードを受け入れています(まだ機能しているため)が、実際にはテキストが実際にフェードインしているのがわかりません。テキストがフェードインしているスライドパネルのサンプルを見ました。ですから、私が行ったコーディングは間違っているようです。
必要に応じて、ここのコードを参照してください。http:
//jsbin.com/ohuya3
たぶんあなたは私を正しい方向に向けることができます。もちろん、ここにいる皆さんの助けをいただければ幸いです。

4

2 に答える 2

7

データを同じページに送信するようにフォームを設定し、スクリプトで送信をリッスンします。何かのようなもの:

contact.php

<?php
// Check if form was previously submitted
if(isset($_POST['myFormSubmitted'])) {
    // Do your form processing here and set the response
    $response = 'Thank you for your Email. We will get in touch with you very soon.';
}
?>
<!-- HTML here -->
<?php
if (isset($response)) { // If a response was set, print it out
    echo $response;
}
?>
<form method="POST" action="contact.php">
    <!-- Your inputs go here -->
    <input type="submit" name="myFormSubmitted" value="Submit">
</form>
<!-- More HTML here -->

アップデート

提供された追加情報を考慮して、私は個人的に AJAX を介して jQuery でそれを行います。まず、フォームと結果のコンテナーをセットアップします。

HTML

<form id="myForm" method="POST" action="contact.php">
    <input type="text" id="name" name="name">
    <input type="text" id="email" name="email">
    <input type="text" id="message" name="message">
    <input type="submit" name="myFormSubmitted" value="Submit">
</form>
<div id="formResponse" style="display: none;"></div>

次に、送信されたデータを処理して応答を出力する php スクリプトをセットアップします。

PHP (contact.php)

<?php
if(isset($_POST['myFormSubmitted'])) {
    // Do your form processing here and set the response
    echo 'Thank you for your Email. We will get in touch with you very soon.';
}
?>

最後に、ページを離れずにフォームを送信し、結果コンテナーに結果を挿入する jQuery スクリプトです (素敵でシンプルなフェードイン効果があります)。

jQuery

$("#myForm").submit(function() {
    $.post('contact.php', {name: $('#name').val(), email: $('#email').val(), message: $('#message').val(), myFormSubmitted: 'yes'}, function(data) {
        $("#formResponse").html(data).fadeIn('100');
        $('#name, #email, #message').val(''); /* Clear the inputs */
    }, 'text');
    return false;
});

お役に立てれば !

于 2010-10-03T13:46:57.107 に答える
1

以下のこれらの答えはすべて間違っています。2 重のメッセージでスパムメールが送信されることがあり、顧客を混乱させます。

解決策はちょっと難しいですが

まず、ゴールデン ルールを学ぶ必要があり
ます。POST リクエストを処理した後、コードは GET メソッドを使用してブラウザーをリダイレクトする必要があります。例外なく。

ということで、まずはこんな感じに

if ($_SERVER['REQUEST METHOD']=='POST') {
  mail( $empfaenger, htmlspecialchars( $betreff ), $mailbody, $mailheader );
  header("Location: ".$_SERVER['PHP_SELF']);
  exit;
}  
// your form goes here

とにかくやるべきです。

次に、この役に立たないメッセージを表示したい場合は、いくつかの方法があります。

  • GET パラメータの使用
  • クッキーの使用
  • AJAX を実行しています。

たとえば、GET パラメータを使用するには

if ($_SERVER['REQUEST_METHOD']=='POST') {
  mail( $empfaenger, htmlspecialchars( $betreff ), $mailbody, $mailheader );
  header("Location: ".$_SERVER['PHP_SELF']."?thanks");
  exit;
}  
if ($_SERVER['QUERY_STRING']=='thanks') {
  echo 'Thank you for your Email. We will get in touch with you very soon.';
}
// your form goes here
于 2010-10-03T14:08:24.197 に答える