0

这是荒唐的。我的问题是根据标题。尝试var_dumpprint_r$_POST 超全局会产生一个空数组。

看看我的表格:

<form method="post" action="" class="login">
    <fieldset>
        <dl>
            <dt><label for="loginEmail">Email</label></dt>
            <dd><input type="email" id="loginEmail" name="loginEmail" maxLength="32" /></dd>

            <dt><label for="loginPassword">Password</label></dt>
            <dd><input type="password" id="loginPassword" name="loginPassword" maxlength="64" /></dd>

            <dt></dt>
            <dd><input type="submit" value="submit" class="button" /></dd>
        </dl>
    </fieldset>
</form>

我看不出有什么问题。该name属性完好无损,我正在发布到同一页面,但 POST 仍然为空。值得注意的是,我在另一个页面上有另一个表格,其语法相似。

例如:

if (!empty($_POST)) {
  echo '42';
}

不运行。

有任何想法吗?

4

3 回答 3

1

尝试打印$_SERVER出超全球。除其他外,它包含REQUEST_METHOD的关键值应该可以帮助您...

顺便说一句,一个空的动作属性实际上是非常好的。我已经看到它在甚至稍旧的浏览器中都能始终如一地工作。

另外,我曾经写过一个对调试很有帮助的小片段……只需将它插入到 PHP 代码的最顶部即可:

function on_shutdown(){
    echo "<!--\n";
    echo "\n\tHeaders Sent:";
        $file = $line = null;
        headers_sent($file, $line);
        echo "\n\t\t$file: $line";
    echo "\n\tLast Error:";
        if(function_exists('error_get_last') && error_get_last())
            foreach(error_get_last() as $k=>$v)
                echo "\n\t\t$k: $v";
        elseif($php_errormsg)
            echo "\n\t\tError: $php_errormsg";
        else echo "\n\t\tnone";
    echo "\n\tIncluded Files:";
        echo "\n\t\t".implode("\n\t\t", get_included_files());
    echo "\n-->";
}
register_shutdown_function('on_shutdown');
while(ob_get_level())ob_end_clean();
ob_implicit_flush(true);
于 2013-08-25T01:27:04.043 回答
0

我们知道有一个东西叫做 DEFAULT

根据 w3c :

action = uri [CT] 此属性指定表单处理代理。未定义 HTTP URI 以外的值的用户代理行为。来源:http ://www.w3.org/TR/html401/interact/forms.html

现在回到正题。如果它们都在同一页面上,您的代码运行良好:

<form method="post" action="" class="login">
    <fieldset>
        <dl>
            <dt><label for="loginEmail">Email</label></dt>
            <dd><input type="email" id="loginEmail" name="loginEmail" maxLength="32" /></dd>

            <dt><label for="loginPassword">Password</label></dt>
            <dd><input type="password" id="loginPassword" name="loginPassword" maxlength="64" /></dd>

            <dt></dt>
            <dd><input type="submit" value="submit" class="button" /></dd>
        </dl>
    </fieldset>
</form>

<?php
if (!empty($_POST)) {
  echo '42';
}
    ?>

并在填写值并提交后输出我得到的输出为:

42

当我将 php 代码更改为:

   <?php
if (!empty($_POST)) {
  var_dump($_POST);
}
       ?>

我得到的输出为:

 array (size=2)
 'loginEmail' => string 'abc@abc.com' (length=11)
 'loginPassword' => string 'qwerty' (length=6)

清理您的缓存并重新启动您的网络服务器。希望它现在可以工作:)

于 2013-08-25T02:42:53.223 回答
-1

您的表单没有指向任何地方。如果您希望它是同一页,请指定,

<form action="{$_SERVER['SCRIPT_NAME']}">

这将呈现相同的页面,但发送参数。如果您在某处有处理程序脚本,则指定相对 url。

于 2013-08-25T01:26:39.547 回答