1

PHP経由でフォームを送信する適切な方法を見つけようとしています:

部分的には 2 つの質問があります。1 つは特に私が取り組んでいるサイトに関するもので、もう 1 つはフォーム送信全般に関するものです。

質問 1. Web サイトのテンプレートとして php を使用しています。したがって、ヘッダーとフッターを含む1つのindex.phpページがあり、すべてのコンテンツは次のようにphp関数から取り込まれます。

     <article id="main">
        <?php
            $page = $_GET['page'];
                if(empty($page)){
                    $page = 'home';
                }

                $page.='.php';

                if(file_exists("pages/$page")) {
                    include("pages/$page");
                } else {
                    echo "$page no exist";
                }

        ?>
     </article>

これは私がフォームに使用しているコードで、index.php ページの head タグで使用しています。

        <head>
<?php
if ($_POST['submit'] && $human == '4') {
    if (mail ($to, $subject, $body, $from)) { 
        echo '<p>Your message has been sent!</p>';
    } else { 
        echo '<p>Something went wrong, go back and try again!</p>'; 
    }
} else if ($_POST['submit'] && $human != '4') {
    echo '<p>You answered the anti-spam question incorrectly!</p>';
}
?>

</head>

そしてhtmlフォームコード:

<form method="post" action="index.php">

    <legend>Contact Us</legend>
    <fieldset>
        <label>Name</label>
        <input name="name" placeholder="Type Here">

        <label>Email</label>
        <input name="email" type="email" placeholder="Type Here">

        <label>Message</label>
        <textarea name="message" placeholder="Type Here"></textarea>

        <label>*What is 2+2? (Anti-spam)</label>
        <input name="human" placeholder="Type Here">
    </fieldset>

     <input id="submit" name="submit" type="submit" value="Submit">

</form>

フォームを送信すると、フォームが更新され、エコー メッセージが index.php?page=contact ページではなく index.php?page=home ページに表示されます。エコーがフォームの同じページにとどまるようにするにはどうすればよいですか? (フォームの action=" " 部分を変更しようとしましたが、うまくいかないようです)。

質問 2.一般に、フォーム コードを確認するために他の Web ページを調べていると、どこにでも次のようなものがあります。

try
{
    for(var lastpass_iter=0; lastpass_iter < document.forms.length; lastpass_iter++)
    {
        var lastpass_f = document.forms[lastpass_iter];
        if(typeof(lastpass_f.lpsubmitorig2)=="undefined")
        { 
            lastpass_f.lpsubmitorig2 = lastpass_f.submit;
            lastpass_f.submit = function(){ 
                var form=this;
                var customEvent = document.createEvent("Event");
                customEvent.initEvent("lpCustomEvent", true, true);
                var d = document.getElementById("hiddenlpsubmitdiv"); 
                for(var i = 0; i < document.forms.length; i++)
                { 
                    if(document.forms[i]==form)
                    { 
                        d.innerText=i; 
                    }
                } 
                d.dispatchEvent(customEvent);
                form.lpsubmitorig2(); 
            } 
        }
    }
}
catch(e){}

上記のコードに精通している人はいますか?もしそうなら、フォームを適切に送信するための一般的なスクリプトはありますか?

ありがとう!

4

4 に答える 4

0

あなたのフォームは連絡先ページにあると思いますか?ページは、他の場所から に基づいて取得さ$_GET['page']れます。ページを更新すると、ページ選択スクリプトが再度実行されます。しかし、存在しないフォームからそこに来たmethod=postので$_GET['page']はないため、ページはコードに従ってホームに設定されます。ページの名前を保存する必要があります。変数として、$_SESSIONまたは連絡先フォームの非表示の入力によって (そうする場合は忘れずに変更$_GET$_REQUESTてください)。

于 2013-07-20T22:06:21.467 に答える
0

$page = $_GET['page'];あなたのコードが?で始まるのを見てください。

これは、URL の一部として「ページ」変数を送信することを意味します。そう

フォームタグをこれに変更します

<form method="GET" action="index.php?page=contact">  

そして、あなたが期待するものを見始めるはずです。

メソッド GET は、フォーム データを 1 つの長い URL として送信するようにブラウザに指示します (したがって、ユーザーに表示されます)。これは、データが目に見えない状態でサーバーに送信される (より安全な) POST とは対照的です。

しかし、$_POST を使用して GET データを取得しているため、残りのコードは機能しません。

代わりにこれを試してください: index.php?page=contact に移動すると、最初の質問が解決されます。

于 2013-07-20T22:12:43.917 に答える