-2

我有以下由一些 PHP 逻辑呈现的表单。表格渲染得很好;你可以看到文本输入和提交按钮等等。

在 IE 中,表单按预期工作。第一个表单转到“index.php?subscribe=go”,第二个表单转到“index.php?unsub=go”,但在 FF 和 Chrome 中,单击提交按钮会重新加载页面(不转到表单操作)。我没有检查其他浏览器。

我在 Firebug 中发现该标签甚至在 Firefox 的页面上<form>都不存在。这很奇怪;看看这个:

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 问题。我在文件中有一些其他 PHP 代码生成了 WAMP 错误(但在实时站点上没有错误),我一直忽略它,因为它没有意义。'未定义的索引'是它的名称,当您使用 $_POST[example] 而不是 $_POST['example'] 调用 PHP 变量时会出现错误。最可笑的。

因此,WAMP 吐出了一堆<table>与我页面上的其他表单混在一起的 HTML(错误)。IE 可以处理混乱的表单,并且我的表单(显示有问题)正常工作,而 FF/Chrome 不能。

希望这可以帮助某人。

于 2012-08-27T00:44:21.750 回答