0

ばかげてる。私の問題はタイトルの通りです。$_POST スーパーグローバルを実行しようとするvar_dumpと、空の配列が生成されます。print_r

私のフォームを見てください:

<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)

キャッシュを消去し、Web サーバーを再起動します。それが今うまくいくことを願っています:)

于 2013-08-25T02:42:53.223 に答える
-1

あなたのフォームはどこにも向いていません..同じページであると予想される場合は、次のように指定します。

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

同じページをレンダリングしますが、パラメーターを送信します。どこかにハンドラー スクリプトがある場合は、相対 URL を指定します。

于 2013-08-25T01:26:39.547 に答える