2009-05-12 10 views
8

このテストページを自分のサーバーにセットアップしました。私がフォームを提出したときにも、なぜ$_POST配列に何も含まれていないのを教えてください。私は3つの異なるブラウザでこれを試しましたが、何も起こりません。

<?php print_r($_POST);?> 

<form method="post"> 

<p><label>Email: </label> 
<input type="text" id="login_email" /> 
</p> 

<p><label>Password: </label> 
<input type="password" id="login_password" /> 
</p> 

<p><label>Remember Me?: </label> 
<input type="checkbox" id="login_remember" /> 
</p> 

<p> 
<input type="submit" value="Login" /> 
</p> 

</form> 

私は何年もPHPを書いていますが、これはこれまでに起こったことがありません。このコードで何が問題になっていますか?

答えて

51

入力要素には名前属性がありません。

<input type="text" id="login_email" name="login_email" /> 

input要素にname属性がない場合は、POSTデータの一部として送信されません。

9

さて、フォームタグの操作はありませんか?これは、スクリプト名でなければなりません:

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

...そして、あなたはまた、各フォーム入力の名前を設定していない - ブラウザが要素名としてIDを提出していません。

+0

実際、アクション名を残しておくのが有効だと思います。そうすると、ブラウザは現在のページに投稿/取得します。 –

+6

ほとんどのブラウザでこの現象が発生しますが、公式の仕様によれば、アクション属性は必須です(http://www.w3.org/TR/html401/interact/forms.html)。 – BrynJ

+0

清算していただきありがとうございます。仕様がデフォルト動作を定義していないときに、そのようなあいまいさを表現することは悪い考えであると私は同意します。 –

2

入力要素の名前属性はありません。

4
<form method="POST" action="<?php echo $PHP_SELF; ?> 

<p><label>Email: </label> 
<input type="text" name="login_email" /> 
</p> 

<p><label>Password: </label> 
<input type="password" name="login_password" /> 
</p> 

<p><label>Remember Me?: </label> 
<input type="checkbox" name="login_remember" /> 
</p> 

<p> 
<input type="submit" value="Login" /> 
</p> 

</form> 
+0

これは動作します...あなたは '名前'とアクションの部分を忘れました。 – MichaelICE

0

すべての入力要素には名前属性が必要です。

1

Zend_Viewヘルパーに基づいて、以下のような関数を書くことをお勧めします。

formText($name, $value = null, array $attribs = null) 
formPassword($name, $value = null, array $attribs = null) 
formLabel($id, $text, array $attribs = null) 
formHidden($name, $value = null, array $attribs = null) 
formSubmit($name = null, $text = null, array $attribs = null) 
formSelect($name, $selected, array $attribs = null, array $options = null) 
formCheckbox($name, $default, array $attribs = null, array $options = null) 

次に、このようなことをもう一度忘れることはありません。

<form method="POST" action="<?php echo $PHP_SELF; ?> 

<p> 
<?php 
echo formLabel('login_email', 'Email'), ':', 
    formText('login_email'); 
?> 
</p> 

<p> 
<?php 
echo formLabel('login_password', 'Password'), ':', 
    formPassword('login_password'); 
?> 
</p> 

<p> 
<?php 
echo formCheckbox('login_remember'), ' ', 
    formLabel('login_remember', 'Remember me'); 
?> 
</p> 

<p> 
<?php 
echo formSubmit(null, 'Login'); 
?> 
</p> 
</form> 

ヒント:

  • idははattribsで定義されていない場合は、idがidはのために=「$ id」属性で使用され、FORMHIDDENは持つべきではないラベルを除いて、名前と同じですデフォルトのIDです。
  • formCheckboxは、同じ名前の前にformHiddenを負の値で書き込みます。したがって、チェックボックスもオンになっていない場合は戻り値が返されます。
  • formCheckbox optionsは、checkedまたはuncheckedの値を持つ配列です。
  • FILTER_VALIDATE_BOOLEANのフィルタを使用して、チェックボックスから戻り値が読み取られているかどうかを確認します。
0

スクリプトを動作させるための名前属性を忘れてしまった。また、ラベルに "for"タグを含めて、入力の名前属性に一致させることもできます。これは必須ではありませんが、フォームのCSSの整形を支援することができます:

<p> 
<label for="login_email">Email: </label> 
<input type="text" name="login_email" id="login_email" /> 
</p> 

は、のすべてを一致して、6ヶ月後にそれに戻って来ている場合は、より効率化し、読みやすいコードを保つことができます。

<form method="POST" action="<?php echo $PHP_SELF; ?> 

このページは同様にあなたのスクリプトが実行すべきとして行う限り、フォームの要件として良いであることを確認します:action属性を使用すると、1つを移植するつもりはない場合、私はあなたのアクションとしてこのが含まれるであろう。シンプルな見通しのようだ。お役に立てれば。

関連する問題