-2

PHPロジックによってレンダリングされる次のフォームがあります。フォームは正常にレンダリングされます。テキスト入力と送信ボタンなどすべてを見ることができます。

IE では、フォームは期待どおりに機能します。最初のフォームは 'index.php?subscribe=go' に、2 番目のフォームは 'index.php?unsub=go' に行きますが、FF と Chrome では送信ボタンをクリックするとページがリロードされます (フォーム アクションには行きません)。他のブラウザは確認していません。

タグがFirefox のページにも存在<form>しないことが Firebug でわかりました。これは非常に奇妙です。見てみな:

else
    {
        echo '<div class="subs_main">';
        if (isset($_GET['subscribe']))
        {
            if ($_GET['subscribe'] != 'go')
            {?>
                Subscribe to <b>Bella Blog</b> for specials, sales, news and more!
                <br />
                <form action="index.php?subscribe=go" method="post" name="subscribe_form" onsubmit="return checkForm();">
                Name: <input type="text" name="name" size="15" />
                <br />
                Email: <input type="email" name="email" size="20" />
                <br />
                <input type="submit" value="subscribe!" name="submit" />
                </form>
                <p class="unsub">You can <a href="index.php?unsub">unsubscribe</a> at any time</p>
            <?php
            } 
            else
            {
                // subscribe user

            }
        }
        elseif (isset($_GET['unsub']))
        {
            if ($_GET['unsub'] != 'go')
            {?>
                Sorry to see you go! You can <a href="index.php?subscribe">re-subscribe</a> at any time!
                <br />
                <form onsubmit="return checkForm2()" name="unsub_form" method="post" action="index.php?unsub=go">
                Email: <input type="email" name="email" size="20" />
                <br />
                <input type="submit" value="unsubscribe" name="submit" />
                </form>
            <?php 
            }
            else
            {
                // process unsubscription HERE

            }
        }
        echo '</div>';
    }

これはフォーム検証用の JS です (IE で動作し、このスクリプトをコメントアウトしても同じ結果が得られるため、無視できると思います):

<script type="text/javascript" language="javascript">
function checkForm()
{
    var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
    var form = document.forms.subscribe_form;
    var name = form.name.value;
    var email = form.email.value;

    if (name == '' || email == '')
    {
        alert('You must enter both your name and email address!');
        return false;
    }
    else if (!email.match(regex))
    {
        alert('You must enter a valid email!');
        return false;
    }
    return true;
}
function checkForm2()
{
    var form = document.forms.unsub_form;
    var email = form.email.value;

    if (email == '')
    {
        alert('You must enter an email address!');
        return false;
    }
    return true;
}
</script>
4

3 に答える 3

1

フォームに POST メソッドを使用する場合、すべてのパラメーターを INPUT HTML 要素に渡す必要があります (つまり、action="index.php?subscribe=go" と action="index.php?unsub=go" は間違っています)。

于 2012-08-27T00:36:37.337 に答える
0

タグ<form>が存在しない?出力を USER_AGENT に合わせて調整するコードがない限り、特定の GET/POST 入力セットをページに渡すブラウザは、同じ出力を受け取るはずです。もちろん、ページをレンダリングしてイベントに応答する方法が (場合によっては大幅に) 異なる可能性がありますが、ソース コードは同一である必要があります。

ページのソースを投稿すると、問題が何であるかを確認できます。

于 2012-08-27T00:21:28.673 に答える
-1

これは風変わりな WAMP の問題でした。ファイル内に WAMP エラーを生成する他の PHP コードがありましたが (ただし、ライブ サイトではエラーは発生しませんでした)、意味がないため無視してきました。「未定義のインデックス」と呼ばれるもので、$_POST['example'] の代わりに $_POST[example] を使用して PHP 変数を呼び出すと、エラーが表示されます。最もばかげている。

そのため、WAMP は<table>、私のページの他のフォームと混同された大量の HTML (エラー) を吐き出しました。IEはそこにあるめちゃくちゃなフォームを処理でき、私のフォーム(問題に示されている)は正常に機能しましたが、FF / Chromeはできません。

これが誰かに役立つことを願っています。

于 2012-08-27T00:44:21.750 に答える